From cb93e76cb853a22e540a556030b7b88fde589d56 Mon Sep 17 00:00:00 2001 From: yuliiiah Date: Tue, 30 Apr 2024 20:54:10 +0200 Subject: [PATCH 01/31] feat: Splitting off a release branch for 4.4.x From 0f643db76d44a8ccfecbe0b0de2ac1aa7e57b135 Mon Sep 17 00:00:00 2001 From: Yuliia Horbenko <31223054+yuliiiah@users.noreply.github.com> Date: Thu, 2 May 2024 17:33:13 +0200 Subject: [PATCH 02/31] Update profile variables docs (#2729) * docs: Interim on profile variable updates * docs: Update the profile variables docs * chore: Update image formats * docs: Implement peer review * Optimised images with calibre/image-actions * Optimised images with calibre/image-actions * chore: Fix formatting --------- Co-authored-by: vault-token-factory-spectrocloud[bot] <133815545+vault-token-factory-spectrocloud[bot]@users.noreply.github.com> --- .../define-profile-variables.md | 52 +++++++++++++----- ...ne-profile-variables_add-vars-to-yaml.webp | Bin 32506 -> 42750 bytes ...ne-profile-variables_variable-preview.webp | Bin 0 -> 14032 bytes 3 files changed, 38 insertions(+), 14 deletions(-) create mode 100644 static/assets/docs/images/profiles_create-cluster-profiles_define-profile-variables_variable-preview.webp diff --git a/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/define-profile-variables.md b/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/define-profile-variables.md index 7cebca6390..177a71902c 100644 --- a/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/define-profile-variables.md +++ b/docs/docs-content/profiles/cluster-profiles/create-cluster-profiles/define-profile-variables.md @@ -67,8 +67,8 @@ This guide explains how you can define and manage cluster profile variables. ### Enablement You can define profile variables both while creating and for the already created cluster profiles. To define profile -variables [while creating a cluster profile](../create-cluster-profiles/create-cluster-profiles.md), start following -this guide from step three at the **Profile Layers** stage of cluster profile creation. +variables [while creating a cluster profile](../create-cluster-profiles/create-cluster-profiles.md), you need to be at +the **Profile Layers** stage of cluster profile creation and start following this guide from step three. 1. Log in to Palette. @@ -78,6 +78,13 @@ this guide from step three at the **Profile Layers** stage of cluster profile cr ![Palette with the Variables button highlighted.](/profiles_create-cluster-profiles_define-profile-variables_open-profile-variables.webp) + :::tip + + Alternatively, open a profile layer and, in the upper-right corner of its YAML configuration editor, select + **Variables**, and then **Create variable**. + + ::: + 4. Enter the variable name in the `{{.spectro.var.}}` format. You will use this name when adding variables to layer configurations. The name must be unique within the parent cluster. @@ -115,12 +122,14 @@ this guide from step three at the **Profile Layers** stage of cluster profile cr ::: -9. Click **Create**. +9. Review the variable definition and behavior under **Preview**, and then select **Create**. + + ![Palette YAML editor with the added profile variables.](/profiles_create-cluster-profiles_define-profile-variables_variable-preview.webp) -10. On the **Profile variables** pane, next to your variable, click the **Copy to clipboard** icon to copy the variable - name. +10. Navigate to the YAML configuration of the profile layer for which you want to add the variable. In the upper-right + corner of its YAML configuration editor, select **Variables**. -11. Navigate to the YAML configuration of the profile layer for which you want to add the variable. +11. Next to the variable you want to add, click the **Copy to clipboard** icon to copy its name. 12. Paste the variable in the `parameter: "{{.spectro.var.variable_name}}"` format and click **Confirm Updates**. @@ -129,6 +138,14 @@ this guide from step three at the **Profile Layers** stage of cluster profile cr ![Palette YAML editor with the added profile variables.](/profiles_create-cluster-profiles_define-profile-variables_add-vars-to-yaml.webp) + :::tip + + To improve navigation, you can change the display order of variables. Select the **Variables three-dot menu**, then + select **Reorder variables**, and drag and drop variables to change their display order. Finally, select **Confirm + order**. + + ::: + 13. Repeat the steps described in this guide to define more variables and add them to the necessary cluster profile layers. @@ -142,7 +159,9 @@ this guide from step three at the **Profile Layers** stage of cluster profile cr 3. In the upper-right corner, click **Variables** and, on the **Profile variables** pane, check that the necessary variables are defined. -4. Open the necessary profile layers and check that their YAML configuration contains the expected variables. +4. Hover over the **[Count] layers** pill next to the variables to review the profile layers where they are used. + +5. Open the necessary profile layers and check that their YAML configuration contains the expected variables. ## Manage Profile Variables @@ -166,16 +185,21 @@ variables in the new version. 1. Log in to Palette. -2. Navigate to the cluster profile for which you want to update profile variables. +2. Navigate to the cluster profile for which you want to update profile variables and, in the upper-right corner, click + **Variables**. + + :::tip + + Alternatively, open a profile layer and, in the upper-right corner of its YAML configuration editor, select + **Variables**. -3. In the upper-right corner, click **Variables**. + ::: -4. To edit a profile variable, in the right **Three-dot menu** of the necessary variable, click **Edit** and make the - necessary changes. Note that you cannot edit the **Variable**, **Format**, **Custom input validation**, **Required**, - **Mask value**, and **Read-only** fields. +3. To edit a profile variable, in the **three-dot menu** of the necessary variable, select **Edit** and make the + necessary changes. -5. To delete a profile variable, in the right **Three-dot menu** of the necessary variable, click **Delete**. Then, - navigate to the profile layers that implement this variable and manually remove it from their YAML configurations. +4. To delete a profile variable, navigate to the profile layers that implement this variable and remove it from their + YAML configuration. Then, in the **three-dot menu** of the necessary variable, select **Delete**. ### Validation diff --git a/static/assets/docs/images/profiles_create-cluster-profiles_define-profile-variables_add-vars-to-yaml.webp b/static/assets/docs/images/profiles_create-cluster-profiles_define-profile-variables_add-vars-to-yaml.webp index 46c2c91abc6d416a6e774c6034a7bcb789f72e75..aeb5162db68fa62605289437ecc1cd95a7b3a2fd 100644 GIT binary patch literal 42750 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 literal 32506 zcmcG!W0+;jwlMQ@D-{-d|Q`8tx#7Yf8=Y6N)NpIMR-Npv) z!{U7|OYZBA*8={_=jO+iZZ`jz^SEcXU-To|eZgbtH-8f1;rFfIx>wOR<7e;3&L#Oz zUkP9N_t_l$4_!o__t%}zopT?_FP#_mH~zh@kMGhi`k|d!zku(_FYYz;`@D<1x}GjS z>Tj!0@Yi3DK1QG5U-A#WeY!iJy-!*r++Xy+`3k=hzVN@G%B(d{4Xq{RF--zehjuJIP=2zW8@N-rj+~TibqI#+BxMf4lVd_ zOK+nYgNA%xha#)!acM0>8RMBt;vT$2A+rB#5-Xs#TYb4?TkxLZ?b9}5RfA`EAH8!e zeGp)p<-`Du8Pv6A22}9SyANrebCA|E(OgCD$lD)Y_bFBP{c`VJwLWS$>%A2vG!7Uq z$T|04mq+x4E~b52Oe~ZS6fo$qfwL|aFZ;d79RTHww9)>2A<4sC+*0V^2If9;$(vOW zk!S!0VS6mv;t(FKPi{on_J#Mq1M)!>^}(Otivai$a4zcP%K zY2UU=%&4{deV>~yMciFg*WV79(h%AoJ=^aktMFA38~h4NFb-9>2#M&oGP^w4drfmQ z+dSEOx6@7cqQ*q7(lnt{X^KA<3% z)(|6Uoq_ri9nBznXa`b(<0lq4JEQ;4aP*6x+bb|)N@_KHmd0$LgJ%MmHZd^AgtBar z&vO&V)#DOFe*i!X1&3_dJ|XJ^X*#7}%lju_cfC-W7dI*sMHrgfaRPL^`zz$Y&)Cw` z%BjRL)6p%T_0UUP_jbk{%9tvs;T{0WP_7kevq|qKD$@Vt2ENd=Xe~{Nb~Ym;Yf!ZG z+B1fqbk%j5w%OJ<%q_r$UDYuUWx8UVDL^9R|kXtgSv8#?# zY|%Gbkh(HOtBf8KwF6o0j2|D-HHq1ZHGh0&aj)sDH8m!cJsGY#bB;c{b(pdWVNtzz zNjOM9SZJolkeiYfAE4M;DGGok)8U2#SCbHT=KiU@W0Uh^Q;aon&9Y2Zwv8{$i_+4+ zP=bZpCyaGPt@{W*|98w_UoeIC(WDSwe6nRs^|1{n?f!dSs?~u_6>jzRH1NOx_sd zN(V9AWaj0jPnP+(=fM6-%FIOyVKxuxyKRKhO*5EuS9g`}yRE5(P;6VCx_X5b@_4MO zCLUk^d8zjVglSxSxSbaQMflIe4zjs%#_ictb@IbAyC`H_RG*poZbmFlyln;4IoV)? z)XnYOi`>{x+a2B9rY1%1@%2??_7U=K4C zUx@EP{YN+)gcaBTSfmq|Xw)Zfm>H3@ohVwa6fKv6v}=W%^`fnYQMSWq+mW>SdO#*F zCTDkHuYiK$-+!0R{Z;;4GiMktz&Py%0LoQeB7dX~vPpSc{Kkr7I)&$OkS*8iKk8z`SUs#zXMfK`^&zJRxZ0R4PJKXlvP6f zr^%wN-Hn1qqxkJT6py$ShXr{2uh<>rZmnv3tXt^5)7~Hy5Rw9UNU(#S56yc7Th70d z#Zp6tL1o~mgCIM69>ZxI*|fgqw5a+Nu)*G z0x|GQ36vEz0u7l#hD;&Dr;riT$%q-G{e5@QJh^ELFlyuVH-pfXCwgxq`<5pQ#;hQN z)Cp;2ChGv-UX~>tKtND%!)HP^N(uE~`Aq?le=)s3@=$UlZylxiZM^PvKWEEEm1Kc> zrI{u^5np`${4r0VPGRNnLW9%Qet3b%X<~4QAj2Y7&BMCUV&ZAArC92hR<$R9q8S%himuZ16JsYgYIpMk|IK@yY=T(wXd|?)7wrbD zq{N3Qa4P$=eEaGdY5AaGosdWFF+4w%DkY+a+svMe`X-9nYHWsayUS%e;xIF0wt3!g=Km;=KSJc}rak))Ee(_pCD^zsbJVKYO0hMhu!Y4oR|R`-6W-Lml-f9g$eNh#y58_5kaa0)aID1`_EWqOzbN?vAQ-<#YH!@ z?B$9WzUQPj=Ml)Zz%^p)2>}ShXxjvy@l3J51uF(G|ES`B5Bt|Td2xB%Oo8`Vo#9!L zOvFX0{t;0R{q`DrC6hU}wJB%=1mlBq?CzELm_{@m=1)`+*{H8%%jX)rcPRwSb^W6M z&_-h~->T^tvE-3we<5OkRYn%UExpxWOI}@6zvsuO(f2en^V6WoG<=^~)$ z3KR`rCNdq1j==@9{pMdg>4SLYZA-u_{`A4EYy>z!|6AStBl1$mO+n#plfpct0R=lY z|LCup*|#MCJA3lu9Lkdgp%({d1#NFH#+Rxse|B`Kc`AnuSOJmBAYFJI5^Of>^*MxG zK+f}zCB99~UJgNt)waK;`-kir`wB{+ZPT&XUqvIyLoY!7l+a(7`|PoJ!Tno22#TL# z;|+5%nR|u#mn8zcU_hoeP^`^d;FNrg<_8&c(CN@?<}xok|25d3Ko2_4d~2v8`Tit$ zixLOaQB0Bu)Jbp)IA7fVkI}L)v$tP3#V!9BP;IB0Sp(`ITjc4kz<1uIAvE<9(&h`! z$A<-iDvfttgq#yc`cH|uqp%d%EW&6)3Nvn`L_Sh;4`qHjJf%(hw!KRq_iFo;-0Riw zExgvQ;#+vHUc@!^SUrwz=&=E1hsCO{3QN^_?Z*f);ALAv3Hppc`(uALM~oI%k{^jG zE4@~&9o)vLX+1*^wOC1{vK1%A~E4OV#IOG5xQtVuj#6d&p{`-K>ip%4!`-4?C zp%Ijn*OoEP-UtC5aRpU3`ooMB;%Mwt_3q(CTzksQK}_X?68}x?|5n}sl#-_xErS96 z1MU}vus6tokbp--%pMYd-`DL3m;w+(SNIA3`UHwuClQ9fjc9(`w=4~=hTx7skU5ym zIqS`!regYw%Bv8mTyW=;{DT}X&;#RZN_QgYQylorGnaW)+(DviDDU8&`O zFQDEzG-LiZIq&9D=#BzH#!eq&`MdPo)Sz3V@M8Oqpw7cZOGIVSIPjIg8|Cy8s^na& zG-N@9dFVmwdgXNGMG%i@dHy9vLAml)#&Y>lDuMXW-I|vZbkdXms{nydkfZ?wj;t#PN>E{|9UUPbH{je_ zz`jOMN$j8wY__c0$FcmoWBXsm;cqO{gM`trW0{qfef$gkvT5lE-*Y5s^11pLL;SGd zXZC1=FzjK^9JXl>m{FU8t+q6F@~qPQ(asM|6r?2VV_|~U^b7xjfWR})|EDp_jm_n5 z1W0aeH}=z}{^vyJKdcR6LOo$nj3WQ1*#2_jUFagS{gE2~#{LfsW8o+st-m1te|-Ai zn-XPWTIz=HKoddh{hn*X?bOzxtf4%knDviIyr7#?bjO02{zq8bylodXMX zPaN+_Z)rkh{uki6ooosvH{PsR((J(ouPz&)fN==YnSDDAf|1Ld1t?QzGfA?vrXZFC zD77GV)tnXVb~jNywr(85{cj6A0#ZUAz^f44^gd&AO{p2>!1o@{%CIa?7|Le zB(?J|<6WSBL*0a;3l_-yzqY2E_nDb$0QGO0{`*0V7kS}7JN;huzsf{=s*h%kb|9_I zaPhT^cC;gPR(lW&p4JXtkk%F{ z!JEq+l|7?QEJA9q#y+)KhB`~t#+uzRRDu52+WsQ7U2jt7z*INRt-tQ*k#D0NeC<)XA7z=myk8>o}VbkVzdtS09B!4XG;|M5I?u z4h;%AYL36wITFw12uC!h7RV(UKI6M0QP+iL63&I?XQhX_tz&1DR$VWUA%|hhUk{I5 zLnR2*%F?p}=u9k%r`2S7Gwobs;*>cah;V_A40QGFwiJt;7!5%JG=P&IS?Rx*ko6~B ztUy9Sx(KXFRnEItcl&#aysrS}wOjjseKg7-<4kGn26Ig>x&J~@vooKVBk;{@8b5$k zBFn$D(%l29R$XUgstUx%UC6=_Ozm)wEYN6ci12r#7b=|N7$E$>1hzcf#PZGEplLK8 z+NV64lJ7y98et1r1%cA*?rjqOuEQ8-i2?Q~4v^9TVieZ_tYiCCsm~eL;f{jQNk&{n z>z|q}8=u6fi1>g*`A+z2+=(M!YpFuKddS@463xMgQ97>}5ACx^+0~Lk>*?NxoGq{G_Jq-i!rCJd z7-}`K2B?%_-H>wBU(coASNIY55T*5TIJSq|tTkX&z@!3UJfi{6StL^7{w8BmJ>v%CQ^1nTuwXD|0v>EsMooI|*R|ZorZ&c~;Rt zFfLrZZdpSx1LKHTR<%6k*@VvCZN?`;o@9C9m=)IxAy*Cbc}JMN5D&YL82m7 zFjX|Z9jBwC_hhsBO&M;p&hRP|9>$B4A02efL@M3~#O;n_s`$`WbCK85Pp;q8QAzs( zuT(b7ZF62WciZlveg&3=DU6r0o!FUBoUO8?GUhIj1fz6WFX(2@RX}@7%fQ}}{Dqz3 zmL1#|Y-YePkAq)X8?1miml-mE1H1|fCoSaJEH0-Z=7<8e#a(4mN67QBx;6wc=m#vW z7;xL4Pg>qSD&Vp4wK~KkBSSve8QuqYp*ALU+1P;4t}YXB%gUqO)HpyH!FCYWrqgR$ zoW8VxL|rtp#=Fta=@x(~O@Xb^`jy|qUs-ME_ad#-AkY3iF7~cf&ErC^>w%vu!oN$Wu0PpPZbo+=ljwW;e;ay>5 zj?no1K}{|BBu$?Zp&zH83n^)*Ov)_rw4NgnTBnr~#lF?L@a}f^jcq*O64r_l$ildE z$QYyAGt}P<#x#YS)uyvo7v zVclZ8vUW|(WK^|!ZydI#w`D*Bg^X%J;aB%Pt6jJ+Yx1kZ`8auCEZQNHxM9o{!5bz2L(gC+uLqftxY&;()vNKrY>lIl1@oUlDygu;6 zA7nnPpM0-{lYr{d(T$cyydpw{=kt2sk4-?!ZXPoF60>6HhOnYp$gWt4)9tk;<- zQPP_gF0fUmHA;FCg(l6(oZrVwSb2a@Gx?#2bDGM^npUh+pF=7lbat%9g7T6NZc&lU z_w8b83EaLIswoD`H^9a^<2y=(IEJ7bwo^}q0Dje#q$GDPePwd#;_%#(7y*#}!{f#j zX)O(KoPJV1YdPdB`XZz8LU9&-slgz)tM_1qE65CT7?0AN|1$uqhOBb)-8kQrF zsD_6nMX98gh!H?R7tIU~Kl*(gg8_d7@&*6^nF};9%b1iC;R(qW?lX8PgE3qccE>T| z_-yM@DyH{@r-y^M47C4zwCwMty=TIq2`J^K8;3DSe`TyPIdnafB>+f7B>~x%5sh=) z^a2lDhb6;W@pZ|n3dp1{3J_1z9alq!ANj6~&MKrJb_UJo41~XTU*H;>`r63L(J@8C zje3;$NXvVs&BETR14}D>IOh{#H-L7pljp{&fVLp(Pd zfL7Z#)oTh*b=r`vHhM4(Ody+ae|OFIZiAbyp<3k8voEC-&Pw{T{jyT;S@yrXr&mYS zW^NaBto$7MZHu|Vg-yAG9-Y_f2LQm` zn>2Dphcz8W{hP9tQ)eC(r&^l6(Tmh>(HS^Xj2K^TjGxF`Bw9570WGX5^Drbxp=YEy z@dY9WYJ%QsLWd_!LWn>y!~!fetPw(tQuEPRrJFEJl8`u{IZ44+%)P)XR)9**Y;&;IHvtD z7GIzJv`uA(0e0N4(lh^=Qi@yb*vz}Z^18K`CudjT52}dfu^*izxv}~@lZ|TMh;cx^ zQd<2hS~VUMbfc~8jsrTVm%SrdFvoF?D{AIC1R6kToVJ;E#@=n(4(2VG>0$)U?i+`7 z6@-Dg%|g2ub~2Ti3QIPqV=7SE@XxRYje8_0p?W{%fiC<#GL5-$(#|HvN$YbKPKUa#1$m(Gi<3BD|(A&u34yjll~NIM#p zt=w8QxPqWAGK)Z~?FFlPeH0p$f(s{`UNJDqOFOhwl_l3A(~?t}~D_id5;UKoK{K(@Nzml7SHu(gl@Zc5j5tw=3jp!k*o1EFd6hVL_7NH1!6_ zDGdjs_L5i$u#U6udNV-+QX3D8oCsyFDX9*gPT%T*ORporJU%^KGr8t~wgR&?7pciG zmDu{F+(Yji7Pa6qcNEkdN1fa7{fN}Q;Hc1UYG}95!t$6C7NGbHzmV=)w`&M77Nq5| z@%#Ds(SSCISEST(GZDLrPPtW;#)!+8gI8ExVtCGmIEgU@kIdE7Hw5M6;)2^2&eT?6g$f^pN5mh_a`%-2_04=oYMW&jf6Ti8kR8X zO1{Cw$4>o8aoF=Rl^lSqV-z=cfHRo`(C0?DC~U89D0A^r=F&)FY=XMJ#6IAo(=XxW zp274AZ~7}4^VWjUx#np$wh{mgH8wt!_Z%$ni{5Sf1sq$Y5SPs@_&)JTM2Ze9u?sYV zX-($C{B^`$jovx9hB;bN9A$eox zQ&QupP4}6oayH%RHs3WX+v6_FDcysj3=vVgH%gGW`|Y{21^F_e5uZ3FL)n-gMr*<1I3sj=E-gO0wAPf z3%XEePFV;{?gzkm`TQ^oo_om1u9aq^3}s`@L>`mt9<9-a+qAV|6`(JBikimB*rwlV zL_U1*M6_Iu(f#kLYgCryv^ppJ(mBd%w~Rda-jDhhWCGD~sSMwOv3_G()%3UJ*l^Bj z*evq)jWNHF_Z<&&r;zWK4nMCmg2w5y8>6j3%x}Z zv34|FOUT4Z#~AT>-UgBp#z)lk0njl~QmgUCXaMTch9g{@iDSLkG_e^%`8>NphGpLc zyLnaUQk#6Y_RXu@-$LC1FixetmJaHF;t7{JEv&7}t0$sknP-%`vf1)hqY#x9Te^v; zqQuCZMiwTNZzHP6Hlbw3$T=4R{QCp9#S#u+!tIEwn`7me5eLyt{sIKql5*8x?>bg! z$l6d=r6fa*#LcF-pd!gdM-bzO062HuYa?d;aZN)IKR3F&cf^QF`mY@a=}51Dv34ColvCH;0;pNAp$v!Kp+ zf;!BI`TfY8uwV1wqy4%$MT3X8bEZEPIDe_B0KWys8h|emrE7@!o z*8fR3ovNISd~+3`&PX{u?A7mc%due}tUQpdc^kc~sJ4D1DoO`Q70nv7zs=~r8_(6!oF1J6_nVQ*r{wlx`rYISKHaH|5cl>3 za-q6|oA4n%aYx;_^Q;UT$j;4NhH@44v6XW!i7o-$Y~Q1nI9yk}>Uh&h1^U)BM~+=y z)x&GoHw~ICS)?XF z*VR(I`zDMU(DIz?+=-lHB~^k^iL?g0yL6#!O>oy6Nc)Q8G8NCwI8MCS_>w$Mxju5Nd`-~?NeQqLv` z-Vc#C02Ho97l=8T>(5|V-V5BQo#Q4=Poe!n;+I`O=a*THQ8NgmxOO$jYRfF9=-CCL zl+esy@GJLv7s)i(js#*0RnuXmdw~NdHCsO$k|itn7o;Lj%G+V}+R-?YfHX>I_{1W9 z9bXOhXJH70fkwK5cC!-MdMD#>aH*B>H(EPj{_^YO|BMcY<-AQU{IsN{!4BjKH~iY?%F9y3oG(pl^sc06i;sT4U}^A91!ALrf|i-Z`ZHm!RT z!Xdz7Hn#DH{e`jtMjs1YxB=3uj_|eN*#mT^b3KOB4=abHXj_2PBt(wYkb=GL1Kj6M zbAz|TIpRk-BJ^wXJ_BMP)En?{8h_5kn08U*LMe9WhJyCfE;bmg;C8V-l)?VudQ$H3 zSmcdsq$+={n&rt$K_a}CzGi1vB@~K=<*OvXtU6*r^>ykE9*{}WrB7pg;ri@p9PNS& zU!4f-E}M1QXhh3_mcuPBs)@baa%vq+BZ@Ue!+~#o1wO9A_N|KTRe>&?MsaV`N1o22G?yGKXN&)?z44KvQkgiHE0~3Z zzI_@2y<&&MaTPm{W}ga|het@8pPpd+rI1N%;;hTzzLDr`g_6$AnSBs7a4T>=q=5A2 z)ys==Bga@%S>u+aRXBL&xIcvtX#wDzI~f?r=p|71ZULWa#`cP4-FTALgYZsG`cI`R(O;NlPPJMDp=uDYvr^F)? zEec%)g37aA3pQCKx3HCO3smQ|#p6UP>;a3k9>WNA2NaHVdn1IS0+^3PuSIndN(_da zOjz0)7}29zI}e`QY`@erAkq<_VarJG7k@+5^mpN+R~sub$tJvv$adm)4(iYMJ6c|k zGi#pdFfL-7A%r12 zobdBsk|5LdUn80f>@z2}p%*-@2|)CObM6hbv>2faVS88t(twC*BYqT;#;_B{zo<@D zD=@TY@zHGMFUcr-mBYHbccIW9TO3v(ElewN%Y&d6X$8jW*R8xlZjWn3-RGVB;N5GB zUTWAXt2STBI(CT0Q|(z60J9?)GzJnrd26k!QB%=RS#+nw7_3%`5qEna1j$s~_7rv+0I~B5 zhm2+#oYeEWs6+&sL0ldm0E-{kYCZm5PRImZAaqCr=UzB!`$VCyI-vB+vrH>tYN2o0 zD^+kBzewoj(Ef@w^(kbW??}iIZ%a$pRqR}=>=>!+Za zgav;7S-As#m7t{z$6;m+2-2X zD+*YfU_Q>sQNapazXwH)=uHFfU_krO?cgznebW&hyqHIW-6x1SKuVAoZZq+fT-pLK zgvDEhq5a(oJUYSldfz;i9h1&o9uL8gQ2CxjjXYlC+x>_9LPS#DNc_XLh7xzsP>Q)F zI*9yeNIcKZv(Jz6B5n6mOptOJWXGp4PhR`Ul!riZ%#fJDa+veH@b~id*E1zica|>} z@HRH`?3p4hGI>fH*mT;>G@+Nf0CINxT#<68AS)_wN%;O)alPZG68HFp=lPOs1ykx4(*f2F zi4UG1Vsy{NYbIIRSy_*t%*kM%ZajXp4J*be{K}yUu{yx$U#x(8x7~uK@-lAyqXy{o7u|V%h*U-S}60d&n`(X4E0Fv zziDhWhV=FFedyu(a}*3$4@8SH<3iL{)x}{8dG)|>&YL%XbcWW{6RotsX+N3R26xG= ztn>3v+JZSDjdE^s0s~oi5PP(+!23%Vta&@~5#-xzI?)I|0b)BbjCl|wp5U>Z%Xmu2 zlUSO%ycaJ0E?a|Rj9=8@FEBCMp&r15(wp1Pfqtg)nkImQONL&&C2Duu0Z02Lh^CYm zw+c=_dNa(fx32th7U_S#9f-s0|I@V^jm_;E&f$h2rF#KBj((i`npsnSfu*-BR1jal zGWEsU)ML`8TYiAfRNv^YCWR>c(FUF#Hg}LJ7;dKLj!x#PjJD{owr^TZbPJd*Ztsw$D2`G<)_|-SVxskgj@I9U$-!&Yu(Yh?6cr9*Pz^4Zt$P<*ImFQjQ_~uUoI+>$Tu#U%Y#wnm?xCt_8N{~_sgL54Pk9V&|zR1h*OnYzzP*{)3BAWWRS)T1hCWLefe7v zV~vlRQ!VCoZ%)L(Y9AsGrVtC)BY_C3u9eP>A}xS`m0c=M9ieq)(I?}SCH3wAd!Jtp z8M@b$Lm&k{E2Nf3bP;?kwG0AZ26_>zov|D0G4AVc#|N+u@2~f)gAvM{T)6t zoglID62~TS1JgoJaQgv(HHah7_x7Ocs=)gmd6aE4|9224Kw(S-nNM;WQDcG;C*}9n zqd18mdXg0EX2X@3B}p}Wg8p&1k%IsP6{}$d9?x_zbNCHg0bTfD{Y|9IO&wA$+Xk?= zRmfsW$YKYTg~BxLQem_fEg4CMN?%}tNcgQ0CFWY$PBG633OQkbQu0;RWVTqSo^U(Hqs32A6{FO7!6(bSlxt$a7NBqM4|=dID>QQRxD@wP#RcRb z@BKyyBS_!Q{cT0qXY8MYgp)Yy7FHDf=^d9TPJ5KpDWu@M>s}Wedu9*TY`q9S!ex5w zYWLlC8a9Kr!@w}D@ajIH@fY2wS5pp_t`fcRuu)J*quFEu4BMYkqrrAKvGcqmxzQsF zZhj;+sYITSufhbizN0&>!q{8Y*X`&d;^D!>Mg~*>f?RJcnfeJ+^sW(FFQM!wwWaRR z3q}HGjA9(6r^&$jIsk_$ zbnO==$HHPuyTD8*tMojj&)%weP`tu=Xm9M`&?jqp-yLvM*HMxYvV@%YdfMQN@#!_1 zai`gywud4M>+oeEFm?F`K9-9aJ322Qe}*iT+)_91LtHS6?^Ub^Xp%X2C#~kznI$pV zvzu?1lMrNdRtb{4#(OGc5kakRKb~LYl6!z-POtW)U0DXx57A!FpR4;hO!#J2#51WslG%jY8OTk@zIZ)a+{0EAC89y%QNe!!s^Y-dRXjqARul zH7+fpJFy)USQy_2Lu~;ClDqwMG?1s{c7atn&=ZlRToCY}&Bk-)K(zJl1+`;@Qa2xp zmhESubED*w%#Rz*0{ZA2mL#>1aqvM(s6D3T`x}hgaq$W-Y=>t=ByHEl$;_Ih8@hNG z(!7u|?b{1X2r|$mYtYYz?(#g9A&uQruLq!K+0ESH8FvYYo1ahcWx8!&2ie3hpwH3q zM!%vs4unRBcEP*QpjfkpluFQMc^;`i~K6~MI)c6Al25Ez9;|)*>%@g)w z>&Z7|M_GVj^h~N7j9cI@bu1|423jG6Qr#fQRtLSXkS}8QVR2C4MJAxgxtUrsGTCuE zvt)!&?PHW6C~K%{gnmq9j-0KWX<>+@A+avMC7|HgLVjm)=Byv}YuuhXjikcm3#5=? zU+{gO{1NmyQCvLHu!Ezz-9EGk$@`ipYlq42l6H3;m4jX`EaB59|LC!`07DGPF^`vF3+xSIHQLqu>HlwzugR3G4LxNtgvUeR0GwIwQ_Y#*|FKTqnU(B&Ab z8X|m>J1y4^@M1kwaqrdS8FjA|Q~>&q-<^7^Rv9iR3)9le)XJb#kmp!9UoI#GOffVf&?YyY^^eaN-WlX}i-Iq^`#5MZ=&cS8m#y+kYM(&<7Kgjh#7;42SYp zYGmY2H4~4jV$yt3FBs)NZipy@baw_DEf}%kw+EI|7#gHYcqKX#?lP7w?c>xPckSC{ z34tLOm!G7ci#1*0(njaz%_X_*Bt*>_jKD1fF# zXeL*vL2E*-jMWeNBjkc@S{W(`$zUwjq}?rgUn^DEtUwyVeZVJ+~rF)qKUw$DXDy=@Et5fT{`$TUi8SmF0X5_C)9?FkJP{RL<+b zwmvfkAvsqh1`^Z!^@r4{&8pJn+FM0rzyXTHLW%~m;X~OFnbdNtC#xfCP2r*gIx#L% zR|YE#89S*FG{yU+#HOBDk>30?y-eL$hg=rNC`#y`o2BcI6K`;_P@kteuWRAS~+E4jH)({)|N&TLsC7N(S1UwD{1 z9I<$RelADGhwSpPy`Il`0XHiZpssnZow!Z~YOZU!lL*Y%%8aoLg8bQC^=mJXCb7L1 z=Bjba{Yn1E>eZvCe=W%!pCm*(4aU8jUPl8Nzf~$0H=!CBdOeB^*dq z-%+CMXa$>Cl21!4GawEcJ_AHd79l-w&y0v4$F@A9Su6yOja&Y1*F^lTR&?9#R0ceE z3^&tevcuSh^gtmz(V={xq8w4QQ7vIX0_yR1m?`|{)UoVn&*%dZQ_HKyCb*4BFlN39 zv<@ilnm0tgQABwnYN|$@(l_@PJ{XEe&2bu$`8y1x_zZm3+pnjY#D@hm(L&qJx0Xrq6QI~Y*-1j(>%Ekh*33=Y6P-{b#B6nF_%p=3H6!6k z%sCD_!X{CMwk{opDxJ>^fi1zdAV0v5<$?*OoGVu*IrgKmhl9j}y2j+iR(vt+t_)Fm zIw5br#jz-)(g-rrA-yxWje2|6vt6DlKMiZf!Z@E5AgbHp7BK5(5Zt$7U-5$Nd!&DkU_AUtod^VkY;k4E>`7bn>MbGH zh?-mCo~Orfma|De)v!9p))#(kP;k1vA0ER>v~5~(2dHZe2Hf!xxf3?lkGTV>d{^Dr z3OM)2yW;if=Aw&<1wYaN=?b-sL$_?lyDo?7#NR;2vRWt6N;U3N$3CgZ`*$AuRMP%rDI=a6W%Br8`dopb2r2gJbH6 zHppD9zD$3*eQO{8CQ2upQ{If3ObArY3aohQg6bg7+tNyOyL$GU=#&jJ>dL1APNm!ji3R!Sxcw{bee z2baF~35gHq$niAEgB6iFfep}JzR2)eDgFnHx6CT`5mhH#E(%XyAs5PxVXDL8&%HLr9 ztH*}ACivKQCi2uYwn{b7DRi!ga;`HjGzJX!a%9Bm9%`bGAti0Cw*bqJN{QK@xyI=i#%aL`=$408Jj_2%u*{lecrOIPjW zy(~F2`awlD3wG9gBb^*h$ZJ>e-bQ z0EmR($KzZalg?4ardL{1iE5%PwPIvh^Om;XNWzY&#ZZALdarn{b|hS>@(#5avj#{{O=Q+wtcDmerLn#`pR$(ORv3`Qk3v}KzQCg3uxkZjM7ted` zFNAP(>kbv|5WUt%&nx*c?)B4cy<=ClBxC?H?pW5{;M-Dsu10i>@6^bRoROhA)p%_P zL>I8Q52Z+{(VCs&18UoWa~CvsANd8pPCWycSl*$Rn`Z6hgLuL3`Cq8IOZ=e+a2!f? z`tPYAnw8IBW#Cv0vn-qyQ`gs}k5zfRqg~hG->>tVh4e6AjhT*=M_Z*rVZVQbGvW)& zbJ@l--Y=_O+y`#fHZRnzO+weQ`(n`N*d+8|TIG-nC=uJhqN;m|{%UxLH6k?5a zw~y@lHiD;E2eDU5Ka6lTob>mzZ1 zFWEmI*sA91hHfL3y0Nti6|i-ZpE14jSHt?yHT>k)iR*xY!Fg=Wq6VaRP)2D|ZL{DP ze(9-ctFoSgPAKpc1oUi!y%EC=DV3x#2slg$c}y52>@SD4RO%wfS4Cq4Ls}oGNY;G> zi8r^m^`Fa>A78W>Z>rnTxX)>hQdSPpt_~u$vU6%Lo2=F8J#r?shH(>|%7B~&+>x+W z6KRFklKiG9+2%JX1aeQWtnKc74N4OU`)OOVb44L>so#Ok&RIseVSX3dytd6tNR2&o zfE>8@O6I}F(EpT^6DApuB# zM}frN4E(&{-zCxX`~^=T8tiYKVDzpDW+~R;`*szC%KlB;2Bgo`h3u^r6rM*6vFsL? zrr{BT8r|v@+-y&%l@3KSXAwGv^zSPT;7x1kPVpf*A`=Rm~1K*9@;m2PK zR{y~aca~V$t>GCz6?rosgby;S_*%-*{>Qvi9%1q*a~)|yZsq1}#!Imct|>7;*(1Xc zvs1gpFf6$|#}k)@Of@jje(CsS;@}W^ixbXPW7mvMEEJcaq<-l!*7jE_r;_Az?h_9q)jD|b4-?ebfZ5_&XYS{19vf}@nVXGN z$rG0j;kRjb*T-tdfz?&&oXSnr7D4e2{v+Aqyg-a1%L~!uSohB`L&4o|Im0?LXbk+? zh!*&pd*wj@m()A%f_wut0hEbTnb-k#;=i?eYqmI|bB1IHy0@!sZ80c*uIv=)q3o?Y zGxc`AcxqgIDA60quPZ%6?3$KQ=rn>%gLNEKS4nlGHgB?=LiAJZ&*JFt?K5&a;GQy* z+0OX{O%+B;`&oKCcIHt&%hD zSJY{Ez27(UE!mRyiE3@3?d=^l%0N1qPK*Hc%P;HjQRKz|fFlL}!TPwdm3-(y#RH+= z8D8bT$$_hTXLg*T0kDs0N$ml(oS#L|_bbv{M5Cc+q7}8W6R7&QJSpaRBq>8^@=2|2 zJeQJwc|5KaKmYOm&c7LI7;~NTI}^a#B}M!{Mm=g+3wVwE(_AFAQPX68Xt&Z#2TOw& z--VxF5)5{#RJT$T(-q!IFES4gw@qzP8PF9_D?Crt@FepQ4ClZv%?IfHQ?WMUKGXYp zHjfjZcb-Dky`1YUYSVq_2rUk=F4qZ*ZmQ_KrGAUjD`~fi`gDw=ZxMdH*N?MVkm^cR zMsd^MLx=d*ue+y+#pEI%nX)y3tNBbdXa8uH=oZz$f!&X6m%{r`^KU?j2R{Si2QDh!2@reum9K@+Hy!bf@#;%C3-@OdI7YT~WJuka=3SB0$d!p*T8gcrT;nxsIcY2?eBvf)j7wC%w>|U%)@2a0&gF?CrLUS&T0ie|`X#vKSt#w9_n8q~i0P3wT{+)&ngeFEuWmYRiz?2Tha zsNu)zd-D*&cY%pl^ZWPx>+R1dEm68qb`+w4>mxu@T+IeqsBebTE+^DF(;7tful--0 z#P{L~yqmL5kWNfSn467CB4;#{l9u8}To?Ym6B?sO*2rK_QR*=J60!r613h|xj|#OH2aUi;WXr2d)OqKLNd+EF!S35B>J1bw zISre<_(eW;_)#BOBJk6GL~XB8l_%Rr0j1gD&(9jF-^S=Z`_i!m^B>;?uOrDqxTE{l zlN#`%$$-08&w6!|rgk~ofpK>Sx$^c8N+wSsZS6f5sYfT>e9-u%rr6wzhb@Vf6GsY@ zuzQbrv#lBneho0|c>+bBL?rws=;L*@dR!9A%7>+m_W63Q4M)@b`_=nC7Qe~OVQAc* z*#~P`tpfP6HW6`!0`zNfK8wVE`&M@*bwX7ZhqaQ`D;EFYVvGGA*onz4-<4=yH4fUf z`x<_VgX}CuSB`_V8tCAa-&U4-r?u`^^F@VC-dj?vf+uq+_)Kb(mmdOL#=xP``ZyS}8uE<^xuAn|EuHJ&db&mS=Qb_p)dj_}NIbvVQkx6hL9XZp z51XjAOi_20_p+Db+%G!t>3tM}EJmeW2a$)wvKqw^Z=(Y!uc12}VUQ;pojgCfCJ6|PqAA^ zE^{t=5T$v*@FN1bLUFeD2f`hSHh~O+N`NQLoWoS?DRL2q zsfQ}Tk8r&l9GDLFoj48s{aY{QtGX@HpF#w$Vm`*}&S~e6D}0$7`bH0Z-*}QmV9y0= z%8m=;=Dm-NQkKU_|MYmMtxTg3+ul_pf>sBLnPvm?^A*xtv$Yo$;`;(Qq-^@|J&<+Q zPF^|{K_7(heFG4%!GHM*--6c#QCDbTi#gRQy*bQjqF;79L9vtyySeF&MFb(B^G@vP zzZTN^{8b)j$((khL{!A$(BfFBDGamySWqaP1lb!GN{8S^52+6mnl49e=?uz-@LXwM`|e)Rd^h0{+1s`6VKmzA z^<_}}Lz6togeIjKTmN?M6Eesl9&!BR=ttfo3`)Hw!(}mFXv@vKGB(?DY82`=2rJT! zjG2IID~i$3qSHY8i9I~?aK4}M;fDZkptp0PR%C*!Tj_r#24!O$rBGH@8|Qb4Q7dSKABjJ`)k7f7a`!1G2A&EFm4O57c z-{Io>`A2#>HvCy5$;fSv-cl{6BH?CL!D-c6w!fznsDDK+khGhDfZqG&^rKdEVibh$=8W{<0(hg>R(wRwhrV7oX9qm}5hHeLFGx92x# zEEBeN3^^SDZoQ7e-1y;+0ZlAKFywEq#>X!5osyH{Bx^_I&?L9O{DvmgN4Pz_ojHkY zVQ+-&UV`koghZL3Gh=@Z!jz6rccYH_R{wEEp!t&iXls(#pc`F`;7XQ0bLn$$p}UO? z<%2jD{yj7#Q&N2)hL7&AP%59i(%Hb^5 zDe}-cd2JMie;7%Gzva7AkQuB?F6~?Hb^tNeFzRi%Hcq8-i-q%vlbc=o)zck5|zZ_#$L$>w5 zz8Q?YymINwaUHxiP-tW|kWS}=MN-8SSyn1{t1E4x(1ZX{JM}$q@`}kdU5pJE_6$0d z$Ai50|8;s6jXLbO~y|Vf>XUiKec2t5MMB61ogQz ze0TY>R=2lou~rSD>+yuwbeWVdW%U3nx7q(AqZONJX*Mb1+o^H09aB<}9~bKu@?>%Ioi441Op#kYW8S-m8aDXz7{ z;BCpry7OxIi)|D{%*PEi6gY3b^7l(bC-3m;2*Yhv=vnll`?tB4K#QGf)4b#FOuH&N ze#zS{!fO4VIiB)K9bLZvh&t;Fl7Vj-&E>N+)7XXyT;z}FtzU}GV!`+v5`0nGMiHEj9GM#>$r*b4W<$2S`B~nNO0!+W;L8^}g zzz-7B#BG2Xz%Xg!?t%Q8U)r>vkSnc55S^0;5J1*MbjeTvECt)oThIUjmk@uRY-*0u z80V()0Acixxk!nNhlUTvnGNy_gjvZQPVD;l!HiZ+EAJ@1HMIq*2XvR8VjSdf`s=J? zOqE;IhlOJ+6SZE;DDdcEX7rvj{AJl^L2c8T6C}6Gpnu9!=ev*cb~;oQ(&1`AR^l}e zI{WAYt2J)Hv&Sc7W?= zqaCT%9oEVObgkY`Es0@OtV~7h5fLDda%bC*rhv$Qz7$6V4sV@Q(UISzs*QRgR@wVoJhDgKbhi4?Riyle zIs}VpFA`2Bdp7fOf34DkpAeb7BD#!J2jC*B8&`e0eNr zt7jjNEHC<775MKP-E?Btrl1S-D_`g@Hhd38{_eLM8I6a~MEw^`y5c9NcZ(PJK;d5$ zE2VE|Ybg<$#k5FYh7_4qqmlXKmrb+gc7}j;0uVj}9gE@_lQ$^*(yhpj1Zo6hnK1sI z{Q7-bu3rm(u7l8U#jL`i9A89npHOr#k4hhEzzA`H$j#XPa^!mtm%EC}>iA`U^2$tD zhrvvbMYNxklMW?BvyrYfcs624`};|RsLhluXhN^*3G04 zBT5|R(+AOGVBFg~oCG)q1WLSONkRl6zI)1U#IiljTr3H8RLV!j3P#{J6)X}aLHfkm zg&aPu%Sk!$cueremLM5l`AY%=iqkiiM;vKzqBNJPsEVY|U=xFhf*lJI$wYv!nmo(* zPi3Tk@u6xrW+g#n8}>}Le>ZLNZbTbo={%hvZ!wdjz{k`+Y4v&Y7xKT}Q=k1AW+>R< z2w7&%^?FL+8@ld0cz+0~wUePH`V8^(7fIs~qqYqqmyY^$vk=>{*72QnFK56uuxf%3Ni^N}0p*CqMws(+>4BpRd>=z94>? zWV2?v1HX8Mmp#7TGNzf8>cT&vUq2=Fq-wyNb!6n_1AzCDjh4V;ibOYS5DwPL_j-jh zzdt9^Sj2!SL&_2_*%D4641d*vJdEvlQvXnOmyBgS*{CuQ>s=ILDS&i>tF&#CYv8j3 zGx8u;njUSzb=msGh=&*|0FXicQJ~oze^$ru91W`~GC`BP&9*WfJIFaHlM?L5SNW;N zIcb1smM>~AUE_i1`ELIS$j@6SptdeKIh}|Uo>NfCZzIGBkJH)GyGt5^S>%0ro1OqTc z`mehmE@03(IW~h4CS52zmpKpW$zgj=FKZCBnIs2;`W9dGS5QJYwwv`zF|{f5u&;=wVS3kureurbTcV+nG8YVwt7?zq!Z_lhCp^zq*m&CVdE^=4x#?`E& zPi2n?H-d8*jy1sb*f9Ftg}ndxL$D=Ic*Yn?-z^G}UZ1~K@`E$Wnr-swDkMgx)aXO2 z&@r^GlI{J`nM2~TfAxmaw5$Ww+j~hytDkTOy8LuX6m{sRNMnSYrz#^8X-cGxPtFdN+hl6@t*+WO*blkev zJ+ie72Yb3i*CQ)Ke5uj!S~S97fU)cT2|+h+82I|wpbx#mJnFu)83T7e7WWtj;Ba(? zC&BEX9;jh;A`>_lwwNz+EpN$KY6Fw#U8!q&MJd)fA;Tf#|ujGER!|Eu;zNV1ZdMt7tGnB*(H(E?el4ZbK z)zeSSl|W|;XH1MEt48Rh^vZeNSuY>yBjoE>93?51H#ZG+9IJ0b8%q7L=zIr^-uu>wOD2hQH~x64m5X}tQIn3npAv(?$H`ThP#X(RA% z@hP64I%O_i{@mXo|92iQ*mkCe)j6Obv}=1lKSnpom`YbL*NW|#_n zZVtEvbFNM;iLPc-&~~%uIY><{zz4Vh02R`cCI1glcD_LVSk-{~{3PqKy$|rRKr%|R z=eIZ8?l!@q?KRgA?_FMZ)c6T=+$8>3pLQ^JNO9;2z{UY;uK%$O_#+xLR-%?WhR#=+ zAxR!HXUlP=ms)IM+*<6MYc$^{%yAhSA@YSPs^)MJQq5FqtI(YX<}eC+0n&Pvv`Alw4MxYm{oC;a6%D%#E~U9&H^?y8 zs>bGp*ULyImOTAj1~@#!DxgK{a)1%_;M*r+`wJI_q1xf*NhnR+CuX5{L*o0y44bhs z^;YItXYggG1}48R9V|HcsW{n7aKsj`N#d{8PN=_IJU{cGWYnhbWAp8{tV)<}ydJ9) zUk5f@(iMlg3vi>A@ToY0)t$Cmcmd3Tdw(cLtUz$0E5f2kX9)tF1$K*g2w};3d9lOQ z6y-Z$X?Vxo3#r4>5x@cYh5N04#KZ~0CMAcDHL)iXUBZhLj3gjvk)pwen5pDhk>=E! zYx*yn*Lf<{x^yRwER0UbP=N2G7jdZLpN~us!SXom(3bFJ(X~&JnVQ7iVt`dC$V6!3 zzvEC1*4j|T`AQlE(jQIt9O5Jcy$i5)Va1vQgLWe2pT zKiQTELQBv{^p+$*04z>@6m4LHod?J$LSt(zEd?sz)?HCr$+7m@;%Xw?J43xs!AxM2 z0N_O>(4~Bn28!*WM9_p7Dtsw5Wb~x4yHDbN8iX#%oJ8d%DgBy3=eZzR00{YfM?UoUjnv3Z`_U=E8=DcaAdO|-k0AlYZM!m$_{cVTC`TeejxjPI!A3ppATiVSLENapf}TD{ zro+>&_+!1*7*lZY2lbd>*V6Vfs@Ys>fvFRR7aNOYO9@8%b=`=(H_Lrx{UQnI`#YMO zvgcIG)gdLQSItsZRcDmxZ0jEh_ZeA`M6>~KV81M*R{D+tB9BN0(>`O-CY*xGUUD zp%%3%bq(ky_00)r=hV{^NT2|GW7;dQ3hSL;@Dga<%H%)U&Am?He-q{DFX`b(wLlj>;*rI@@KWwU%b~1Ar)PP^c@vMZ&Ua^P$518z zo0N$3DY9JTrL1Gjwzg5?YHzq>bYRoqoZfWPgcgiE(oGk+xdQ`wAb@cmH6vxVhg5(e zHMH#?2tJ0);x#;)$UDialVZeHkd3HpieEMJZ5iq*^-md#(oLsT z?f}=laijdlM1=dGc-uF$00PV3;rR~J=Ef|%k^L}U<$}7Rdvax5dM}EvhFPFnED+Fr z?ej>!Y2~OYL^983(3-ceVb?DR>>5HisWt^+3A4|=hJIEqV|Z8>2~7@^Z*(4K+t8fD z#iT7t^W2=2uN}p2f!)tkq)Rit{`?UO0!W$DMuBG{5!6XdLA`?WLMy@&cttqH5m{#v zul8nu1xtCQmDrpYGcKTDL4NUgObCvFKp5h~YsNU-XF*HjK@xdzZ94%Wf#qAEm_@}y zmcuGdad;1xFHEi$Vy{C{WDnYT@l-0v;}Z}+$@E8_eS-iM4US$$7E);y$3|+un|FM= zLGJ>EjWIa7!Dh;EGa$3Um2dFdjl#_cjYuy0{rhos8X!HSKa=1#xzQagg&C0H(gqAbR}By zX&b}6Zby4$B?k@NAfi|ivDKxo z155B`hnEd2Let9@tOQZF>bXS5_c%^_2m}16bz?qZUq&g9Z2-!u5 z_?;kJ7k7C4diijAsqi4rj))C&ITo-CU$ikA@{;3&ePIRDB!!&%Mr6zQBAodcNSXj* zy}oe$N=rLPgD|RG$5x+-ce%mX>A$`QWOShiJguYaoV8VpDbG!NG(UUNlOjS5(~F-# zfYzq_cdG^j3N5NiyyTnkENmHjpS>SHEU2M%U#Hy*2V&% zMr|Iq4n5KT#LG!;$X*{mmu^!1D;v{`{6a?tCX_Y}T)3HFx0;!4Ee}Rz_H%yW@_;yY zl2E{nd33D3rdVR{!mV;dUb}Pk7tDu{tHw>G(#RJ3_`Jn;NHm>-sgD5S^w1Y}drz%XOlfd4uA=cV9~JdhEfX$6HtW%K)aqy zcNjRob9~OfGm7vt6c_*-IYi7S5nx_OQUP4qq{o0&N#~%@*{D>^JKpg+i4b7lgX5G4 zYh8$l75cTdT%epCF^0Ycc1nm&gK7LYZy*vfjX8$Eds}6c$;T^at|#)E3<87-X{wV& zk9IK3fL6Nc6<(NiS5_CWgfTHD&*y)TQTpT&YMClHIUf#|qs+}J)dEeEnSELR(piaP zH(83x03FCm*b<<})P2;1_0^ze-oV}#4)4Jj$>X`-HJ7Rq1nY^M+`81kY_#QXo&+*w z@M9rc`UBXtYj-(stV_4Hae!~o9wK7n9Y=CG5d)RLDSKKxyHtK2(A7SI=V6nJ)%K)1 z!pkdwIYG*;S{EQlk|;v(oI$JO%kPMg*-E<$S!eeH@U9)z_5eFiTz~)o03*c>tdc=2 ze%MGAL!GXpQ8UzDIcs>Kl5f)M;1$6yI;Rv|vBz;)+PepG_3^`8bG2n07O3dTF8o{` zi1ZH>br<&HXAfs@o8FMyEVe|! zZIu%TpLz(P=DZc?s89zqBJ(3!xa!V>R8AQkJc+%edb8T5PbqHJLC^^eB|h1NnWRt? z_S@q*hUG#t^0GLylk#7u$C(Vn=NO2la7 z9^H@Axf4nr^qZbcynq@-nY^YXTQki!xx3@rc?r`DSV}$x>D@gIDp#m+Yzk;v#~(mx;U-+^ z^Iiduh#&mQFw`tFhT|n4u2LB(0e2Q48x{BI7NpYYeXx0D9`E}pzJ!fbTJ=9gld(@x?hL-Tu;0wlHSLsh-GZ{ve#$YF)Xz-=E01KUK-r zEo0baGq6E(e08iWxN0dfFdt-99+vOHJmCRhDpT%eG#`{3*TZ3*Wf|Q>nRZ%b{Lsj~ zoROrgl6K?EgRpkpSMlVX1SF^{he815Yn@#g{Mo6S-KW8+&{sE|X**cNVcpez28?dj z3a@fWk8Q4zV<;`^55aV!EA(&maByc`=HF-PR^DA8Et*^XkYa;|T^((Um9j_<<+(1| z9Xl2`zb;Qg;Xh-kH^@2q5>>gOV}%Vr1-N8$#Zi-i072@8_G>=#1Ys zr?U&xyeyZq1;smadEYciHk_f)Z653DWKuY6YPZKp$53J!AB>CPT8aEm=7m>HxZ4|e zO(gZRqDdrUKniE>IO>E9eK(`5kQVOdi(;Aw!n`1@{zg%tCCOu<_f13j~*6i+xhZ(8PQ{wa!qZ5$?3X0tCxz zu2DZ1rQzU%Sp(T>6Q!^2BA^U9T1BNfj_JCW&2r43IyLLeh;LE~yVOab01=Np;`2Ir zZ@{@f(jC_0bL6Nq=jp83K875QjFzhCQA$-Olj|lg-^#Z&q+qpUJ-J_;=D)Q1Q;r~f}>pdgD8XlD)vYs2eM27r+d zFLZrh$rpR8&n@?*H_xP$ri>^Bhd?>k38-IqwX6F$J}T`?74NEv72(l}>#g9MyTd{I z9&8$S>|H=sS1d@RCgPOQ68USP1G=at9n-MR#kBXcDq@$H<`!>B<3Gk-mUI@~IYN}+ zmC7&_N$4F7mwVNKbfTb%Mzf786nD?kRri50tl0Z0d`}g$Pm$! z6%8`6P}9&XW$uuz!4;#=TFUasKqeqk_-)G~n}AFutF?ZIF-J&Wpjqq$qN@WwT8n@D zBE$jy{V{WH<0!%0b3tzaFh>k+vd3BpIfB zktW)ol*wG*AVArD;?c(1ed33oHi};cbFx~#jeo4eO_!GP@FrKb+mdP@jPvW=$jFSh zmK#~q!8QDrc$`k#j})LkX5Fx<2lgJDpas#`edpe{}v zp@O{Zkk_8Fzcw4GF3@o&e-hT@1Lm)^EkcrA9KmEzIkAMjwxj;ZnbNeSDSy3H>}Wp# zX!47ju9pE%AsuhOX}-yIQjIKDPhriW;p2Swq6j@Vc=CQ+*p_E5*-Fc6suikf!By>O z+1c4SwrA3L8LecuAfD(t2&0*nm*4;&j3DOVin9or<9E}_&Q-HEf{~;{tpwX+i4iv)RxpIK-QnyzYt&sz-y$KhJr`H5_2;_0#D0- z1(t-*=H~`uDoTUJUgh1dh29AMw#=qES%?bLgQj`u*>N%+y|dd+c@AlzwM5Z~#=;q$ zNTKr3`;Hl8v;ZiO)8BgkdI-iwfz#WiNWHQa9+Md$tT(swSnEvWFhIZo^#CAnC_gaJ zd760iI}=M*^Djqcg9tet2ngN9%g^Dj5Pmpc*C6B6e{0~lxGqd^Ra(j)TwBomxo&NV z?6Az2i)U-@1(b`Pid8WJu;)5-tmk4Ibptg$eL!@_1n5vnZ_b9gq#>FMd%cIzj@{=O zAD>2x8}bpK%Vg%`);nO5Z*f`qtb&V#y9=n2KOL&N>B;Aj5K=5`nx@^I$5Ado2~3WD zti($^FEQ4S!roN|iW`_jBD1HD$vLxpId~ZY>gE*sy@F2L?kW5=F$UQn9yYPWiTq^za5n)@#<*IsIw*0N;s4t7zuM z75Gc!q2WU7pPMH5UW%26p#El~dfSHG%WlvKN!c8zmU0a3l$_TXI}zX3^P5c>>5Xy)_(ti~ z$`AvjqiyZ>NpXEkJO0T=4hY5EgS3CkSxVntBP(R_ov%NkJd{UywPRNELWh>bJ%WeT z-YtTId`pxBgH0jOV3F(&ThQtB#JH^LVY_bsWq-wdYQy{Bl}R^$j$F+AFlOqZ5JVVi z=TYnkQ6C^61W7)5{hfi?#8=6>d`|8ikg2PyF#}aSpelB0O&YQ${YC+~fL*#$pn9So zc!dvuaZ<}3W{{mvYS>$&ZIErznPlOFGyChDD*UBEHMVQJjt#E8f(`?L0n&ZotJX13 znHci&3H`{q7uf+3GZcxa`d(`!`c(D3<~b=wuUH59bl;jEtGqF!HxDc7-b1RONyKu~ z`v<5zQVOq!WtqJAKLRZY`1Qaq^eK0W(u45>bA2iM}i`k#q=$&7& zyfi3KRRu^u}22vHjn8%_M{beqGJ%{#yMENj3cb z<-wTvfKQGN`F2=j`9HZ`nlhT|n}2yE$*m5UT+GI%4KIy|1%W}oxJej=A?J0Z`%}2M zXW~jRiY^4K$`5dz)goD8;cW^?-Uf?2hgj5ZjC58r!Y*Yl?<&{ljZhU5xfhNTCm zP_mwkn)A`L%dOW=vz|m5eA2FWAy~BGxOWe9P`kQSZM$@nl=p;ezfT}i(jq|ArgXZYCAP=0bphPL=6%j9`1jeV6-kS%s0 z>FOB((RYzh?SSnf^wVRnzx?OjCi1m{Z#Yy@fVsP#cmN0K*xPyk);!ikxb0?yNK?{H~b-jELuj8#Nc*vV+m5?^mTC~P${9{;}&P2&#V=P>Y*FPpYr?Xu( z!P&n5^+)v`gG@wIf4E8SFy*IQDKz)ixRaO9{+H+V-}|n^nZVP6elw*>zsgI~*{O#Z zaOQ=FZ>Dk3^iwx#U6IIQIezcqX)&}LBDSsm9*SYu!4i%il_J2y?|bNCTly#~#67dFw9}(#a3x&5md{bj)Zho-&Lh+(6bE-km9JsM`j3lX^Ysz#sqy zqzm#VVM?f|XzHq4l`#eX^xD6^vMJrzV#NKjLn)3 zM|A4y6>UNK4aD19vogCHGK=qBaW68(6vH{@w?QIKY=tM?SLU})%%q}(R!m7CF;V~* z&H{KM4iM>;ir!^H)p8RjNOx!nvy@liMjSPg3_QIsSrpg!0hKmBMnc1y01fJ1z*K%1 zQY>i9&z$XIpm?`Ff!haOs)m65AmIsRd1K8IiX&u7r>HPC>@zPJd(Vid*j_>=`F zxPkolh!g&ni8~F|gGAu;q?!*|n4=gIXA}5EgXCxt*DIZ4Xos!W4K4nQ7Zmi(cHRTm?A;cdAJH0I-Gy>dBfjH+*x z+aCAj9gk(3Ub|v^1&=+_xipudxEX4*9 zS$&lWt)_S`LkEle1isuZGJpfnldp07N85>+sxW{C&>E8D|vOCWpS)DlWLL0tl^36N-J z97TxJ1;jrCtF+q1EDT}08)Se2LJ#7=l}p7Qq;0h z0^8QdKmpheXiS`*0gxy-nzHX<}kZ{b}rM z05DmljF6^O^<~cgh7_`FzkN>UWmOs7qT2Nu>d$~1#9lBi|Gv`F#57g&HlGMeYlRP! zFj)#60>AOBarT)CNV~8vlm*a`Gka!U2*1oL$Tu>&*MqZfTnzZ0$vHqNtfhF75Rp$- zNc&E@q;@EI@h$zj+0!G(c|zgrRBsqwA|hhsubNi#`f!ceM^OVIzL-m5-+zKvDWF#4 zm?!c-yh@hD#|Hmc{t>NKyp`i^vcx}173pAaUuCm$8bzP21N9((+D<keNa8DuK~AP0gi(?zhu_Q+%CZo z$2=ss7_$#w_Xm&ZvS`-Ee0%{iHkEeG3Pgr?K(|%oZmmQ-=SjX{!w*=)N`Om$LG~9=zS7PqNjE1_*(yNaS?fBSo^j!Mh_iM0nq&+(Bg#5Yu_yBXk^x- z7?bPLn6BMd=0q6a00{l(tT-roN?VpXDA3^gdQzA-v?a_QWxK>&fvOeII`*KT3R$ zwKSc4uY5}_!>G>{_$Yse8B%|ay~Hni4|@Ch*7{gGR$GT~sJHC5Z>I%X?4M{C`IZOKb8fo+3*T{GJ35WFaN`1vI{l_ia-NSXhnEGcqHcM@M9P>u%u;)+O53-_>;_mcqyXKCEr}VE{+0 z$ISM>?%Q;BM!p=GwV%j$WkAx0F8YbRto&EMVI^@iWi=x1YDWXr`SGXKyCxoEv zs^Y;7A!U4w!&wl8KcA8cr3E5?KLG~BMMNl4{sTSEST|gWuQ4PW!!P=G!zD-t$+h*W z0J5O7{zU{@_rIXQlwf0uw)ze4e*z?FOfsr$K8orIU0-%)5Q-vUjb|UzaFf{SH5C)6 z%XcUtM1LHg-FRSRTl9ayi7lRzHU-M9k_28=W;d6CO_WEWppy3Q(bs%_x)$pHJqBF( z^w1^#AGKO1l0(1RjD8mR*YhP;Z`&s%=L8bzYPm;EiUwxol~MjthB#pN-YJ5oW@%}_ zmW%%2k?Um?o7 z0|J$F$+Gc(@u`Sh?KLvt#xKP9Ma*B6A}^8s-=`F!l~76SJ}CN%746@V^fAj^;l{0E zFvQw;KC>kh_i$pbDg(`are7Rvz?8B{RTTfW+1X+N@n56uHx7YAPAOHdYKnG|LNq1Z znQm?k*L#*foNDEFX}_tS&bIYFbvpbU*sY@5`(T@;s`h(G|5%;hq$f-vRlw53Q2apP z1bZp5Ck=K~Uvv3uw+Xd2CcHLF+#y_rn5oMcXk!2PNs41PoQJiB4+d(;(C2poN2qFqzE2 ziRMAn#0sIbW!21}Ca# z+&e=34k_DEQ?T(x8s=^tAV3BlKWkrN)a`2MO1zQX z>xaYOUlNK#a9kOc`=h_2@236Vo&7C~5{aAOdYEk&DU-rwL=pFeBXff@mS3*_QcYWz zYQl}?0{v*0=!Ji(#mGD~KMaSEPOLr^g)u55B9v}CfmC$IA3`hHt2F4r^u3_}A7b=p8^1`)>XN>n=?g)jksR|GLueLF zvxa!80);h+5*GSk4Ff{EHe`OufT2a`U8emyA3s}&;rEiK#=0M%m;Lj!zjjn)x9}Ii zhd8)fcX&cvMPuHRos!HSZzX^%FHt!5geChnR7)T>U#k%i%VoGNu^fr3QrDGjqk*dz z*2yXr{jGL*bI38+e1991cqMAte~7jV$e;341MZWu{VdUrqLu<`U(bwVDM+3&13JqJ zP^RnS-wi4Z*4Bn@m;sl8Q~85bk#7IZIp&S#U+nM~(j*P~yZzecQys~_r2n^xvSr5p zo=fI^`M>8wI?nN@ar`xhklA?RQDZ6+ee(s}zljri_)8T;{x+Erq)XaAL;?pyJa6Y; zE-Puw!ToPP`|ZC3deI^h6ze@kz$={7f82^IZz*c2HQ+f!ScCYia z6RKG+GXx6fe&N4L{>4N^=BojBrJ5!vaM>EFi#$=w-y-|3WlD=Wu~7Q27!&JymbYB( z4Aq1=G#9*4&Dh1UUT=uJ*f_$W{uj!SW>7u9%Ht9IJN+>3Y3CVwKM`)ptb8#<;1>%s z0;8o|s}D>;wOQ%en2g2>)%iWp{}c?{G4E^S=l|2dznuTq05=(auj&UG$DBXS{Ci5E zg*h`F@?2Wft+uz{!f%fUD0TP5RjxVTkRie zH+qs0YragSSLZJLIjvq=RD$?9)5wX=_80X_}$Q1KH zdb{p)?Z=Xsc;&yX)%Dc=ui?-W1^%D>zz(ctE4)wa$7EX9|3Q=Yxef1s8UC+z{yWzN zqezkdo0q>%EBO=ld_!=&QUG*#<8QWOK5KVapVkDkN&@00p*{A3_5-<)LAgpLEyhWP z1yfV>N7FS_hY4Z-E*pxP@@Fdj55z$xoMchv={>?BEY2C8F}}gq(da&h`s32#aXu0L zi}%`>Yf2Ycm4BqvzgI7K^bjj|scHp|ZtXjOs4GOqdjFq+^tY@2`_X^eZEW$#dj>@u zRT;)H07>ZoGWqY?e@L8ouT%mh8$mQ?7k)T|EcJM3A+@=xDa%*is(=+$CRPSt$qvl+ ze<$Go^+3>i`7Vf3VE^$AnGOS(3`xPxXYGjNK8u&qD;|^wbg*!pNp$@;GS_|TPrh() zHba9zdr@oBhfs8$J72q^WC<9 z6}#}l_}fPQ2RwhAnw6nU3$a51$i|COWv4RgP7oCQS!UFff@ z1G!%PQwnB(Iq4stlyLdxw(F?#0Pi1?(N)_(%(Dlter;8+01;d35C*6NUke|! z3Sl7iA9g?b9rr+p`2Beau3$6{qx&B}^EQ;&B1{66pl=r|?R+`|EBcC5( zxuV;ucY|p6Q5S@w-tX^{WkoL-A2+F_?OLy{TLL0>JX%Z4vBQZADHfy>4aof;SLXu< zxC>>*h;ksaK9%(8SA@GJwet|4PmAybkWwuvZ_~+_!t04|%gtwZ4rvRje-?75hRl3p z*1gPa3t+U!gXrONoiXV{J4Y?~#7q7Y6m9eqiz@7)N;b9_luWB~bv01W_I#Mir(9G; z?;tFJW@#E7w=kr&j8SvXxN4_h>E-ab zv4I$UlW>jE8iXekTg9JfdEqrLnk?51A>`#s4xAWUm^Vv5UWC}8fOw3v!QoBN1b8%w zc90Rfw!-o~xN`mLGD%A37ka`yvjC36g{tw+7wfO33kdsP5Y2v!`qD5NLS;|Q$(E-Q zj}DaYQJT;vIN)Il@qVI2m~MwI^-Fa$Da&25@MJCd*inD*2MtJ18w^hHqtIC+Uau>@ z3wlwUKx*E+U`83GE~Z!i0RWKreY+aWT`*B;n1tMf?pD4Pcwj@HE4aa#+D@nJ(UFKxG-i3wE|PxsT*3b6fzN`y z@)h1Q*jo64uOP`_1ywGHC<&7!2jb=B@V3e+F1G@5+~4ldAB8_Q(vHKjX8} zSNEWZ$`^!ENnK(<;62A>&a)Sk*=SXl0kPd-kv^|x3TX_h)(5RBZlwe}V^2rV&qYZ% z?bUgV+^!MleW7?x1+&g!e&48e#>d^Sq1XTf_iz9L??CfAq!Sb>NR>PzxyiUiUqrbb zBIF&zLzz?^%TYD+R!Syl_3eXs7k4=0kCBEL0clA+oCmiJ7IOwMkDAxaPChE)yXD{< z*3AKUTMEi86wmrO7o136p{*TB?07%`TqPxkakKk~XkM4T6CIEZC7G@g<#21 zbZoI7*8@>=9U?)((u=$GvuT!9iB7M_(?(Zm27G&#hOz!yo!(d;o<@u~8osEuD1L$( zIdq4W8o^yb+t}AREN3z&Wnc5WTsM2k57}4Z)GG~Y&px?r_~8^o+2wwJv(%#UV_fc# zvcjIGwUmuBorX1_FunJ9AC$7Au^VN$I**BgI^4s|U?U@&8vhAkRS!gs&eqnANu~^? zIhrE+Ry9;V!493&Z)84b4u$^m>xvZwD!LFUmZ_HH8;ye5Tr?HDgF#<&NS_U1$xQEv zBEH+nB?#Cr^#eFu_wST_A3w_XHFC<0Ym1NCy$q@@?#4JyMsL=D9pZ?OJzjF(m#s={ z2!?oM=%&mKeriVV%i*8|1*OY|SOK2>zAs)PpPmz*muif&uAR~AQKe}aj69>*HTi?0 zLzg6jM-2fH-?o6H2|_kTjSyudF@1*2xdTNZ!snyPY=jV({8ZM&$an3IzxW|DKSwx| zzKQLEOQyp1`!Y`;1KkQo4T)(aHWk;N^#<{SnUyx&9)dVSg65pjH{z?_I3jck$(c*Ur$h+NLKC%yKcrhwGY-RdsItFAeyjD5M(i~>d?R^N5p%Wc% zurbkn1xc6h%9JsB5cEX?0ewg-+NGC1_d3Rcy8{m_;t2Y*9IN(1Vx|qA8kVVpUU%1D%8?Dqx|F>M~F>~vy%t~`h2cL zUnwTb8vL|7dT@j0cU34&lva)K1Kqh$<*cq3V|R=bJUKTXyhjnKxK!PMcg0yEyWv|> z9`#C8v=;SQP&dT|N;UW5nH%K4Ax(FXd|E~Hl7GxONA90{0ci2q5Mh{8l_xln=Z+L+ z;+x5|w-O=d8LI)~`gQfsPz?@0M0;>O+YQ)G$KZpjMN9}4yBDwk}axi)kk=sKe}pY@8sP@59`n(2QvTazL-du-3$66oP~n~ z>!P6|pihCU**5Xw>luNat>oEfxZqKf%cHJXgK7zCH7p3*lDkvN(|0bzt0*7@>(iD}6}|_XAWe-~fzLFs z>|1N72^xZ&T}Od-_~N0z?sT`0U(G6`;}%ZTYL)r$So#cYc7+R92Ec#5;E0b)>4O|=!!=kQSd??WfERC#6mPo`4j~1T5F_RrsjrlQZ*S zusduYjtX{Ga445obaQx|7Y3rz;S~$GmygAY6XQ8t8UGMmulNdy7!VGF zY2czf-Hpue=wLH-XMVCqT5^^MxrgCK{cKTC)brCTDRO(2^U|0IHY3%y<0uVTgfsGI=S+JF`pDqn_@OUe+Qxu^< zizl-nasl^y6%{N)+k}Sp4~ba|01(+JD?XDx^{>?te2kF#K<2z{OGm1vJ5Pwq_Nm&G za6U2XsN?<7j%8GgfQDAvu$RMZqvjW(*8TgDGekb&0}lh5I^h&m>7R`=HxP~5R+ zQ=9;Zeg%0k`;^$5NTR~sG=iI)wc^Hg^m$lQX7%p+(K(&9=>$7l%vbe`$azpJV5r0@ z&02iP_#{tF`M~6h7?-m3?F?wOj7D(+`IdQd>Od!1lNS-*6;^3W3@bO|(psUf*KqNP zsu*tpm3GTBz-7s`O06y0;*>qvoX^E+TbVhwaYz(v;{#& z<#+m`o~P7YEXvR}0^~gwGW7%mihsrqT54oIVZFZrs+IZ=it$ z!-xYfHp`3&?NP@bl0~c&+yl=GxsCm)Xfxp4<~F&(L@r zu%eQ)TSPYlZl*JVLO=-!PdYju*tXU5B^V@~U-Sxe7<|_4Jn*4|qtLoG(&;N#DF!#( zi7TIRqC57ts)Vf?W3hwv2fx9l?ua9xaD}}hiMNq7y=}e34Fe{px&o?Jg0o!CSj;*1 z)T{TVIta95*vYRuJVZ?q+=ffHA_q&Um0ag|`^f1w&UAS;uNgP=?9BFeC46jR%Vs(A z4Mx}4fiNA~3)V<&8yRI%GkD;~njofF2W?g{c~@0KD_Ic~!?8P_t18>uy5SB2zU#Be zRX1c<#%gM}N*}9?Z`kB(B`U_drwbKJ5v6#NaAgIaVh{z`=nM3> zJ^SXL*p23nD{<=H+>}6D6Jbg~dqA~Iqb@DDO|JQ^W8jcY5bpd#`@HA%LXIVH+d+YG zz2&8uJ)aj3r>$A4dFPA`C_Zsr?THOK2NMnGgNG(qN%5kYmV-o@d2oH9NR96VN_!LW za-(!BP?`Ju^F85%R^`d20Ol<;q@x{|->h>1R-elCcn45iRHtB^CxLy}5uS-nqfYbK@MQSHV3}ZKxN61pKbOsN%Ks z#22(+5dqqA`RldFsGG7wkp98BC?|StB=675fL@t~ZhR$kPBUQw=bdaCNI5Y0NG@ya zP|Qj62iDSW903RUgDjk8fZ_ID(3OrI3a;^l5j)3`qzVRY8TbQ#4eCx`=vxAf>&}DIOwgLq72KevC;sT{BfS)3Sw2+9XeiQdqN7}6&F8AT3y|v(feHQ3 zFbjKBD#NLd#&(ykpoGck0G$slX(*A5UH<;PYxV?KgfI39vI*9~Nb)J>lKw@p2_>i! zA&Z01Cu4p~r6^Ny$f*@0_nKb@CluDe$soSf;s`0*wL1>l-PzD}-vB7ED+wN(C_O2$?6jlqNS$b89KthOci~>1MPr~y_MBtr9{0UX#RhbqA64j|p={v&Fs0?E~>^ z?o=4SS2<9G&%`_Z2pBN;x9WzX$3gY-uBxlu)NF_^BI9kct+-a?@kqTiEHq%6B%3P1 zG`huLbYHZ-HDe}<=<5P^18Ngv5PpIY5Mu4q{YZ3o#@@owhtccs(oB?%06<8t+0#&B zj@E=)hZ3VyA|&q`uZ)*aM*1&O)6>&YFq`t%?;D|X`LVlE68#fgGTlN3S@bB31+M zuB+p%or0thJOkUqJo-hl0x~83{FaR?G`~gTyLnhGilEY&TH+*g?6RMrf|&;=wUaY# z#x_;AjC{w5;rIb)dyF3GF#UWBaSJvVm$t){^4fqx(UZdTk>~!ldcP4DW_7Z6a=m!{ z*wFOUCxC`1B4MrcroTi^4RUBWQzLH19q5fY001;S(N#3iA*l7!b3m28m_=m;81U<1&W|om|f;{EnA z<5p@8LU(ECNu+(5=_l#u;3??h@mk?$n>-L^l+FMvCoRudCTj98SYoDGXr5%rKC=A= z`b|#E8H(>eNMhja7T+2@@0SMlxn4#5-$qt2MnvV2)TZZnQQW z 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 Date: Fri, 3 May 2024 14:00:20 -0600 Subject: [PATCH 03/31] PLT-1117: Add Palette CLI Import docs (#2599) * Add Palette CLI Import docs * Add Import Reference within Commands * chore: minor tocuhes --------- Co-authored-by: Karl Cardenas --- .../imported-clusters/cluster-import.md | 8 +- .../palette-cli/commands/commands.md | 4 + .../palette-cli/commands/import.md | 82 +++++++++++++++++++ 3 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 docs/docs-content/palette-cli/commands/import.md diff --git a/docs/docs-content/clusters/imported-clusters/cluster-import.md b/docs/docs-content/clusters/imported-clusters/cluster-import.md index 77cbcc469b..1dc56f229f 100644 --- a/docs/docs-content/clusters/imported-clusters/cluster-import.md +++ b/docs/docs-content/clusters/imported-clusters/cluster-import.md @@ -21,7 +21,7 @@ Select the mode you want to use when importing a cluster into Palette. ### Prerequisites -- Kubernetes version >= 1.19.X +- Kubernetes version 1.19.X or later on the cluster you are importing. - Ensure your environment has network access to Palette SaaS or your self-hosted Palette instance. @@ -29,6 +29,8 @@ Select the mode you want to use when importing a cluster into Palette. - Access to your cluster environment through kubectl. +- Ensure you have `admin` or `cluster-admin` permissions on the cluster you are importing. + ### Import a Cluster 1. Log in to [Palette](https://spectrocloud.com). @@ -122,7 +124,7 @@ You now have imported a cluster into Palette with full permissions. ### Prerequisites -- Kubernetes version >= 1.19.X +- Kubernetes version 1.19.X or later on the cluster you are importing. - Ensure your environment has network access to Palette SaaS or your self-hosted Palette instance. @@ -130,6 +132,8 @@ You now have imported a cluster into Palette with full permissions. - Access to your cluster environment through kubectl. +- Ensure you have `admin` or `cluster-admin` permissions on the cluster you are importing. + ### Import a Cluster 1. Log in to [Palette](https://spectrocloud.com). diff --git a/docs/docs-content/palette-cli/commands/commands.md b/docs/docs-content/palette-cli/commands/commands.md index 78be0fec02..dd33001697 100644 --- a/docs/docs-content/palette-cli/commands/commands.md +++ b/docs/docs-content/palette-cli/commands/commands.md @@ -23,6 +23,8 @@ The following list contains all the supported Palette CLI subcommands. Click on - [`fips-validate`](fips-validate.md) - Validate the FIPS compliance of your Kubernetes clusters. +- [`import`](import.md) - Import clusters into Palette. + - [`login`](login.md) - Login to Palette. - [`pcg`](pcg.md) - Private Cloud Gateway installation & pre-validation. @@ -62,3 +64,5 @@ Palette CLI supports the following global flags. - [Project](project.md) - [Validator](validator.md) + +- [Import](import.md) diff --git a/docs/docs-content/palette-cli/commands/import.md b/docs/docs-content/palette-cli/commands/import.md new file mode 100644 index 0000000000..e6c805fb85 --- /dev/null +++ b/docs/docs-content/palette-cli/commands/import.md @@ -0,0 +1,82 @@ +--- +sidebar_label: "Import" +title: "Import" +description: "Learn how to import pre-existing clusters using a Palette CLI command." +hide_table_of_contents: false +sidebar_position: 15 +tags: ["palette-cli"] +--- + +The `import` command imports a cluster into Palette in full permission mode based on local kubeconfig files. Refer to +the [Imported Clusters](../../clusters/imported-clusters/cluster-import.md) reference page to learn more about imported +clusters. + +## Prerequisites + +- Kubernetes version 1.19.X or later on the cluster you are importing. + +- Ensure your environment has network access to Palette SaaS or your self-hosted Palette instance. + +- The kubectl CLI installed on your local machine. + +- Access to your cluster environment through kubectl. + +- Ensure you have `admin` or `cluster-admin` permissions on the cluster you are importing. + +
+ +| **Long Flag** | **Description** | **Type** | +| ------------------ | ---------------------------------------------------------------------------- | -------- | +| `--kubeconfig` | Path to the kubeconfig for the cluster you would like to import (optional) | string | +| `--kubeconfig-dir` | Path to directory containing kubeconfigs for one or more clusters (optional) | string | +| `--uuid` | If true, a partial UUID is appended to each cluster name (optional) | boolean | + +:::info + +If neither flag is provided, the `KUBECONFIG` environment variable and `~/.kube/config` will be checked and used +respectively. + +::: + +## Examples + +### One Cluster with UUID + +Import a cluster based on current `KUBECONFIG` found within `~/.kube/config` and append a partial UUID. + +```shell +palette import --uuid +``` + +### One Cluster with Specified Kubeconfig + +Import cluster with specified `KUBECONFIG`. + +```shell +palette import --kubeconfig my-cluster.kubeconfig +``` + +```shell hideClipboard +Imported cluster my-cluster-b4430654 +``` + +### Multiple Clusters + +Import clusters from a directory containing multiple `KUBECONFIG` files. + +```shell hideClipboard +configs +├── my-cluster-1.kubeconfig +├── my-cluster-2.kubeconfig +└── my-cluster-3.kubeconfig +``` + +```shell +palette import --kubeconfig-dir configs --uuid +``` + +```shell hideClipboard +Imported cluster my-cluster-1-e7c1ea5e +Imported cluster my-cluster-2-98669d7c +Imported cluster my-cluster-3d7cc792f +``` From 79016aa82f1d6ed362a96f21c159f77b725e8541 Mon Sep 17 00:00:00 2001 From: Lenny Chen <55669665+lennessyy@users.noreply.github.com> Date: Fri, 10 May 2024 10:45:19 -0700 Subject: [PATCH 04/31] docs: document new hw requirements (#2787) * docs: added rl notes for 4.3.7 (#2715) * docs: added rl notes for 4.3.7 * chore: vale suggestion * Update docs/docs-content/release-notes.md * Apply suggestions from code review Co-authored-by: caroldelwing * docs: fixed format --------- Co-authored-by: caroldelwing * chore: Fix broken links (#2778) * fix indentation issue * Revert "fix indentation issue" This reverts commit f7e1d10f47b95e07edfe154c863f1ddac7c4a381. * docs: add hardware requirements page * fix build issue * docs: fix broken anchors * Apply suggestions from code review Co-authored-by: antongisli * incorporate suggestions * increase boot size limit * Apply suggestions from code review Co-authored-by: Yuliia Horbenko <31223054+yuliiiah@users.noreply.github.com> * acronyms * prettier --------- Co-authored-by: Karl Cardenas Co-authored-by: caroldelwing Co-authored-by: Yuliia Horbenko <31223054+yuliiiah@users.noreply.github.com> Co-authored-by: Lenny Chen Co-authored-by: antongisli --- .../clusters/edge/architecture.md | 12 ----- .../edgeforge-workflow/palette-canvos/fips.md | 3 +- .../clusters/edge/hardware-requirements.md | 52 +++++++++++++++++++ .../edge/site-deployment/deploy-cluster.md | 2 +- .../integrations/portworx_operator.md | 6 +-- .../release-notes/release-notes.md | 15 +++++- 6 files changed, 70 insertions(+), 20 deletions(-) create mode 100644 docs/docs-content/clusters/edge/hardware-requirements.md diff --git a/docs/docs-content/clusters/edge/architecture.md b/docs/docs-content/clusters/edge/architecture.md index a96d49008f..fa65ea072f 100644 --- a/docs/docs-content/clusters/edge/architecture.md +++ b/docs/docs-content/clusters/edge/architecture.md @@ -30,18 +30,6 @@ The following are architectural highlights of Palette-provisioned Edge native cl ![Architecture diagram of Edge](/native-edge.webp "#title=An architecture diagram of Palette and all of the components.") -## Minimum Device Requirements - -The following minimum device requirements must be met to deploy an Edge host successfully. - -- 2 CPU - -- 8 GB Memory - -- 100 GB Storage - -If Trusted Platform Module (TPM) is used, it must be TPM 2.0 or greater. - ## Supported Architectures Palette supports AMD64 and ARM64 (beta) architectures for Edge installations. However, we cannot guarantee that all diff --git a/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/fips.md b/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/fips.md index 58ccc77d48..e73e37feae 100644 --- a/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/fips.md +++ b/docs/docs-content/clusters/edge/edgeforge-workflow/palette-canvos/fips.md @@ -38,8 +38,7 @@ This page guides you through the process of building FIPS-compliant Edge Install Contact your system administrator for access to the subscription credentials. -- [Git](https://cli.github.com/manual/installation). You can ensure git installation by issuing the `git --version` - command. +- [Git](https://git-scm.com/downloads). You can ensure git installation by issuing the `git --version` command. - [Docker Engine](https://docs.docker.com/engine/install/) version 18.09.x or later. You can use the `docker --version` command to check the existing Docker version. You should have root-level or `sudo` privileges on your Linux machine to diff --git a/docs/docs-content/clusters/edge/hardware-requirements.md b/docs/docs-content/clusters/edge/hardware-requirements.md new file mode 100644 index 0000000000..33567fb75c --- /dev/null +++ b/docs/docs-content/clusters/edge/hardware-requirements.md @@ -0,0 +1,52 @@ +--- +sidebar_label: "Hardware Requirements" +title: "Hardware Requirements" +description: "Learn about the hardware requirements for Palette Edge hosts." +hide_table_of_contents: false +sidebar_position: 0 +tags: ["edge", "architecture"] +--- + +An Edge host must meet the minimum hardware requirements to be deployed successfully. Certain features such as Trusted +Boot also specific hardware requirements. This page provides general guidance on the minimum hardware requirements for +your Edge hosts. + +Due to variations in hardware and firmware capabilities, in addition to different workloads required by each user, you +should always verify and evaluate specific devices with Palette Edge as part of solution design. To learn more, contact +Spectro Cloud sales at sales@spectrocloud.com. + +## Minimum Requirements + +All Edge hosts must meet the following minimum hardware requirements. + +### AMD64 Architecture Devices + +| Component | Requirement | +| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| CPU | - Intel: i3, i5, i7, i9, Xeon series
- AMD: Ryzen 3, 5, 7, 9, and Epyc series | +| CPU Core | Minimum two cores. | +| Memory | Minimum 8 GB. | +| Storage | Main drive requires a minimum of 100 GB storage to accommodate the Operating System (OS), Kubernetes, and workloads. The main drive must be an SSD drive. | + +### ARM64 Architecture Devices + +ARM64 support is only verified for the Nvidia Jetson Orin device family. + +## Trusted Boot + +To enable Trusted Boot on your Edge host, your Edge host must meet the following additional requirements. + +- Trusted Platform Module (TPM) 2.0 or greater. +- Secure boot Unified Extensible Firmware Interface (UEFI) firmware with ability to import custom keys. +- Firmware minimum Extensible Firmware Interface (EFI) boot size capability of 1000 megabytes. Contact + sales@spectrocloud.com for details. + +## Virtual Machine Operator (VMO) + +To operate VMO on edge clusters, the CPUs of the constituent Edge hosts must have the following virtualization +technologies. + +- Intel: Intel Virtualization Technology for x86 (VT-d) or Intel Virtualization Technology for Directed I/O (VT-x) +- AMD: AMD Virtualization (AMD-V) + +For more information, refer to [Virtual Machine Orchestrator](../../vm-management/vm-management.md). diff --git a/docs/docs-content/clusters/edge/site-deployment/deploy-cluster.md b/docs/docs-content/clusters/edge/site-deployment/deploy-cluster.md index 2320290300..fe99e24359 100644 --- a/docs/docs-content/clusters/edge/site-deployment/deploy-cluster.md +++ b/docs/docs-content/clusters/edge/site-deployment/deploy-cluster.md @@ -499,7 +499,7 @@ is an explanation of the options and sub-command used below: - The `-force` flag destroys any existing template. - The `--var-file` option reads the **vsphere.hcl** file from the container. This file contains the VM template name, VM configuration, and ISO file name to use. The VM configuration conforms to the - [minimum device requirements](../architecture.md#minimum-device-requirements). + [minimum device requirements](../hardware-requirements.md). The **vsphere.hcl** file content is shown below for your reference. This tutorial does not require you to modify these configurations. diff --git a/docs/docs-content/integrations/portworx_operator.md b/docs/docs-content/integrations/portworx_operator.md index b43c9707c8..12427227a4 100644 --- a/docs/docs-content/integrations/portworx_operator.md +++ b/docs/docs-content/integrations/portworx_operator.md @@ -531,7 +531,7 @@ vsphereSecret: To activate the Pure Flash Array integration, you will need to create a Kubernetes secret named `px-pure-secret` on your cluster containing your -[Flash Array license JSON](https://docs.portworx.com/portworx-enterprise/install-portworx/kubernetes/install-flasharray.html#create-a-json-configuration-file). +[Flash Array license JSON](https://docs.portworx.com/portworx-enterprise/install-portworx/kubernetes/flasharray/install-flasharray-on-cloud#create-a-json-configuration-file). The secret must be created in the namespace that contains the `StorageCluster` resource. The namespace is `portworx` by default. @@ -1138,7 +1138,7 @@ vsphereSecret: To activate the Pure Flash Array integration, you will need to create a Kubernetes secret named `px-pure-secret` on your cluster containing your -[Flash Array license JSON](https://docs.portworx.com/portworx-enterprise/install-portworx/kubernetes/install-flasharray.html#create-a-json-configuration-file). +[Flash Array license JSON](https://docs.portworx.com/portworx-enterprise/install-portworx/kubernetes/flasharray/install-flasharray-on-cloud#create-a-json-configuration-file). The secret must be created in the namespace that contains the `StorageCluster` resource. The namespace is `kube-system` by default. @@ -1727,7 +1727,7 @@ vsphereSecret: To activate the Pure Flash Array integration, you will need to create a Kubernetes secret named `px-pure-secret` on your cluster containing your -[Flash Array license JSON](https://docs.portworx.com/portworx-enterprise/install-portworx/kubernetes/install-flasharray.html#create-a-json-configuration-file). +[Flash Array license JSON](https://docs.portworx.com/portworx-enterprise/install-portworx/kubernetes/flasharray/install-flasharray-on-cloud#create-a-json-configuration-file). The secret must be created in the namespace that contains the `StorageCluster` resource. The namespace is `kube-system` by default. diff --git a/docs/docs-content/release-notes/release-notes.md b/docs/docs-content/release-notes/release-notes.md index 5cd1a378a3..56872130be 100644 --- a/docs/docs-content/release-notes/release-notes.md +++ b/docs/docs-content/release-notes/release-notes.md @@ -11,6 +11,17 @@ tags: ["release-notes"] +## April 29, 2024 - Release 4.3.7 + +### Bug Fixes + +- Fixed an issue when creating a DNS mapping for the + [System PCG](../clusters/pcg/architecture.md#system-private-gateway) that caused errors in the User Interface (UI) and + prevented the mapping from being created. The issue has been resolved, and you can now create DNS mappings for the + System PCG without any issues. + +- Resolved an issue where complex pack presets would not get injected into the cluster profile layer's YAML file. + ## April 14, 2024 - Release 4.3.0 - 4.3.6 This release contains several new exciting Technical Preview features, including the Edge Local UI and Cluster Profile @@ -139,8 +150,8 @@ the following sections for a complete list of features, improvements, and known #### Breaking Changes - Edge hosts now require a minimum storage capacity of 100 GB. The previous minimum storage capacity was 60 GB. Refer to - the [Minimum Device Requirements](../clusters/edge/architecture.md#minimum-device-requirements) page to learn more - about the minimum requirements for Edge hosts. + the [Minimum Device Requirements](../clusters/edge/hardware-requirements.md) page to learn more about the minimum + requirements for Edge hosts. #### Features From 91c4c3c19f64cf8259bc3f1b2ea16ccf838b3ac3 Mon Sep 17 00:00:00 2001 From: Karl Cardenas Date: Wed, 22 May 2024 10:00:36 -0700 Subject: [PATCH 05/31] docs: PLT-1194 VerteX and RHEL (#2867) * docs: PLT-1194 * chore: updated language * chore: updated vertex install CLI video * chore: test netlify drawer * ci: add preview syntax * chore: test netlify trigger * chote: test * chore: more test * chore: test new logic * chore: more test * chore: verify context * chore: test new logic * chore: fix logic * chore: new logic * chore: verify setting took effect * save * chore: save * chore: test update logic * more test * chore: file rename * chore: update * chore: branch name * chore: verify no new curl is made * chore: update * chore: updated * chore: ready for merge * chore: update comment * chore: fix typo --- .github/workflows/clean-up-report.yaml | 17 ++- .github/workflows/release-branch-pr.yaml | 37 +++--- .gitignore | 6 +- README.md | 2 +- .../airgap-install/checklist.md | 8 ++ .../airgap-install/install.md | 55 +++++--- .../install-on-vmware/install.md | 55 +++++--- .../vmware-system-requirements.md | 5 + scripts/netlify.sh | 46 ++++--- scripts/netlify_add_branch.sh | 77 +++++++++++ scripts/netlify_remove_branch.sh | 77 +++++++++++ static/assets/videos/vertex-install.mp4 | Bin 1635575 -> 1675486 bytes static/tape/vertex-install.tape | 122 +++++++++++------- 13 files changed, 379 insertions(+), 128 deletions(-) create mode 100755 scripts/netlify_add_branch.sh create mode 100755 scripts/netlify_remove_branch.sh diff --git a/.github/workflows/clean-up-report.yaml b/.github/workflows/clean-up-report.yaml index a81244318b..4863bf4d9a 100644 --- a/.github/workflows/clean-up-report.yaml +++ b/.github/workflows/clean-up-report.yaml @@ -5,11 +5,26 @@ on: branches-ignore: [master, main, gh-pages] +env: + NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} + NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} + GITHUB_BRANCH: ${{ github.event.ref }} + concurrency: group: ${{ github.event.ref }} cancel-in-progress: true jobs: + update_netlify: + runs-on: ubuntu-latest + steps: + + - name: Checkout GitHub Pages Branch + uses: actions/checkout@v4 + + - name: Remove Branch From Netlify + run: cd scripts && ./netlify_remove_branch.sh + delete_reports: name: Delete Reports runs-on: ubuntu-latest @@ -58,4 +73,4 @@ jobs: echo "Successfully pushed HTML reports to repo." exit 0 fi - done \ No newline at end of file + done diff --git a/.github/workflows/release-branch-pr.yaml b/.github/workflows/release-branch-pr.yaml index bc75d68f76..b48144e6a3 100644 --- a/.github/workflows/release-branch-pr.yaml +++ b/.github/workflows/release-branch-pr.yaml @@ -15,6 +15,7 @@ env: ALGOLIA_ADMIN_KEY: ${{ secrets.DEV_ALGOLIA_ADMIN_KEY }} ALGOLIA_APP_ID: ${{ secrets.DEV_GATSBY_ALGOLIA_APP_ID }} ALGOLIA_SEARCH_KEY: ${{ secrets.DEV_GATSBY_ALGOLIA_SEARCH_KEY }} + GITHUB_BRANCH: ${{ github.ref_name }} concurrency: @@ -36,34 +37,26 @@ jobs: node-version: "20" cache: "npm" + - name: Determine branch name + id: extract_branch + run: | + if [ "${{ github.event_name }}" = "pull_request" ]; then + echo "GITHUB_BRANCH=${{ github.head_ref }}" >> $GITHUB_ENV + else + echo "GITHUB_BRANCH=${{ github.ref_name }}" >> $GITHUB_ENV + fi + - run: npm ci + - name: Update Netlify for Collab Drawer + run: cd scripts && ./netlify_add_branch.sh + - name: Post Netlify progress uses: mshick/add-pr-comment@v2 with: message: | - 🤖 Starting the Netlify preview build for commit ${{ github.sha }}. This may take a few minutes. - refresh-message-position: true + 🤖 Netlify configured to enable preview build for branch: ${{env.GITHUB_BRANCH}} . Subsequent commits will automatically trigger a Netlify build preview. + refresh-message-position: false - run: npm run build - - name: Deploy to Netlify - id: netlify - uses: nwtgck/actions-netlify@v3.0.0 - with: - publish-dir: ./build - deploy-message: 'Manual Netlify deployment from GitHub Actions - ${{ github.sha }}' - enable-pull-request-comment: true - overwrites-pull-request-comment: true - enable-commit-comment: true - - - name: Post Netlify URL - uses: mshick/add-pr-comment@v2 - with: - message: | - 🚀 Netlify preview deployed succesfully for commit ${{ github.sha }}. Click [here](${{steps.netlify.outputs.deploy-url}}) to preview the changes. - message-failure: | - 👎 Uh oh! The Netlify Preview failed to deploy for commit ${{ github.sha }}. Please check the Netlify logs for more information. - refresh-message-position: true - update-only: true - diff --git a/.gitignore b/.gitignore index b53c25652e..607e9544d0 100644 --- a/.gitignore +++ b/.gitignore @@ -61,4 +61,8 @@ screenshots/ tests/screenshot.spec.ts-snapshots/ test-results/ playwright-report/ -artifact.zip \ No newline at end of file +artifact.zip + +# Netlify + +.netlify/ \ No newline at end of file diff --git a/README.md b/README.md index d8aea39fad..589b54706c 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ To contribute, we recommend having the following software installed locally on y - git configured and access to github repository -- Node.js v18 and npm. +- Node.js v20 and npm. - [Vale](https://vale.sh/docs/vale-cli/installation/) diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/checklist.md b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/checklist.md index dc9f282bb6..5c88e31023 100644 --- a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/checklist.md +++ b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/checklist.md @@ -16,6 +16,14 @@ installation. - [ ] Create a vSphere VM and Template folder named `spectro-templates`. +- [ ] You have the met the requirements for the operating system. + + - [Ubuntu Pro](https://ubuntu.com/pro) - you need an Ubuntu Pro subscription token. + + - [Red Hat Linux Enterprise](https://www.redhat.com/en) - you need a Red Hat subscription and a custom RHEL vSphere + template with Kubernetes available in your vSphere environment. To learn how to create the required template, refer + to the [RHEL and PXK](../../../../byoos/usecases/vmware/rhel-pxk.md) guide. + - [ ] Import the Operating System and Kubernetes distribution OVA required for the installation and place the OVA in the `spectro-templates` folder. diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md index be5641097d..ac42da798a 100644 --- a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md +++ b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/airgap-install/install.md @@ -32,7 +32,19 @@ before proceeding with the installation. Refer to the - Palette CLI installed and available. Refer to the Palette CLI [Install](../../../../automation/palette-cli/install-palette-cli.md#download-and-setup) page for guidance. -- An Ubuntu Pro Subscription and token. Ubuntu Pro provides access to FIPS 140-2 certified cryptographic packages. +- You can choose between two Operating Systems (OS) when installing Vertex. Review the requirements for each OS. + + - [Ubuntu Pro](https://ubuntu.com/pro) - you need an Ubuntu Pro subscription token. + + - [Red Hat Linux Enterprise](https://www.redhat.com/en) - you need a Red Hat subscription and a custom RHEL vSphere + template with Kubernetes available in your vSphere environment. To learn how to create the required template, refer + to the [RHEL and PXK](../../../../byoos/usecases/vmware/rhel-pxk.md) guide. + + :::warning + + Do not proceed with the installation until you have the met the OS requirements. + + ::: - Review the required VMware vSphere [permissions](../vmware-system-requirements.md). Ensure you have created the proper custom roles and zone tags. @@ -140,15 +152,26 @@ Use the following steps to install Palette VerteX. 6. At the **Enterprise Cluster Type** prompt, choose **Palette VerteX**. -7. Type `y` to enable Ubuntu Pro, and provide your Ubuntu Pro token when prompted. +7. Select the desired OS you want to use for the installation. Review the table below for more information about each + option. + + | **Option** | **Description** | **Requirements** | + | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | **Ubuntu Pro** | [Ubuntu Pro](https://ubuntu.com/pro) is the default option. It provides access to FIPS 140-2 certified cryptographic packages. | Ubuntu Pro token. | + | **Red Hat Linux Enterprise** | Red Hat Linux Enterprise provides access to Red Hat Enterprise Linux. | Red Hat subscription and a custom RHEL vSphere template with Kubernetes. Review the [RHEL and PXK](../../../../byoos/usecases/vmware/rhel-pxk.md) to learn how to create the required template. | + +8. Depending on your OS selection, you will be prompted to provide the required information. For Ubuntu Pro, you will + need to provide your Ubuntu Pro token. For Red Hat Linux Enterprise, you will need to provide the path to the + vSphere template and specify the version. :::warning - To ensure FIPS compliance, be sure to enter your Ubuntu Pro token. + If you selected Ubuntu, to ensure FIPS compliance, be sure to enter your Ubuntu Pro token. If RHEL is the selected + OS, you will need to provide the path to the vSphere template and specify the version. ::: -8. Specify the URL or IP address of the Spectro Cloud Repository that is provided to you by the airgap setup script. +9. Specify the URL or IP address of the Spectro Cloud Repository that is provided to you by the airgap setup script. Make sure to specify the file path to the CA certificate when prompted. :::info @@ -160,15 +183,15 @@ Use the following steps to install Palette VerteX. ::: -9. Enter the repository credentials. Our support team provides the credentials you need to access the public Spectro +10. Enter the repository credentials. Our support team provides the credentials you need to access the public Spectro Cloud repository. Airgap installations, provide the credentials to your private repository provided to you by the airgap setup script . -10. Choose `VMware vSphere` as the cloud type. This is the default. +11. Choose `VMware vSphere` as the cloud type. This is the default. -11. Type an enterprise cluster name. Your VM instances will use this name as a prefix. +12. Type an enterprise cluster name. Your VM instances will use this name as a prefix. -12. When prompted, enter the information listed in each of the following tables. +13. When prompted, enter the information listed in each of the following tables. #### Environment Configuration @@ -181,7 +204,7 @@ Use the following steps to install Palette VerteX. | **Pod CIDR** | Enter the CIDR pool IP that will be used to assign IP addresses to pods in the EC cluster. The pod IP addresses should be unique and not overlap with any machine IPs in the environment. | | **Service IP Range** | Enter the IP address range that will be used to assign IP addresses to services in the EC cluster. The service IP addresses should be unique and not overlap with any machine IPs in the environment. | -13. Select the OCI registry type and provide the configuration values. Review the following table for more information. +14. Select the OCI registry type and provide the configuration values. Review the following table for more information. If you are using the Palette CLI from inside an [airgap support VM](./vmware-vsphere-airgap-instructions.md), the CLI will automatically detect the airgap environment and prompt you to **Use local, air-gapped Pack Registry?** Type `y` to use the local resources and skip filling in the OCI registry URL and credentials. @@ -225,7 +248,7 @@ Use the following steps to install Palette VerteX. ::: -14. The next set of prompts is for the VMware vSphere account information. Enter the information listed in the following +15. The next set of prompts is for the VMware vSphere account information. Enter the information listed in the following table. #### VMware vSphere Account Information @@ -255,7 +278,7 @@ Use the following steps to install Palette VerteX. | **NTP Servers** | You can provide a list of Network Time Protocol (NTP) servers, such as `pool.ntp.org`. | | **SSH Public Keys** | Provide any public SSH keys to access your Palette VMs. This option opens up your system's default text editor. Vi is the default text editor for most Linux distributions. To review basic vi commands, check out the [vi Commands](https://www.cs.colostate.edu/helpdocs/vi.html) reference. | -15. Specify the IP pool configuration. The placement type can be Static or Dynamic Domain Name Server (DDNS). Choosing +16. Specify the IP pool configuration. The placement type can be Static or Dynamic Domain Name Server (DDNS). Choosing static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DDNS assigns IP addresses using DNS. @@ -270,7 +293,7 @@ Use the following steps to install Palette VerteX. | **Name servers** | Comma-separated list of DNS name server IP addresses. | | **Name server search suffixes** | An optional comma-separated list of DNS search domains. | -16. The last set of prompts are for the vSphere machine and database configuration. Use the following table for +17. The last set of prompts are for the vSphere machine and database configuration. Use the following table for guidance. #### vSphere Machine Configuration @@ -340,7 +363,7 @@ Use the following steps to install Palette VerteX. export KUBECONFIG=/ubuntu/.palette/ec/ec-20231012215923/spectro_mgmt.conf ``` -17. Copy the URL and paste it in your browser's URL field to access the system console. You will be prompted to reset. +18. Copy the URL and paste it in your browser's URL field to access the system console. You will be prompted to reset. :::info @@ -352,17 +375,17 @@ Use the following steps to install Palette VerteX. ![Screenshot of the Palette VerteX system console showing Username and Password fields.](/vertex_installation_install-on-vmware_vertex-system-console.webp) -18. Log in to the System Console using the credentials provided in the Enterprise Cluster Details output. After login, +19. Log in to the System Console using the credentials provided in the Enterprise Cluster Details output. After login, you will be prompted to create a new password. Enter a new password and save your changes. You will be redirected to the Palette VerteX system console. -19. After login, a Summary page is displayed. Palette VerteX is installed with a self-signed SSL certificate. To assign +20. After login, a Summary page is displayed. Palette VerteX is installed with a self-signed SSL certificate. To assign a different SSL certificate you must upload the SSL certificate, SSL certificate key, and SSL certificate authority files to Palette VerteX. You can upload the files using the Palette VerteX system console. Refer to the [Configure HTTPS Encryption](/vertex/system-management/ssl-certificate-management) page for instructions on how to upload the SSL certificate files to Palette VerteX. -20. The last step is to start setting up a tenant. To learn how to create a tenant, check out the +21. The last step is to start setting up a tenant. To learn how to create a tenant, check out the [Tenant Management](../../../system-management/tenant-management.md) guide. ![Screenshot of the Summary page showing where to click Go to Tenant Management button.](/vertex_installation_install-on-vmware_goto-tenant-management.webp) diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md index f7ef33b1b4..c074c9d75b 100644 --- a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md +++ b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/install.md @@ -24,7 +24,19 @@ Palette VerteX will be deployed. - Palette CLI installed and available. Refer to the Palette CLI [Install](../../../automation/palette-cli/install-palette-cli.md#download-and-setup) page for guidance. -- An Ubuntu Pro Subscription and token. Ubuntu Pro provides access to FIPS 140-2 certified cryptographic packages. +- You can choose between two Operating Systems (OS) when installing Vertex. Review the requirements for each OS. + + - [Ubuntu Pro](https://ubuntu.com/pro) - you need an Ubuntu Pro subscription token. + + - [Red Hat Linux Enterprise](https://www.redhat.com/en) - you need a Red Hat subscription and a custom RHEL vSphere + template with Kubernetes available in your vSphere environment. To learn how to create the required template, refer + to the [RHEL and PXK](../../../byoos/usecases/vmware/rhel-pxk.md) guide. + + :::warning + + Do not proceed with the installation until you have the met the OS requirements. + + ::: - Review the required VMware vSphere [permissions](vmware-system-requirements.md). Ensure you have created the proper custom roles and zone tags. @@ -132,25 +144,36 @@ Use the following steps to install Palette VerteX. 6. At the **Enterprise Cluster Type** prompt, choose **Palette VerteX**. -7. Type `y` to enable Ubuntu Pro, and provide your Ubuntu Pro token when prompted. +7. Select the desired OS you want to use for the installation. Review the table below for more information about each + option. + + | **Option** | **Description** | **Requirements** | + | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | **Ubuntu Pro** | [Ubuntu Pro](https://ubuntu.com/pro) is the default option. It provides access to FIPS 140-2 certified cryptographic packages. | Ubuntu Pro token. | + | **Red Hat Linux Enterprise** | Red Hat Linux Enterprise provides access to Red Hat Enterprise Linux. | Red Hat subscription and a custom RHEL vSphere template with Kubernetes. Review the [RHEL and PXK](../../../byoos/usecases/vmware/rhel-pxk.md) to learn how to create the required template. | + +8. Depending on your OS selection, you will be prompted to provide the required information. For Ubuntu Pro, you will + need to provide your Ubuntu Pro token. For Red Hat Linux Enterprise, you will need to provide the path to the + vSphere template and specify the version. :::warning - To ensure FIPS compliance, be sure to enter your Ubuntu Pro token. + If you selected Ubuntu, to ensure FIPS compliance, be sure to enter your Ubuntu Pro token. If RHEL is the selected + OS, you will need to provide the path to the vSphere template and specify the version. ::: -8. The Spectro Cloud repository URL is `https://saas-repo-fips.console.spectrocloud.com`. +9. The Spectro Cloud repository URL is `https://saas-repo-fips.console.spectrocloud.com`. -9. Enter the repository credentials. Our support team provides the credentials you need to access the public Spectro +10. Enter the repository credentials. Our support team provides the credentials you need to access the public Spectro Cloud repository. Airgap installations, provide the credentials to your private repository provided to you by the airgap setup script . -10. Choose `VMware vSphere` as the cloud type. This is the default. +11. Choose `VMware vSphere` as the cloud type. This is the default. -11. Type an enterprise cluster name. Your VM instances will use this name as a prefix. +12. Type an enterprise cluster name. Your VM instances will use this name as a prefix. -12. When prompted, enter the information listed in each of the following tables. +13. When prompted, enter the information listed in each of the following tables. #### Environment Configuration @@ -163,9 +186,9 @@ Use the following steps to install Palette VerteX. | **Pod CIDR** | Enter the CIDR pool IP that will be used to assign IP addresses to pods in the EC cluster. The pod IP addresses should be unique and not overlap with any machine IPs in the environment. | | **Service IP Range** | Enter the IP address range that will be used to assign IP addresses to services in the EC cluster. The service IP addresses should be unique and not overlap with any machine IPs in the environment. | -13. Select `y` to use the Spectro Cloud FIPS repository and proceed to the next step. +14. Select `y` to use the Spectro Cloud FIPS repository and proceed to the next step. -14. The next set of prompts is for the VMware vSphere account information. Enter the information listed in the following +15. The next set of prompts is for the VMware vSphere account information. Enter the information listed in the following table. #### VMware vSphere Account Information @@ -195,7 +218,7 @@ Use the following steps to install Palette VerteX. | **NTP Servers** | You can provide a list of Network Time Protocol (NTP) servers, such as `pool.ntp.org`. | | **SSH Public Keys** | Provide any public SSH keys to access your Palette VMs. This option opens up your system's default text editor. Vi is the default text editor for most Linux distributions. To review basic vi commands, check out the [vi Commands](https://www.cs.colostate.edu/helpdocs/vi.html) reference. | -15. Specify the IP pool configuration. The placement type can be Static or Dynamic Domain Name Server (DDNS). Choosing +16. Specify the IP pool configuration. The placement type can be Static or Dynamic Domain Name Server (DDNS). Choosing static placement creates an IP pool from which VMs are assigned IP addresses. Choosing DDNS assigns IP addresses using DNS. @@ -210,7 +233,7 @@ Use the following steps to install Palette VerteX. | **Name servers** | Comma-separated list of DNS name server IP addresses. | | **Name server search suffixes** | An optional comma-separated list of DNS search domains. | -16. The last set of prompts are for the vSphere machine and database configuration. Use the following table for +17. The last set of prompts are for the vSphere machine and database configuration. Use the following table for guidance. #### vSphere Machine Configuration @@ -280,7 +303,7 @@ Use the following steps to install Palette VerteX. export KUBECONFIG=/ubuntu/.palette/ec/ec-20231012215923/spectro_mgmt.conf ``` -17. Copy the URL and paste it in your browser's URL field to access the system console. You will be prompted to reset. +18. Copy the URL and paste it in your browser's URL field to access the system console. You will be prompted to reset. :::info @@ -292,17 +315,17 @@ Use the following steps to install Palette VerteX. ![Screenshot of the Palette VerteX system console showing Username and Password fields.](/vertex_installation_install-on-vmware_vertex-system-console.webp) -18. Log in to the System Console using the credentials provided in the Enterprise Cluster Details output. After login, +19. Log in to the System Console using the credentials provided in the Enterprise Cluster Details output. After login, you will be prompted to create a new password. Enter a new password and save your changes. You will be redirected to the Palette VerteX system console. -19. After login, a Summary page is displayed. Palette VerteX is installed with a self-signed SSL certificate. To assign +20. After login, a Summary page is displayed. Palette VerteX is installed with a self-signed SSL certificate. To assign a different SSL certificate you must upload the SSL certificate, SSL certificate key, and SSL certificate authority files to Palette VerteX. You can upload the files using the Palette VerteX system console. Refer to the [Configure HTTPS Encryption](/vertex/system-management/ssl-certificate-management) page for instructions on how to upload the SSL certificate files to Palette VerteX. -20. The last step is to start setting up a tenant. To learn how to create a tenant, check out the +21. The last step is to start setting up a tenant. To learn how to create a tenant, check out the [Tenant Management](../../system-management/tenant-management.md) guide. ![Screenshot of the Summary page showing where to click Go to Tenant Management button.](/vertex_installation_install-on-vmware_goto-tenant-management.webp) diff --git a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/vmware-system-requirements.md b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/vmware-system-requirements.md index c9b10ed511..d781704f4c 100644 --- a/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/vmware-system-requirements.md +++ b/docs/docs-content/vertex/install-palette-vertex/install-on-vmware/vmware-system-requirements.md @@ -23,6 +23,11 @@ Start by reviewing the required action items below: 3. Create node zones and regions for your Kubernetes clusters. Refer to the [Zone Tagging](#zone-tagging) section to ensure that the required tags are created in vSphere to ensure proper resource allocation across fault domains. +4. If you are deploying VerteX with Red Hat Enterprise Linux (RHEL). Ensure you create a custom image containing your + RHEL subscription credentials and the desired Kubernetes version. This image template must be uploaded to the vSphere + `spectro-templates` folder. Instructions for creating the custom RHEL image with Kubernetes are available in the + [RHEL and PXK](../../../byoos/usecases/vmware/rhel-pxk.md) guide. + :::info The permissions listed in this page are also needed for deploying a Private Cloud Gateway (PCG) and workload cluster in diff --git a/scripts/netlify.sh b/scripts/netlify.sh index 15f0922824..966348b85a 100755 --- a/scripts/netlify.sh +++ b/scripts/netlify.sh @@ -1,12 +1,15 @@ #!/bin/bash -# List of branches to NOT create a Netlify preview -# Master branch does not need a preview -# Release branches get a preview through docs-latest.spectrocloud.com +############################################ +# This script checks if a Netlify context is for branch-deploy. +# Netlify branch-deploy contexts are only allowed for branches that match version-*. This script is used in the Netlify build settings to determine if a preview should be created. +# This script is created to prevent both a build-preview and a branch-deploy preview from being created for the same branch at the same time. +# In the CI/CD pipeline, the scripts netlify_add_branch.sh and netlify_remove_branch.sh are used to manage the allowed branches list in the Netlify build settings. +# The allowed branches list is used to determine which branches are allowed to create a Netlify preview for the purpose on enabling the Netlify Collab drawer. +# By default, only deploy previews targeting the production branch are allowed, unless manually specified in the Netlify site settings. The scripts netlify_add_branch.sh and netlify_remove_branch.sh handle this responsiblity. - -# List of branches to NOT create an automatic Netlify preview. This also includes branch-deploy previews. -disallowed_branches=("master" "release-*") +target_branch=$1 +context=$CONTEXT # Get current branch name current_branch=$(git branch --show-current) @@ -14,25 +17,26 @@ current_branch=$(git branch --show-current) # Use HEAD if current_branch is empty [ -z "$current_branch" ] && current_branch="$HEAD" -echo "Branch name: $current_branch" +echo "Current branch name: $current_branch" +echo "Context: $context" -# Initialize not_allowed flag -not_allowed=0 +# Initialize allowed flag +allowed=1 -# Compare current_branch against disallowed list -for disallowed in "${disallowed_branches[@]}" -do - if [[ "$current_branch" == $disallowed ]]; then - not_allowed=1 - break +# Check if context is branch-deploy and current branch matches version-* +if [[ "$context" == "branch-deploy" ]]; then + if [[ "$current_branch" == version-* ]]; then + allowed=1 + else + allowed=0 fi -done +fi -# Exit based on not_allowed flag -if [ $not_allowed -eq 1 ]; then - echo "Not allowed to create a Netlify preview" - exit 0 -else +# Exit based on allowed flag +if [ $allowed -eq 1 ]; then echo "Allowed to create a Netlify preview" exit 1 +else + echo "Not allowed to create a Netlify preview" + exit 0 fi diff --git a/scripts/netlify_add_branch.sh b/scripts/netlify_add_branch.sh new file mode 100755 index 0000000000..5bdd17c30d --- /dev/null +++ b/scripts/netlify_add_branch.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +# Function to handle errors +handle_error() { + echo "Error: $1" + exit 1 +} + +# Check if NETLIFY_SITE_ID is set +if [ -z "$NETLIFY_SITE_ID" ]; then + handle_error "NETLIFY_SITE_ID is not set." +fi + +# Check if NETLIFY_AUTH_TOKEN is set +if [ -z "$NETLIFY_AUTH_TOKEN" ]; then + handle_error "NETLIFY_AUTH_TOKEN is not set." +fi + +# Check if GITHUB_BRANCH is set +if [ -z "$GITHUB_BRANCH" ]; then + handle_error "GITHUB_BRANCH is not set." +fi + +# Extract the allowed branches list +echo "Fetching allowed branches for site $NETLIFY_SITE_ID..." +response=$(curl --location --write-out "HTTPSTATUS:%{http_code}" --silent --output /tmp/curl_response \ + "https://api.netlify.com/api/v1/sites/$NETLIFY_SITE_ID" \ + --header "Content-Type: application/json" \ + --header "Authorization: Bearer $NETLIFY_AUTH_TOKEN") + +http_code=$(grep -o "HTTPSTATUS:[0-9]*" <<< "$response" | cut -d: -f2) +content=$(sed -e "s/HTTPSTATUS:[0-9]*$//" /tmp/curl_response) + +if [ "$http_code" -ne 200 ]; then + handle_error "Failed to fetch allowed branches. HTTP status code: $http_code" +fi + +allowed_branches=$(echo "$content" | jq '.build_settings.allowed_branches') + +if [ -z "$allowed_branches" ]; then + handle_error "Allowed branches list is empty." +fi + +echo "Current allowed branches: $allowed_branches" + +# Check if the current GitHub branch is already in the allowed branches list +if echo "$allowed_branches" | jq -e ". | index(\"$GITHUB_BRANCH\")" > /dev/null; then + echo "The branch $GITHUB_BRANCH is already in the allowed branches list." + exit 0 +fi + +# Append the current GitHub branch to the allowed branches list +allowed_branches=$(echo "$allowed_branches" | jq --arg branch "$GITHUB_BRANCH" '. + [$branch]') || handle_error "Could not append the branch to the allowed branches." + +echo "Updated allowed branches: $allowed_branches" + +# Update the build settings using the updated allowed branches +echo "Updating build settings for site $NETLIFY_SITE_ID..." +response=$(curl --location --write-out "HTTPSTATUS:%{http_code}" --silent --output /tmp/curl_response \ + --request PATCH "https://api.netlify.com/api/v1/sites/$NETLIFY_SITE_ID" \ + --header "Content-Type: application/json" \ + --header "Authorization: Bearer $NETLIFY_AUTH_TOKEN" \ + --data "{ + \"build_settings\": { + \"branch\": \"master\", + \"allowed_branches\": $allowed_branches + } + }") + +http_code=$(grep -o "HTTPSTATUS:[0-9]*" <<< "$response" | cut -d: -f2) +content=$(sed -e "s/HTTPSTATUS:[0-9]*$//" /tmp/curl_response) + +if [ "$http_code" -ne 200 ]; then + handle_error "Failed to update Netlify settings. HTTP status code: $http_code" +fi + +echo "Netlify logic completed successfully." diff --git a/scripts/netlify_remove_branch.sh b/scripts/netlify_remove_branch.sh new file mode 100755 index 0000000000..823fae45a7 --- /dev/null +++ b/scripts/netlify_remove_branch.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +# Function to handle errors +handle_error() { + echo "Error: $1" + exit 1 +} + +# Check if NETLIFY_SITE_ID is set +if [ -z "$NETLIFY_SITE_ID" ]; then + handle_error "NETLIFY_SITE_ID is not set." +fi + +# Check if NETLIFY_AUTH_TOKEN is set +if [ -z "$NETLIFY_AUTH_TOKEN" ]; then + handle_error "NETLIFY_AUTH_TOKEN is not set." +fi + +# Check if GITHUB_BRANCH is set +if [ -z "$GITHUB_BRANCH" ]; then + handle_error "GITHUB_BRANCH is not set." +fi + +# Extract the allowed branches list +echo "Fetching allowed branches for site $NETLIFY_SITE_ID..." +response=$(curl --location --write-out "HTTPSTATUS:%{http_code}" --silent --output /tmp/curl_response \ + "https://api.netlify.com/api/v1/sites/$NETLIFY_SITE_ID" \ + --header "Content-Type: application/json" \ + --header "Authorization: Bearer $NETLIFY_AUTH_TOKEN") + +http_code=$(grep -o "HTTPSTATUS:[0-9]*" <<< "$response" | cut -d: -f2) +content=$(sed -e "s/HTTPSTATUS:[0-9]*$//" /tmp/curl_response) + +if [ "$http_code" -ne 200 ]; then + handle_error "Failed to fetch allowed branches. HTTP status code: $http_code" +fi + +allowed_branches=$(echo "$content" | jq '.build_settings.allowed_branches') + +if [ -z "$allowed_branches" ]; then + handle_error "Allowed branches list is empty." +fi + +echo "Current allowed branches: $allowed_branches" + +# Check if the current GitHub branch is in the allowed branches list +if ! echo "$allowed_branches" | jq -e ". | index(\"$GITHUB_BRANCH\")" > /dev/null; then + echo "The branch $GITHUB_BRANCH is not in the allowed branches list." + exit 0 +fi + +# Remove the current GitHub branch from the allowed branches list +allowed_branches=$(echo "$allowed_branches" | jq --arg branch "$GITHUB_BRANCH" 'del(.[] | select(. == $branch))') || handle_error "Could not remove the branch from the allowed branches." + +echo "Updated allowed branches: $allowed_branches" + +# Update the build settings using the updated allowed branches +echo "Updating build settings for site $NETLIFY_SITE_ID..." +response=$(curl --location --write-out "HTTPSTATUS:%{http_code}" --silent --output /tmp/curl_response \ + --request PATCH "https://api.netlify.com/api/v1/sites/$NETLIFY_SITE_ID" \ + --header "Content-Type: application/json" \ + --header "Authorization: Bearer $NETLIFY_AUTH_TOKEN" \ + --data "{ + \"build_settings\": { + \"branch\": \"master\", + \"allowed_branches\": $allowed_branches + } + }") + +http_code=$(grep -o "HTTPSTATUS:[0-9]*" <<< "$response" | cut -d: -f2) +content=$(sed -e "s/HTTPSTATUS:[0-9]*$//" /tmp/curl_response) + +if [ "$http_code" -ne 200 ]; then + handle_error "Failed to update Netlify settings. HTTP status code: $http_code" +fi + +echo "Netlify logic updated successfully." diff --git a/static/assets/videos/vertex-install.mp4 b/static/assets/videos/vertex-install.mp4 index ad6046afce11f4ff7fa525df21622027b4a869e8..490482150628d29bd1bebe798146dd90db0cfee8 100644 GIT binary patch literal 1675486 zcmeFYWmsHY(l*+-yIXJw?(R--3GVLh?ryI}!s#SOC+SO1E004+gojvR=oa}4>08qfsci=CxfvXXdjXf(9004kCbu=*n zV6Twa7#lbPd8#2HUSBJg#rE5F79^WK(tameAU!#CXJ%(5q9Zc0b2K4h0xlg{m>4;U zSeQ(hxJddU^o+nwz!xGL3wIM^y`K`9fIIXY4Q$O!_?Xy5vYQJv8SD_2_G{PEfW)wsezNTp1qTmh5b*C-vS)$_3TVd zolKnh=$MI|%^iU|fP$EbtnKWq49tO7djGh|Oyp#3VFXm>A2%3@Y#o1r7+KgDIR8|{ z!q(Zu(b@pW1iWu(?c!+Qp=V@gV{hOLyfy;*$l1}r!WJk3$mnSBlgHH2z{bQ0=q*D% zdk^5+!kCX4xHd30u>Wa>p`M|IfzwYA3rCY*hPjzon3+2p0%>;kCboKJcJ@H(@0<3( ztyU%;K-qlEY>a=FdNvlez)K=0BNJN_BNt~rR>q%dIvV`+siTRLIdHq9k={Se{YiH; z;xlqIC9*LDI`*eozzaTRU^Ivvej3BaNY4&j+W!>%>)pVekDUv6!^zpio{yEt!X6kU zU`7Cg2$W^u08D_N;RN^t0ASQ6;lTi&*O%LHLgrx&Udwq$l-)}DN{D#MzSu(Bzocx?2G(bjc` z-{w2xyU{kLi6vBW#3Qru1gMf(o^TgKkV0EsbRMqSE*E(!3EMpO6Xv0!^BuIboE)Z3 z7liX(+eTK-Ghs=EZR&YayY#)HQK8&f62d+VJw4wZ+3esn;m-fD0w#OrcpgI3;BeVm zCgRJ%`Z;)dxhjE6#b`73KnUWt*pRPvnC`fkCE`G=kN zmnosJj)u!%R4w|dtk0pA+IS^&c3iULWwEy!03*$XJIsdC?9I!(wGHcYqOIDN9ve+oSnBfWS^YD*Bx!FeU|4mQc`MBWoceAF*dwI2`yHX+ZG#O~S*PrGCz(8=e$AVt@bY}q)0}Y$W zX>8TERuaOxBGRA;x^r_lwi;hQ>x54h$PBDYg08o3b*=Xv_3N!uu2I^%6hrv1?AV!C zLn=WqG2tE)kW{<%XF$1Bx^aAFIu)TD9>oOzYRUN)oL%?)AsmwWLfg7MzfH3c@3BG- zrZM=qPZ`vS9Y>iU4mRr34IKqESmXT#7njM(T!SghQ`(6J7l!LbcOb6-+1=J8*4jQ* zUI5Sn0-@{>F%(*wpS}S@2INZx*9)zE_W$Jx1Pveq&^5)sJ@Ef}2Lb{}=nzUT1KMt# zCW9`+@ekv%MF#!fvbwW}XEfTHVCVn*~Qc^Ye!!uT5U=Xj- z%pw8P>EJxfW!l#k#KY%}OR7&E(?`HtdiyS<^?uyLnAuPEH!*!}Og-zK5O?U&6J@6;G$bh`crT1z^)MY@zucKYH6Ugyd zD1GGJ2CR|^BXP%{_@dZikf{J{;?LOF{XVWPGof>6CA3OE+a-cJQ$v)FFmzpTlkd05 zk8(E$Wx$^70V)03${M48l>Er}1)Qk(j6=Di8%I=h- z(cP8oczr6<|D$#1pP(LyvC8}kD(Dj+Uz)YLkMtA-PsHtiJ=S&68xnNqz{muBb34PFHQ#E zt?&}U;L}ovM@B$ixNPmV_`wBnwH1!u{ZZC^mBQGnZ*CuS*eHI#Q)@XJjDUbAh}z=Q z%n&GD$>tVRfx3CZ6j2!HiGw;eBOgR_?r?s_{rAes>(2!SMQQW4Ad2%v*h=kz%aSNa zLG4OS0xc1TC*m}t;*VrmIf?YOf{m+P;Nd|@(Z4kW1FZn6NGy~i|Hq>U{$N$8lv8fC z#!vKY-hbSVJpp9G1S#O##7k*Jy2(o$l6EG?fD4Rf4M;=(_9$gWH|4bOq@71`rzv*rreuTykfk*w}^T*OU zn1?+)@bX9jIUC{jx%HdmxpON@Sfqe3H3 z>3z4_5yW14NW6U>|3AD_0Yrv<&+Hs1D)=WWfZ_-mb?R{k|t{Xp%OTvO`=XH)VW7^PVCnp#^&? zh+*;}gCP1IWLyaSa!ttiloK$;(hwU?J$F{GiJhyH_SW3pOxiD0ADx(6bOZDR(%;7( zY3aruy-}VSdx)$!gi5FRLJn8Gv+RWX&98OLm(G>;TArv$GJY^fMdId%OrZV=k33hO z7*KTrkeu7!Ms22-bDVl>ic$>#Gwj#7^yOzsxd>%E{0^8>Psd9GwLbvhqXF~m?k~Qw zn5_ZT(I289*m2#ir^cfIP^D%~f%mHsz_SWl7D+0AqVQ2}Z(!gON3|eEST+&7`(dUr zI5I%Z5=sRVEM8ICw$>*V-u5v??p>2&5NGx`2gX0Z7{CQkvuvDSnt_4#0^_mPJEUc> z)cKnOrs^^Q%H4)?nZgSWX)&xy7DOW;Q`)L<+ zJ!fXCckesN5tJN^qyW;e?}<&`(Hx&Ml~%52V78wu9~X-x3^P;$_@e!`$n#x5%kpgd zBsVOAn9Jfryy*2niJf6q6VNxdVufZ=xA9Y#7B#J z!MBR!(%VnSxLqOqc9nHWf4qnN^OG^qds@Hy4A9SR;#EP=y2@G1e;CMq7AlZI=Z|}H zFHgNJC5rTebp9})o&gyOh0=w8C-px&4#3H?!@QC^h~Lwhj(<;rQ5EJbSyYeh%{9{Ivj<}JLU(rujkWk{&uq61 z8GChX@|q9^@X2?Z+(BN=#a|iuZ`v%XpLjZn&OAg}Kso z3wlmrpt(U@!3nYUJZ#+fu;Ydce!}>3)8aT{ZR%U6=sT&PF;Jx1>e1qbv6P&=`&<~4 zQ!@LYY@KmBo#@+T&1cTvCKdeAIW~(#5jT(OvirB*kUyKIX`%FzKL_pFZ>62{9Q}!2 zWwRpBX7j)8y*{DVybXHW(200Z^WqY-T6vW$Yx)@x)ADRzk-of<@hEgtWv)*ceDZ4idn+|f>N zz-t7e$1g`LzI&+=M(IdCNBFKTUf^EldTbV1*W4;u0l5u^*TcLoMOi~Qc0)Umr1f5K zr^$62@V!X%#;_7$gbX6aw$uuBI7>NV5L12D;8w!Ru$p7!%R1G&1opP?@F^r6zV2$3 znH6ss__4A--9*_{M=6DI?DLSuK~ z9#?mTJJPq8E#F;cRw_enEphY1D2FFh&gq+VYA)2(`tU;DUEZjbC&dLBFB8B|$EEqE zv-q&k|0So5N!>Ez$W98iTb$A583|K+)CFt@9-scT>lD$2lOI>N_*&c51++y7GhMfE z1MV%w0x2VC`|pwj2Ocv3KA{{MU>tu}Z53L4P9{JuCFm@dZFQ5mc99B94$JJkb@GS> zydAW5t7xKQMa#JGp>_S2z3}Eh0l){B)SrsBd>HkW8AaRuSokO4A^t!HLXaGpKmM}P z^$(je`=RHK)1klon+N0_@Z?w#%251s#JT;cY$5^E^?Ly92XH<7*}j9PC`5&kO7WbN zC9RScX5^Zf1E^6=@i-j0*ACqxyfTS4{F>sg!wHD@aFBlHeW@HUs(ytCR{ixskc$x>DEO@5|v zEG!xhIXG4J6iI#**I>LU!#66rD@wbi6H-HOltYI=PH|U#xTI-MoT3dS-QwtNB*d;J zin=?H`f7+ShC->&lqbD9Kc^psfuSN4AR7|hs{~oajq=6{_l2}3LevXt*`R-=A&bjP zp)WpnI7@3VM*UP;ExeUlS_@^hKH!``?t|o1AA%v0!b@%m)(End28Br(h|DU+9`RO& zc3zbf6D}cf>I150&Ucp@@1fyEe(`zXE^I|(f;$f7-GnTuTla|(?VVSpSYQDFDGq?ExW4_q8JzTVUUAkPn6a)-~$q`0x zx@9{@W~UqK^c&25^5HI%dM$^9K*e4p^t5q##|^Hk#-qmW($>mg5EY#QzdwL9*8L{G zGvheYq@@yUyDX%)DDTJ#>C<=bN1om4Hjl{(F4!@)7W8WRNS*djJ`|py6Yb0VWBO~n zl?(L|Dx`X@5kL2(P!-Qhtcvn(hwrY(j!ViYw|rJjn)c6}Z|2l)J6**gUj`BA{UBnM zKFJyQpMXgW|*!k1u%lbO#y59m;fED)K<5oP@bMo#sQ!6-di^yszB4*VvW!xInIytfoddES3b&JiU5sU@fQI>3tsYxY(s`jSY( zm3E+fNBRCX_1iujae9kk)Wg9=O|DMOfnaLOv7_0@pkB3k&6Zf|pg?3HSV;**gdFv0 z`tZ1*ri~#DPssZYVUMQ%O%(=wAIH%db3%Y>%?90(iJ^D|;S|?NFw=KI{&)8I;Wryh#dN6=xtEE&t}(K*#st0f^6=u%kT9i&b>F5Xrsxn~ z-E{EmN~CQK#44=vc@wOl#lIvN-L8LuduOiF9>68+1+mJY*F$4aP=4uQHQN8Yt-tNm z>zu>n4f*IJ?pd5PcW>c~|73yvrP*poL5;b~#on1RMc16W`$Euq`W;>qNJb^&+qK-a zK5x}$gov&KK!C{uQXFW&$9Cuts<@eqc|tLw5BcJ#OFZgLedu{P!+PI4kLJM;AEEI# zbDAAfEhHc@1)QZ%KRs)?q+wE zZaA4yC#6xnEXVr|Jh|vYTw`EBNFpJhV&7d0JK^X_>1%zIu-AJ2e5$2ib?q{}&&BEl zzDg9e^gRDD?yWPnVpDsw#p&y6n%m3I*xX+~TJml6Yu1V4JCo2?D)&Up8VRU1sZk{+_1eb#-rV0W%@apX; zOUg%Kl(vs^6u&9$C(`ZGMU8^PJ@@V<(I9hXVL!LMa7NFQm@H`=h@FZ)MtBbBh17jv z#44&->~|baom=E;&ql#HvR|ASPzbWJK`?=?h9b>;e3g!#1T$y;GP7zG%3#XyNsXr> zS_y0D5aGJ(;hTFHo;G2D6v@`}e!S3S)mP0Xe0mq^B-RA&E}t>d)elq`I%vH@b?7U0OoP$-W&JA@b(uMd3>vM*kYX3j&0HZSj#2u6LN zL$F+%vW#VS$v(co>@eDSGH2G5l?B`pLj;`rr1P|XhF$k3rWABj#EKYzPdD$}&f?v< z(m;E;8KruW-J@&7Jo!M0(z_zV_cFErCTw_OuTCXlG2j4VKQPjn99j0Q0KHqP(P~>E z(SvaiS&#A$=RSBIr*uruIEq8NE|Xf52a&Tk8*0O86Y3|>o0-W!IB+I7j;r)mlbXh) zaT4h7=VumaO@`f^_>~SC{b*rG#1bDjZ)(>l+!4yzWTGs)1Gfs|$LR*U>yvyt&0p6Z zdYZ1??{%+Wh0lfQ8VvLV2KP&z(2se-pbEo6w3?^Avr-kcrJ{q(x{{2S7UNL**mLEw zN*qSM0LzjjYPYV0?!*YipTDoJF0`g*_Y@=1-@o-N092 zEZ|<(I)#?xfkQmlim{=&N74S{%=dzD$}b8|fu~(?x*IFTZHJ?(vij2;RUoGx<~Jv! zi1@?}+S;D54Pp-y30iY};f2^!YmRI3ZF(n|s{VKCv^Zm4zDf869~j$RcBm81uyUA2 zG{!jJ(}F5R2U^ECLg|accyQ9Ddh^M{>4_dc4Y#AmLKUH?UkL-S+%_7g(&xkXl@4AjBko&Dhl{&Z3KCr~q-uy->BEweDOcIEHE-B6RotFqz;jX0Aq zE|n}v)f5{dzv-+D%=@6+Eqsq^F5HG3AbQL88hwc&!l1vB71}UK(4%mJ{iB~frKk@p zey8BUL6XBl3ab~+o3P}AAkDI&MwHs-FfViiCL6q#^5!C=`S*-eiry{6LM+cZ0muYz zu!ic~Mg<1~(>nBI1^H9m0oO$6oOocN?R$m67Yxko107}c z2)_q?LV-7LE1u*MTUyY*39_bX0iq1%9OVGo>HNGXP9rud)4>7nxp4wREe9cWqnVus z-wK9qItAz=M4#H{Xv$9%B~SL;hg!-ph0r`B)63P3edbEx4Y}O$f^tZ`zjcNPK>J1< zmai*!w071MB0wg;XMk9JklmcpSu=4JkkYUahjy`NriOieWQ>SoKeK?0THNQUq!{OX zhqdz5YGl9OVncj3qFyZ>tgjKofAR@sBJ%{(e9l z1f)Q4wpA?Am%AImC;MSN6Re2@Z?4zq-3^1E%UXII&H8r#c+pfiaam-UCLFPXlTX0+ z_@I?>J@|+{_p(K<(XUg)?1y?O5b#>7a(=XORyH~`$D?hH^-}68j#}uG=Uwg_^VHm^ zB_Kld1XwTWWsFfgOBTC}q~XQ6s%H@ojj%H`%Xl_vvOHaa2T@-eYuc!n=q=@7=g51Y zA0vr8ZY%_wi}e6ob+J#5c}FHlZneIHaS-+6k&zFWuy7=~OQ08 zBRERMM!zX&a0I_}Q-@rBqrndT`iXgC3lQ&u5NYvJ8CjP8X8CJ7Asy`WQL2LFZK|&; zn2d(S0JyT-9NSyv@}{!C{QI^)f(`g zPWW#Hm>E@ntR!XwBPpB{8*g*SIng*~%G4g7c%>G$cS0nWtXfS;C5wCOFhf@qM!FNF zn4s}BMw+`5ScD0o)yk}%rm|a+``QKxGkGAhA^U;$BXCM1U5+pPPV?FdTF2fw+4fXO zs4@E`^0E~rG$A}jZ>!Kcx#?)heX)blmNc*S5D`ork{6_OHC3*U-`i-?yIW`|c)7Mo z?3l^Vli=~jtlAHkmG0eD&9Vq4s4o_`YB3WHE+RS1Tej>750Uz~4;4Unr0SU)z*H8M zEUox#;Dtx%p?IVaqkw+>pK}d0`0uRN0}O zC%g&SEpdZ{W&v)WBsmd=9n6j?E~bXyq#Lt_>}FVNUs9s3i)j)`SG*}Hu`A^+G1aa? zIsT)=KOiUFkLO*-yjBEjghyfYm&gHS#E`T6Q70}`xvsivLbjwVj>Wq1-rmHn3|8T< zpRYR6IX-EVz00Njq;roVNh7KQM|%@ON(;F+zgYL*-;@E|%et@>Mn((C?^E7NXv_|Q2%jIW1(^aM(mPnA z#(nL~`ps9?yallUcs%P_C$sma>&;u~-QGkL8~1r!u5|Q9({x{@T0fDWj@@M&x^U9h z#C=-SV!(Is-5e1+ZXzYFml-^g*1KUzG9mC$-QZZ3 zJHNew?sMJ%3v*q*kwo9B=QaGO00x^t!;Gy_bl+|bSdP6$ynDdQM0&(@eAXikhTmS= z7Y4Zb3(5O*;zc*3Hackt1Bzu&4yI(E6D{T&^P`=1M^WWtgd!a7N=!B<-~8ksi|s8S zev%mqHk7+nU^L+>(a3?XZDYDunX(Rs6@zFH#mym%QnNVBUzZv=Nk!(k>cKW>ICnis zp7f6ck)TC4v1z?o1Xm>7Zgzq{6Jub3t?}=8sX#)>6D~$~-DJ#`kG&K~e7Re$faSyC zBULU&fQKX%`9OwX8DJf+Y?XxF)TqGQJf29A=pwgbj5iW{0Dh&B>zoDxvwLz{CyLQ7 ztm{2au{gWo{5fy}S(oyP1v~Hkv=7a#_BE7G8h+D-HeV(V{LGLzl$^RzkWMyEghjSK zM(K2)ec__q+xvo#ymj|)jm#7f?s?)JH8~)i%v$(FVqHz_uS80YQSO@Hw=P2GiM_SE zN=#7`T0yr=*ko91O+{!l>&ra8tL-j}>y~8Uuo}I@uHGzEx<1nDbRP~TmpH09;ypx@ zq?4sFfhpneExe6P@RYA8Q(GqVjQ24w2m|R+uaZF#T-K!u_tlPsF?3%%h9FH!3{hc7E(lVxCdEv8M+Q5m4 zkvrW&_ys6px5A`Cd4yL?Pv<1D?t2QQz74g03WnrueKG_1X6ow49$e79b78XSs_fQg znT@C_c^Jc+?HiYi$8$LTCB_Sp(GFH3VsO1wvYMs^mIF%FR`R=KT=wye{=OH-F7|03 zZ!)+Z*}x=rMLI1kI;eKr4MfpXW{C16f?4kp zJfUQ5waw#(BT(PTx=V3iASIhy=Wvy{0pd?qITKwMym*N%IktQh=i8cO(BZoJmF`~? zqz%Lw`r6Gwk0|8~#FqpXB8VeW6-2(HS{rt?NhJ1OwglKK*TaOh9D|oFt44;QIdQA>>-lCJ;6aB!^Kk_X61-f&i{D}#UQWfDnX=YDeo1|gZybW z-XMc0!V!k)fs|uTEZD=9ja_amH*vfu#`|$cygh4<9v|(M*jm@zu9qH3Q27|FwR){f z+cn2j+Ksn~vVOXG^-kgJmSg`s_X$C#4c)+)dIV}KU#&$=EwB6gSUe6qZ1nPw+193F ze1aRSHoe}4s?lc#^0xgE&5Z30ZR*=m;!mp7Z2I0{_fk$s?1-wmG}RXdN@dE8kpr## zTY7p5nD?|kLNj!QdRje=JjL!#JW-4>A+p{g+bUndTT@{RU}z7OPZa!6Ov>=(DajBo zOj4H`G9ofT_~DP#!~a!9u0GZ?1tc_|0k2&Cu`ngl zZ#BfcN;Bk6cyVP5yhRwO9I){`3rFVmRl#hBET?)}48-C+*58!danCoJFoPO-aCE@> zq>=N5PQDbgJsTaEgeqqMP)6iAlC(xT;R1Q@-qx(sxsp!69IAVQDwav-25l!>`)0Ie zt8?kT4W}@Wf^)$vR@p^*YK*%bUSN7@f{c@JwkTG8!tnQQK+7?7^6OT89;Jt`aiz4@ zgDMM<#3tCsYg#^}I8h((0|zUkYp&3?+>3`9whQ#WmB*U#joLb>u2QG)0%(jt%B#<- z)%Wwv%8Bb8zQ`f5ac3droKQbC$y8tVsPH9^GPCGTTzfZsfy(kM_+||9#m6N^orH%v z{$MDv+`a=eZd)}q7E-CsDflx?^vvr5dPc=)z%CBv>S+z`(@3 z5TSj8@i-am@gh{{Q!Hn4ux3O=(xn$}EVNzjFYbI6Phr?6n za?xfk*!^CpOb6Ycy3{WvBoZuZ&lvY)XCcf6pgcFI${8SGQt&g6;e(hH%VmOvK6cVOX=C=SShms8N(1NPW3~YVxBzQ3ibG*@XC) zRgU}JdN*E}%4OAfOx=(X#pY8t1e*r20k|&PXl_lloI8J*AYOc29RZK3S$G&J zObl@nDhZh%4_|1EJY3b831M=X7r{uDh&Hha@o4MfZ-YEwC~!q7Uuq;pWIi3-&*HJX817vpP=7_T*S69*bexWE;L!k!`hotKkRP@8Wy_z`2zwT{Zte&ounCNV&CF zB-j>I={kU`G)fS+*ek~qJ3E>G#}xp&NFl>Ahkixs)&1N~?KnbIx0U6=?p#(t^i&PD zuM5uc_$!^yCGP$V+p^5K4!1_!h$cX97y%J7hjyVQ2a1%FQfGApliQhCsn(E$l!;V5 z^gs)a)4!UHl=&j&jqgmT>!#Y4jW5;OM6wM2I-aS&7OSX@us%hODT*`aB5dlLnUGq! z)pW&fImzIIGE2`ANv3gEoVJyY>qg{Pj86zXLN`yCKHFAQt5q-bS$agNAQSA0Ye>ms z-h&+ip-rtzV%@@J0({#EsQ`s%3;o($u=n8OB`52G{GiLTWc#A6vZns+)QI>Y20{;) z=@*N2EXqS;*6<0(Ay6&biO2pk&ycT!(z>xXg<>wq$(VEgu(pAp`kAgXbQZTm#U2lY z7O&NlBATq*7BMkM;!uSp?PbVD+c-YGZP(AO^uH- zJ6O`xCO%xWD4RA^F>4lRZDucf+I#UPAq=rBPLKKS+vX;n|48%vnWEeTs*@^`+}4?@ zfj4>%f8yx$jX4dx&@xWkWKm%YqwJo0uC9HQJsLG!bjhbdgXlec2U^FjHN$gkbu545 z3Ol-Q49xriiH)LbELek|Mx>(K4INrPd(>RVJlb=H!kDjpm6@)LSdW~eI}8p(Vuos# zpm-KH!B8xZeG_!v#*%WM3l=f+J<4%wc=2@fN|s-&H>1r(8(Al}aE`l&DDBz?qKYYc zeuS@V3AFgY*=w&Y5+?2a#0695*AZ|q4wU_tIXi#Fr3jRCW5!LnsO=f7@CBoe^Kn(| zC-|KT=lwy?YN%u|P{eE+;8ao6?(UH< z%obz?hQ#FiXYS1=^+*K{YoI-DGH@W}n4jqJi95xBe}Bh(fBq1)Gpdl8VUrYXA1Pbd zYhGYGo?QS-XR<1Vhcl|wW=Bz4O#?d{f9)kVxDKy_C@&J@V=cgvtm%|e*5+^chzEh^ zHM}16>M}Y>Y)0C!1^XKe+xE+n9)39IrtF+aiL4}o+rD=v(T=SYYC3p7B?Sh^zEnlov zGL5|7oh1ME5UdeFZ0oOt_YjOoube)qSwTQtP<`*mZ-nyxe5i}31@Huw1Bw`Nd(`jK zBd?vyL2jQ0F*~0MCoBeW5cM(RE1yuH^3yj*1)*Xp|6!s|jG{GaWKSl{gAKj2kat0bz&dm(gC2S&^oYF+Ow<&fDYTSWESrfBF ziA!8V`@afZ*A2IMbnSvr!=a6cZzrV5YSRCZF9`)@BAJP=+F_$({_r?95c&#T%c+A( zeZFuke6+!lBRUU1+>?Z_?mcVEnT&VPcaqXmay2&$c`&|! zmZ@DYvr@vLA-88q_j;rnyC43CcRcf*$r{T+7Wr?aD3m2{1h8EY7Xb>K@M$4qHl6Km zUt=GiHW$B%Jl|M()>EUYUgJv4e*2o&{8)!I2Jo)Kt$Ht;(F$3;yMn0J^186kBOjV4 zhnuT}NjX>nf)yJ~-?Jt?RKS2o7RYkE0V3R&uYR+MF;0^bUen@f4(VY|Ya)?4WO$C3 z6^P%f!kewQD@hj%-?icjV~$}%JJ~9*qIzExs)xk)K)(=iv*oBk=Bn#a`D&iCHjFjp zuQs5jxqkM&Fd>v;SB(_TvN1{y*;1>PPdD zmnPZheTCN`CA~KC0CPQC2jeTd+Ud&Qb8z54zb?Qalw`rZSk+sE#Oqi+}q|JL!}POks0V_=@V{h7PKGwpxt_>V7u<@9p|^Z!S6oce!w9)q}kZ&sBiPgeDZ zS2wkkqc(VzK1wgZf=A%|MvD6_(^O%x0FbEJ6DA-q;rxaA*qrzyABZ#FgonY})fDx5 zs9U~t;P~hGs=8V17<9JwL?wGLt315trNZsb{D-0A_j7mtU%8MK*DFrxJbJsGdck~b zvR3yWl9!AfX{rwQ{C~C)Fz&$21bz$V-x>k7c~7uPjGkYO2GTi@1vp9nmrkIvzg{;7 zW9S!ITL?(T{g-xtw+wui3Hldx1c>r~(-Hu`Ciu6OAlfASmyDpFGI0K-Bk(Rl>FP%Q zNd-v*5`pl4X$t-d|MR^6zi14A@PBIz{vG}=eZk-1|I!-#75=B@K=}XG9suG0)*k#j z{9n3*zr+9KVEHTjAM5{HlK_POTa)ll_@6Rx{-sCw8~k6}gulZ7w*J4i3Isog!vF1w z{ZIIxGJx=Z=@kAB|CeUrukb+4(To0m&_IA0K5#efff-rBS!T_fyPDsuPv90&3U+wB z%4D*5E)vKq5&5ez0lGtLrS*x08+h1wwP zsS9>e|iQ%pMdY+ip>Lwmj0Z%gO@9THqWOUH9@~CP32g$-Hr@4vfZJOhwz@j zx|sLI1C1NPQgVywYn~QmAX7?EZfbfM+Ilak24W108`KZXHmf?a4N48pIRl3Da;&>X zVi-j!5gWs30)$mxFH!K^i74b3Ze8=Hd6BOSg4*LLeGJ~s};xfjV0g7FRnD!x@JcWDLB5TKP@qP~+$+48vyDn@`PZ>JFK2UcF ziK!TCQ_*^u8~Jz;QGW)lx5NYRN>qzznAVg?JyPivCq)hjm^%X;m>mbTh3H~Zp^A4N z;{i6bYAI!lHsGFc#rX_?JBLZ?c6(*ZzRP|i_(gMHkyv##-BvdYDJf32uf0Va!Uc{E zCLoykKG50YRg?mVpHQ@Ddx{i4DBhh&7BttEhNoHM^Y}g;eNtFL*;u{LlkZ&51PsrB z=JFm4*bkUDh6E7SA_#Zk77+}7dx;V-=h^eW&${218?{|aiQagk_wz{)SmQmf2r`}^ zD#ni*!RWc6*JT3)njB!)u49IX(Bjy1&%jN3n&m4;dBb+X)YCOHx&=B=Z|*qea!c>~ zOPxdAWniT^wXIXQ9lK#}kce9D7t4^e<1%Oe^LU@bD3E+Qs4ICPB1Y#~_lNezr4;JPg zScqrd=kz$UBCF z1k`^>ugIjFt$wtRh($Qzvn|&~Qx>tqvLj;bWg zdIf9yRTKxwU?o_RL(sMYD|2vQaI%uh9wa{YPo7ZfKdee9J?`*ecr?gzbmzfqNi+TF zGg8AFUXDvc1C#dKnr;v55cJmRo#I~J(VdH6NDpH@_JG(n4B#=O+wP%JdPL(<5Gd-!9@=ZVKxYc(Tt(dR*7iJYQaI>#^P;0i0Fmpf|BjROx% z4M$4t;zRe*=B>CGPnvS92=}nQ)g|4-Fj*%YALtw!oLd5u7y&oi`tc}sr`LvCXrZ+9 zT>2dwUf?!U6OIQ5tu93bJP!#fDJu!a6~6C!!B)nImci0sMpcpuK`~_?Ruw~Z6-1l4 zs)RZ>s4`>p_?A|6rxWd9VvojL29ZWJYSxE&pbzL&jY<@IA$>K4uFnYU5?9b`Gqtcp zsB<^x_}E!gOTm<-;7}TQNQYD<5I8&-dLKRgBZ(_TnJqE|g-99uITt<$`sTc*ZYi)Y zel6??@}n=$M$9kvk?7O9rvNWG&+&kBfng~;Qtsf{>m4b^lnkb#kd3p1A4{wX= z@%vIR%OGP^i@Pa1T@Vp+EQ2DG4buWo?yYeekIz@4ZaN?IAcwQ7R7kl5e$Ba=H<-RIPe?UEhV z?5u8*)rULi;ca6&MZ)Z&_p!zBo68PxiR80ixxRT{M8#XYb#Z4LmHn_j7t;PDuURU> zQE~X^;bE*VfQ?;c;2x114z_8DA?|o?4j@t=0w#qK+8ir9# zFheTHw@3`*4G1MZf+m)1l`R*Iaz;QUeFzk$kTl*7zOr7`%{obSjfl~}o{DH8r#^Sn zT40NTE8!ODzz4g5ix6D1fmUq%J6=(dnWA?r+M^_6)eNlxRo;_i@>c*A^YuEng?mUSsXop z2sZ(Vu8XrbVS|F*!mQuByc*I#8;z$X!A=Fz$2B|-vhS0G;>zUp;U$lvjbtQ7y zn#?N0ANbHAV@CFUZ0*&~a271J)CVb6p36L!m{%1#`mT&@iCzqr&BtmCieuJsxaOJ` zRHv^C4-!;X6hH$RJZfQ8Zjy7RbU07laO_oFL1L@^4kg#=1ePLJ<=S}J z0HkF0i<>mS3SFf_CzPd67cmjDlzjlB2T@iK{V= zmO(PECs2)x^IbqjG7EIJwI@|hkK*14(4mq;#Ht0eRdRg1Q0XMkM*Kc_#2d^fh#Got z;BkLC93=Aj-K$&?DRpG`X~SeG8saC%O9Xks?~>r=xD>$eAGS_y1E2`TAl0m3zXx12 zbA!yVMW!Lly0KcEong9kCW50&29WdBFOa7C)|I>_QA=7F>bk`ncDLpVg?|6qb` z!=>_cBR&^(E)Zpm1yw{NOz`r%Y1Qz9M-%n3RvCub%WFaE*I4Z7V6vei7PqLo<&W!~ zvJqn{Rn{>W60*ehgS0(*#AYg&g<=6wzA7SxvFc8Eg51PSJSJ=JAOgk+!2TcF&N)i2 zW@+?e+qRW)#>zN@jG3`*+sN3qZD%|g+jhpba-ZZqcy-Qq*LT-l>-lfj?*4V{?t1pF zs_v5V=HYD^_@J8o03M={B9(s9Z4<`RJ>)M2G1rfjNbS(GFE z?9a&VwD{!?H8N%8qClh4n+19IY(_+g(u3erp#B3vpUrK0(lv?N$Nq5HoL964Ebmmf zQ}6(y7!@fN0^GRLRzFvA3()|g;5-D+=XuDQ_!V|ue)?7?s`kfb%k#pXnVs$_%^2Ed zFZRU3?K8nrG?%3@u|2agBYs>~71AZ`(XYB4U0AvZ{DQDIk&%wCPlm>>BV|4aTto0% zb0I`#Hg?F@47i#U3qnWU?TKxZPf{XQd?G#7Xo*fyGvdAVawf6%IZUsN*6tlyPs*Z7s^B+yZSKRs(6zWNlUVj7qXf{vci?oh~i6Fuzt zvh3q-s3}oC6}NEFWS=X{bL{UT$Al%&gem7SE%kC-O5i*ckmD&b8s~fzf}p%O5mnln zeez}s;;ouQuh{FclY+Jt(O=+EtvqcfT>f4lojGj{g^k$bc4A>^C2qCXFXWSh4z@Q z8yxv^*zNmWK1({}M$Cy|sz+a#M?{Kc*sZayU(0s<$(Q6g_xuFt_OEaJqgS8jhSyx% zrpgb}Z!MjY3ZiGi(vEO-9(UoL3y5*8N;zzp9u&W`_i#g9JGH>*gy%9$!E^yP7U_m- zX}DkVaFJd;8U-ESZ_MHQD`l8M7Av!vGC1Yxs9D7`!H)YZeC<0rcS%K`dOQS8!Dyjx zIl`7;qk26gMD<3i!>WQ~tMA0hCW>>V^^lidH5q8V1C2gjFk{zUbgjA*Ce;h8DmJ08 zUvWOv+m>fJ>_AedvJc9s@K*=DJdxI!QVvuH4rotQb4WSCPlkUQplZKL)1~>lQcn9*Q7YNzB<1lwmDx{#jL^qwBQ@+$~^ zOz{JD=Dm!67kDhh5tT8v;v%ox4{__4#V;m-f#2k-zS&8!x6xFV2Jy6sSt=@VU}-a8ZgAv&iM8cDg9IE! z)2MU;NT#@9pEf%7b0m-OIG5&?F@B@F;^1QCdKI(e%n0XV`7H8OQ+Q!>em?~k_`EAI zEei`-v%x zY$1fdzcB_vUPu`_bicR>%m$wr!ceDMkI-?|v=v$mUJ{!Uv{TA|!}Edli1*Ex>=*@U z2u6w57AV8qlGD70&8WpekVu`_THb^v>aB;0E zKHV8mr2KMI&c%^Ee2719CqOJOmJhL9Tm?8F^Z9IaSIr?q2@2g^6oU7G#*JZoaA@q- zJ@Ioytr4Avntp8LtEJ!K99P0eLY?C3F$EuBw&stpWp61HINV1ix0*{5$=rtouvlO$ z_q_8g%QNX)o11?5@t4$tFQpPrgGwDER;45c3K#G9at%fhDK4ClY3oh4xuS3kg+uDE zgRs!q<@eWpWgl{_R|)yvw4}*mTf!ATwUG8Qm7}aL^B>{b7W&>W1MzTEGd=lEWU)W< zJ>v_?JYZ2mn4VID+;AZV!mP%JJKfA4bqT}Vh4r`xS9PAs(R2)xZIzo)j7k_Njui{C?58yV-jIbo--b|hWi(x$tU;|zV z&zz}srG@Ss+o6Mx(k=xRdS%H|v;OeGk(cKIFE^h}5$5U&v^0rnhW4UwmWXhRT0aK{ z7BHPK?0&A=UxD`cfyA*)%<*FlCd?u_uixlQJ&!@wM+iCr=WtxZu!^gQ^}(ZKD&p`bfzd?-*R6$QgH(9Y9JJ?SHg6W8(o~o`?IX%NKW zmx>0Mn=nc+ii6;jXVglV74KJ?NT#g=b&{cl{1eA^fd}jj?Q%O+zPByoeqHiGhRs5I z?lbK^B?xA?b_0j0+sYWG2)LwtD$=6E6_J4D5tujeLRjCH;Rnh#5aQM6j-CNGyL2OO z`OB^0GM5w}kV2{pRrUqpHPDOWn)HNW;6mxz(()`sw+v{aE<`(@!J{k1HN1l(1+zJV zC^l0L?4oQ@r)g6HT`@3(`)cZkQ&{+6!9H?_F?w$p>8@(jYvw{p#DTBl#&k*^LutI8 zd`#010?*>2g*RKP@H3Gw%{ek?NwZoK=K*QrhF;I-g^-`Bxq~Rzr)Y>&WTn?6m?;LX zW@S+{%zU*jtt?LN)|PxfTw)q$J{m1vF2`3E(BtmRr2Syy*`LGK3>>zJ^oa~*D03sE z-iV`h@J8itZ&E4aKGSzt>9g@#&e?wt;-XtiXE?*sNEBZH7CkE)2KMe=5``@2wY|$P zmWd*DBZ-5995X;Y;g?~Fi1?1L)P7UbyI8+dLaRKMPfC6cY)o(D+ z_duIE4{rW)i-VK@<{JH7Eb~vUQO4irD4gDvONP7=H8OFQ$ln1P0NH;n0v_IFkrCa% z|1Hk}0pPL+%`0(E9(F$ne+r#R1&!0EmA9{62p17l7X1_0o1 zVi^Ad_-zjSKGWeZkKq3?iUF8}e-p*{7XZ<(N%+5wWBgnN|5Lye0PuSY@+*(%FRS2R zSx$h=hrepzcgYWbUIiq7XBUvO>LKK)H-Fgz@1KF9zcU4%szNHh7e8fm1b$P(e>MeJ ze>MfjzuE?8`_=aUXbAo;qbaiquP^#%E585%M}GY-jtS7f&94q19RVExuKg~j37~*~ zbk6##^Z!*=)4x0S`K^QBWi|b!^FNw^KaBi;mD%){&i}an|2XnL1~C6Ua^OY5RR7;X z^=MN6JO~XGh|hX$5;RpGUqd$g1P?a2?c=cpsm5#0gO_4mju*l_jjh!wR7%9o?DkEf z1o~iM>I%+;p>U7U4TMvMuflH}#>hrwfwjka4_LL3Y2F=UTi&(4_RD`Hl)iM)*B6ln zbs7~*6-=h&^TDW@8|aX@ny7o&s;CR_Gl@}qtSmf?QD=oSt`s&VaA;e1rpO}>g5=sH z!3gOg^m#?>R2ERKtAdsFPUo%o4!uh&55{^c@&m6;jF|CrAuz*k1x7Je(R#4V>bjY5 zbxwS(4)r_s^&FCe6E*P-soc`T49;`b9#z*c8^AqHNqMnY1Zyom&u&9veF-SsB(qD% zjj(bdLv39Cb9l`1Yi>1v7%FRDWvEiAKa9Y&4lP320%WRl})6b%#7=qmoMYwlb1{joq`ax0f{^l1V9c zN$<7dOK;(@YcLq`&~_&8d`B(bY<_I`_frVNyn4PWE7z!S1Kex1isABB(Wyuyt#EgCOfh^(}rvoY+<|C#gHOXxxKTLp*mkn zkq+H`c>-03-U{=B#GEAzroqcs)a@>u@M1EOIE$HF(vc6RR7WtY*?64*P?@ zgtwi5_F4|SQ=-2^l8?T_)`xaAFbd@kLGYo#xblg+JM8KUazYO!#o0Cg^om#{let>!XgA_=SEX$*v!vT8D|dbH+E6vGo!NK< zu7^HYc1llzi#Q5t>0=5v&*%cZkQ^|4A{$M|PSo=2)O_->|2U9S^OQF5Wefl z)6&Gd?(T!Iam)^%Gj~x9FmIs`Po?h*?2^s!?ZwBovqZPW*a!zn{Rr)CymX=uHMf0K>Ha#d6i z&k0xE7?&E1WQ-83ou?x~RLiM1t!5Z+5DAi);6|O1IXIcYOKHZOUn~O=MS!CIF;HXy%&!xj)o9&C&CGhRsoqSSio_0Nde~pQw>iKk+7xJM@`Ij}xzI02 zwgm#&w*x|(h9nIW)mgqeMAP-d|(y}r28)l~-zTptpf(|{E9Z}<){{Yz$)immjQP7Y# z1$TA#i5cKZu@AT8Og=3WQh3IsxO6k&?yMhk+#nCtq;l9JL^g8ps4fmPzn1^rT;CGS zTLC;?cFN6~u`^;mUZD!ktL`c&i&^4}6dCb>&@2a!_y=445=3-s-WPwvgQnfmv_+SQ zO^wFl4;yAJ?PnF;u`Py<{^%gca)M#?fQ`x$Zl}-k;sJ9H!SwMQBXBQe%lA@YOAOYJrFcMlrpo`)7y$O#K5ucUMVy=xWnHah0ev7WwVtDnuD7vtv@s0eyK9q zg~e{G3iBv7j26Ebig^#14;rWF&xJdtt8IU$ysN0q~J!agJMiINSPS*Taj$dS8!b^ z2$4c6HQYe2kSkV0<=xQM2Gma2BMG_%Vf7yk6<<8C71Y7&y_rAa)wU6bGt{GI$6h6PX3uAl1p>2mEQCr^l2-Mj{A%7T zGXyU(+aU4oA+lXKtze*L7u^K+BBrOP549CqY7(IV_+Ru#VbP=(Eej~ar91W$4A=O7 zTyf$hn3L*dnoIK=9 za&am4SybD;uSZPgKmlnANiG$S z>V0Ej(;klerCfgv#NeQQBVkqAyR^%C)7ACLB1w9F=Z-{V>&P{|KVjFFPC~XNJY$qH zy^Zjp^&I>r9O~6gczowwY~B`s+fc!=T>ISiO;+aeIXxanw!(f9j}q@&rn&Ann8x|$ zF|(Pdv@_UC*>b4Cp63vvuT#^JIZK+3Z75MBjte$-!lpwFU}QRei*7t$puUNEty+CD zPA+87vd1j^9$e*M`j9e?YhsL8T~W`(m4L{+D!7OMe-eFYG_N%Q

0$lv$Ch}uMoo!03cA3U;D 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 yB$Z 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

t)yr7@CTAd|cYF?jJWg7I? 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 z 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

UUYL$pZr15-zUQ&^>3AsBx|wwe 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�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 A5)Ib;;a&9t(Rs5dV^*2nJ_UqrhREz;N*rdKlI4 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

TJH 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 z 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

-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 qLf3>!p+H~!J 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%0DVkm7@=vr$>vp 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

}ST12;i)iGsO|tDyk}{V{s%X)V|&w8nS3eBq^0 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

7(D_Qa?8Y=&l3s? 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 Q#qO@U*@}a>c;0b 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

^rLUDayrXo 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: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 z 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�+Lp=Wm>B4Mz>+mFWSd;83xp9);Xv9Sb1bwuv1my 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%0Dg;|eYIil!8tHXH6XzeW3@ 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

%Np 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

`C8h#9yFrI)6U682_W%0A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 literal 1635575 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≫Es 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%0AT>s=JTI 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

^t-h$qAVQJ1o==7_iBe=DzCdh| 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�vnTM!zS>oX1TX9qyQ@R%H@Hmm9lrW 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 <&>YajW`+D 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%0Ak{aaFeXZxi4 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 z zR`K8xvfv?K4m=VMpiSA~^@Wm)$LO0`pkyKsH@$0mXnb1U`C#Fr3-!` ze&A`}Qd3i&#YtiIzZ#z;xDS84N`SA)!F**^Akx5rpegS)ge9Ke#p8OkG7tENs84WB z{4X^Zo+3O{yipAY#2d9q1`ejZ zLHKk(nxLN(QZc#GP+{}}2YP2F;#^@S6@2MQKL?k~v0dF9z69--;-AImGQf=a!H=0| z{d5nf>Xadb%pp{r9DXYx83=9i+DPka3GxU@-gQJbJ>!6mMlrsU-_f(ea%o~^LK)lW zl<2C+5QkE0fR^Oc(>w3Kz+2#uSkXOc>gS|`gC6T`g!g(TsrfyES`)gf zm^@c_^NOJvX1KrD>;pkXU`Rv@Uvf-be{OFAokoBva6lS&e6by(yv8`VjZXTl5Hkj_ z{#%^XGYj5T7Cssx2imAV2{EtF$YGQ82SuYirc_aWLSTpT;ypwC8^g-%EO{PPRRB2a zkm+UR@weL!f7qN82&K;Mh-=`A{cav(njO+~W&aqSoM%zyzQ_|8-K*Ho1t%6T^bmFt z7ol}#m8`7!2GQH6#~mB8X>MfMgs`-{Hl7g@zR<_1k#Oj6yrl9k(eCQDijeX?JK`!b zfNODALCC!a{2>T!U`QlBEF#2TY|e0S9a~SSu+c#w@4j!K6n}#FJ7sku`66p#a7nPU zLCH&mxmjc^oN5BW9L1WiiL-J(O@mOu#CRhp;iM`TJ$De7H3eq+q3HX__$Uxv>(Sh{ z{EW?P`F4~b3}0os(qON1d~Uf5$bFtUDypI=e`*aDYyZv4!O7Cfq#8ZYamBK4;#*%k z1{uv(qm?e{KL=stXo*#(_Smc3&|QDo+TV?oe#3WnfK$j{wv>x4<|IKFy{RO+A@FTF zV+efl_6T=2yN_ISn5x3p>9#Cj?Jw#C0@tnfP;rgpp z-*A*eby%v9*m=P_rA>0|`zo?f(M)BNnM@dB@@85`QLUa;$E{X^MQNf}S!K!HHsd8) z>R06M?WW7=trP=OI3P6T?n4m*&ML2mFs^63;3{f!*|z&a1~WDzb04?V$zZ*ba~iw! zM5re1B&)3gHz&FUtm#eg-=_|WW@Sh~;=R54fyRH;%OQ9!h9us<9s_}>%YqGl-T`x1 zpBa~|t*%pFAmFuMSagr~{Zn8gH zj_MZiT>}6j%B{%?ugvYv>@f{A60r)S1$@ayeDHHa;86>5PyE0?eA80PKrXLh!^Du) z6~S7C@VZ&-9f>I&&v+aTE7YF)L)D^Vu2gHcl^74?!5wF4)xN38jc77HFV^$&_7ZD#vBw!nPDoA#27v5>-*@qMiHsp2B;n@cZ!Awao|hZR`m5@<{{9$ zlt^ZQ&tBL(Tj&ROXkqCQL!m+lM)pGxa9LC%(6OB}0oq2^ZyJBx&GV}G&tJe6^u5q7 z%N-_g7f1XBqGKPLF#YCc+tkB=Vf7{ZdL_C0gAWzTy{hSWN_J|pFA%2qJ-)PklF9AL zRlG%AspQsRJr=c35#(vC{}ff=n&r%^{r3h1+&jX>xdZS~e8PSd15WC8huB#Dl?09E z#?ni>>$0wG{p16VQML^HEHA`}I6EgVE20_w*B-&?)$2Og+(PjUB$~yu^wvivm+d)* zP@R3YV<6YxGzO&W`SFjH9LQ^!xpB_z+`j&$GMvM{^n%t;^kljV=%{G|UMKTVEs2%b zVqR;g#@+=56sO_1AA6D+B^)H^#r(Bi|JLXHNvo1CYQp6S8?y5hb)U}I+)FT%n@IA? zis6N{ULH#_vu1fkW*TR>t7bipCNMs1+czavrJvFA>?<#$lvxpqiicBJy@A z1uR2Yc@lLurk}#ksCJj;#GinzhI(L~l)o~Gsyr)G%GWaKl9EqpO!#B^q6tPVp5*C0 zfTUR?KCpaO0YQ!OjpdK_(y_o3dc4GM2_}v#cNu=oWxf?K`rA@~ua88RwTjsl)bfWI zO}Q$Bqq;Kua+D0shDdYHO zl@dva8MOKA1>`dlNp~a?vvUQmaBIpa6~?ha4Wx1nEBPd~dFwY;o6N|wY?_XNxv7*i z%o^dKGp9NCH+^r`_5VX3DAn71H`KzYye`l&8v$2mpKehAcs7oCaIJwp#z5;cuMUIPNegosg?DK|s6Ev+wRP@*pk z2DJS3MbdwT_ipf23xaAUW(1?TeDq_~$~!b73HCk403b~Fd)PTWoCxkCo6jR<7MktR z=RAiD#%MeVU}K4tdukzrA=VR9T0?sQV}J|WJDPqxKvqLs%%)-f@x1(4A#Vn5VN)`Y zepZmOAa1pXOmzeNx_SKw!v6zRGmA)yWshu0uHmNeY|)Pg^h93@lVt2?O7I9;ow?QS zsAk-=`PDfZS;p~%V^*n1rjsa}w&OpwO%|-P6)!jW;~v|#m#$7@wmI<2E0Ml>Qex8G z6uMlqeF#Mpn5hHSch#h`xa000()*GeX_4csIL&_O-aGSNoewh~EuW7I2+f9p1*z{- zSiD0%o%ICL@Yc!FWzT?$9Ool4api4xJX)&i4nd7$(iG?ZZ-`e)5L*FZB>ope-4b0$ zKKNB^OxloyLOA7rgd#a9&^zQj6fqmoT`*puZw@Wuxf8NkHE0LL{(hyU4bMnO1OcEH zi9H}O`_pKfP9 zzu{~m+Tqxxg%UYE>Y9-z$zBqFp4ls5|MkI znEdge)Q|-Y%Y-;_89ym0oHJ-LIv+OnA~dTdcMnDaa&^R^(E*Cn!u@p>j-Zw;AhBw7 zRV3KR3$%dS#6oTv3`2=25F@BRW%Z@ME<>LU<%lczOgI~iXr>cXUrYu^{NF>t9OQ6` zuktja27X?lGz4*F(@4m)Yp*JE6D%~tLabrjj~lyc#H76(aVBvz7*qfl5Jz|8J!1ihadP& zD3ytpeF#VT)&k>MsYYfaV`^+OA8O-8`X?6ay|Fou1zl+u3Q^&G+zw-#W`;h8+T*8q zZ{Tu`eXbiPNnYuZgLqMSQb7P@>v#5gx54*Qj#|zeggKt3dGDr;?{ZP6YzRH_@zCW+ z(q)k4ykh1M0=KC4(CoDWrsk4PZQmW@405Zur7Qbfmrc(Gh6P$(*!a1tP+hh?SMrNmEab^^W)#%)F5Wc{ z)cSNpvz-hGy(-`%q&iPXO0CfU>=YQs(O zU5T1jikCvDFTziemB_UWUdx5u0BNrky)3#tc2ms?Pypoox^MTaO$NVVET_)YDRdm{ z%#Yp1CG}ychOosd09Cbej0{WhKlEbL1~@t**xshyz}@+vS|d0*yO-kYCaTv(^z>5+|oGK%Vt1HVSr4z*av= zcl^v$Fi3MF?ITcul1Oa26P95-`X0k=%H44Jya=T(g|Sf}bC zjgYIbdP?F&w2`C=1}FJ`-&HX4LA6usjX8sG$lYu(re%n+W_Q-Yh`~E`NVwE0G1ey( zigrNYzR^c~zmLJe!R~qapG#D>l19|RoOm%vCjE9m{tBi6cs(jK(@7#R6LO^#WmfJz z@EHpyADhsY`xCFLCNH&LceRfI{Z`I`$`ZD#r*l#yLd1Ln%pBZAGj*1)rcX2;X9F2# zy>@4(>}o|K{3G)c?n8JyILCtIu8pAwOWG{4imGg>j_tT+F#94dkORiU_eM^LO%o7< z(2q@~tjiASz>5%vc+eleyAT^6qCO~?I;O-*}OsNUnKgKU{(1rSkoUe622 zaaM+4p`Z3w$ebDMQ3%7&Zojuc2GYBy?gq+KJ_mP5C>-BnSmN_LV?l~Dh)t#6Lk;N8 z3`8KwNw|)&qH!HYQ%Q(8z!`$+1m^AEd@7yYiy@B_-u}&xfABe(M{1NyQ?|Bg#e9O0rpRjZChOy`+ zn2MJEJ}zy?j8Hsf}cLu*ROw(|KWR7LtMRNhxh(|Ntq#_!Ma-t`22bj>#p!+pb+ z*w(~xkiQuo1aIv$-r-C*?%UFV%p@ds!Bz=^i@aU*xqLN~d;ChXU*Q{=qZbO&7u-~U zR>=y5){BP>Ceo`OBctEO5K3{#cLx2^ zISSSg8Cj>m3$rQhhuwx#?KLi_iJKiSS`y)+;~+d zVc{<4a|FKEP`XoD?#S}*5L2%!SJwehxw0+Fp00Os6X{1lqy%{AD?#FfsDe%-r*L7< zS&Q6=)%O)MdS`>WxMaHtI?s`tNoW?=rQ&*K0;+3Po>hzP|a+6L8OAu#Zo%mYe$Z+j#&~(dRI1*7k zyKdj4fV=?*hCN7ruT2S!Et|xu8XQYRE7t4yzslhKY9Ka73bAQcYMpZmz3gqkWO1Lf zzkO-834kBoFK73RNnxlF_530~9bNoGiNZ`E)wa^eY`z6`7Y7JRDAUa{YberYE zwGAJxsb{EE<#HOGkB@i5X;`7`H`RVvgq1agQJCdWCbnxAejea=@Y^Ib?sS9f>c9uu zE*T>v15R8D_pR88&9cZrSiZW~z1pAO0Mokd_)^;=z3H-GDkmb1iw#O?=r z`7ph6(0kIGsZz~TqGFe&?Wp3`D%Qi4{bov zEK1V%_v9tbd)Uu7#%m_iW8JRw>#^nE)Urh^gb0HI9bYLm@qo6X16g9tVY02W$P#lm zbzkj*OUjDOVq4_1bu{ngZrS>$0~D%6s23neKhg5Um8@RN@%I9*h8U`{#{1Oh5LzG!~+niLJkvvZz%eO-zO%R{ow# zW=Wdq-z&U1-|;T=!X&durO_;THeA@spp4?2C=6x?%3QV^%crbrGtsKm(iz;RyZP^Y z5r~1_mb{BoDI__X`A7RYYq(vS9XUt+76U|FrSG}#u=<9{Nip_6S>~Z#K`oC5rSzhv zgR~Q4a(*ho;vc2onlX11%Pbr3K&oJY!}cqO)yO991UrAy#S^N_3+!HRW`uqnK&Nx4 zk#)`jilv>ImRht7O*+5GZ{!A|;V=viz@ea?jCWC^c5Rws z^RnjXgsL;6*YzmS)=x$%EV9%a>Pv}UHJ+pK`DdciGJ@{0O;4&2&|SzwP!wX?@lIcV z#9*Vm)@dsu{Hymqka8EiV$on@QxIjlWnBOP$U=Seghb8!>u=P(v2>EX&O)na)Znud z!u@9563R&sKxb~nU7P*_zoPbkph&gDa*zQrE&`w8j6u>|mN%WY%WV~kP+1hVbzPrH z#5fB|+%Kl!bf&VbLvVcO)-^W zdM3wH1!j8aG8|UYM-`C*#G+>pygI`54<4kHEOS$bv!iO`!q%vEdulcXZ!5<)+(^l_ zfB;}TYa)}6oQ>;#7cpXLj4va6alLAszo>bWe-)FZnuNV$j40u=?mM<^8*6OaYi!%L zZQHhO+qP}nGk2ZyKgm70JNxc0{h{Bd^Q(G0>7=`>>Y01_k*~jEKbi+6DLt)!^7jUo zjWq=)Tcw%+n9AqA3rdLcZ{&^EumfKK4f~Fr`sNbRD(L1fG__Qu+CvIIEOotlEbVUW zGSjAwn!N74P_e$Ub!gfi`ZF*47PQdT6o*h`!Qp+mxFvPx4`{gt&LaLxT@q*JT_P?g z|Cv$Nwyj4^w&7W;$zzUsx*~)j!X=`aXF$YHaij~v(`zH>rJBu8H;D(BRtZL_$2laf z(bHGLJp7r`#~OD4X74LB?DB(uIr0EP=#c=M@T{lS=I)dm`&yM!4=7dG8xBn_$IIh&7(BBTDf3xUD)nS2j z3=P}NhKl)gV&>I_ncBtc@ID;XgDoz8_Gnsla=_8roRmp-KpiQto5h8VQt;Rp1kuTt z5Qv8ATi+o&)M1x|bK`p?w$xw8q9o||^^QCs|MH~|uApcC2?D8`uwvcSOG>%c9>#=N zfQ0NRg~!N3+jSu_YBt6BM6WRV<#}Rlhlj;m`BN|B=?C~F zdPiI;p?oL%`7oPfcEtyiq~^og9V0Q25G00w)?+o@2-%})p<&LKkB>5?Pgm`8W8781 zJC)8}FAJS1WOmjY>7#o~aO)tE7&asjt@K{HGa*oD^I`Lc0}*jlURgTC_TD>G>Mygx zHZKZSUCG_^i|)1N`B#IOL!6|nl)FZ|SJJrgn^vNzVqh&NTu2M&?2|;)sS_x z+q~{sdl?tUu}g<9waecveM9PB&&fzFV}<5~!Cp(>bi)D*HQ@Vhx4}94I994F^6{9L zlc1d^H9yGhmfC! zfUoQ)bwgB6OU$KiTsRAEw;kNVhn;oMyH@zw%-|?=Pkg{bD!b zco4dm%7{7JPGrlGE2IjSfIcf_dbY~*FU9#n6+`2w) z(m=No5HQ)B>ndQ=1YShPWue3DHTE#|q*39yMS*2=ij5`GdRhuHY^*QAi#JfXAME!6 zUa)VSUyyJcrJo~8WB5s@ha3)SP4pQaKz?Hrxpk{=YvgC;F(*T~`gk6Qr=Zfi(ELXr z{@xV%)OJ%A(byO;{0PB9$qAMXAY{vm*Pg_N{Lik(g71D1)Y=89Yz*X*#tasY<8h;V z*r44D`hmSP!a_oiNh#tGlcxh48ev?cQI#k%#p>W@EJBdFx`NUVoe2=w1vrGMrCptr zKXvf%3vt0KpVGi{^$jM_d~Oo(HbqB6HH|`nv_@QFU3MvRrzZpsh2d`}=zGh~18rIQ*Q%Te;^DJSMZ7@=aP^nwUP#%sdS2ZT1{$P{? zk$KTM=8e!|Z_lLc6P0ovB4awjgEAMN#+mCNWhP@iLB~;z8KCqRc`;g_zJcSvUWm(| z5w7FAiM6x3Lh9X0RIv$$czZ&b0O=<-vg{_%8*`YBF(q1xj%@J)&ZcWvx&p$mb{2?$8DZ~G#`c`}$f8D-eYwi{Zd zD0t*=6(i+1%H0A9iJFpXpVcdTx@RH)_PI9ZP#*MJ<S zV~X@pOUi|kg}l{-LxfTHO_WQ$MbdkSPI6_obC!VP&p{D@lngu2WPn-^d5LY`6QSIc%hr`4S@eD45Oyce|TgCh*U=x@BzqY<&U* zk@rIgce5?0BK=CWS~@xdc<7qOrq;#n;hAIa~p{G{`bImEXP4qq?zy#?nc$1fF z)Aqxr+cXoA`IuQ^ML~z+^0Gd+L56FzX1W06mDfB)c!99*IA>3ijvf!SG_&XJsgRT& zHC6_#kqbp?XMItxookEx(zwM3X_jtG@oIUsuP_d%oA3HQ$qYjpif;+SlFAZuXyYsT zz{*zWqN~|3o8ddg6zOi}+obb(4&kt>o|wM!k?)0hO#Nt&tzcMfR(@y`_|X}YaHy`Aq*Zvmn#62Vh`&9QgiDy|$ZdeVZm=?r(K zp7Q7`>!8(*ZL7od$_wEj=c* zKmAujwS&77Idrq+(<3_OBmWoH3axcd>}B3PfITJw+8cVPMJ5tX3Kn7c3uPb*$3m3nptbM1<-Oi zHFwekB2V5nIzYNLo-T|H2?N)@Tdpm)VkJH0aTK8x}Gt8NUCz z7%NMdc1zL{NTv0Y!BGrcK)ZXl_}KXgA2``mnF$6T zc7dCU1)?|nJ!;(L=MFtn*iQQsXphLgkPQIJ3(tE;m|+6lp=(KtFQM9Tp1ogAd~1U1n?uK4lkz;TKcj}=%3vH%kEGUq3X!O8srtHI zL`Vu7%xi}&`v&B1xgqD|F)x@YeE_BCuBmeoLX&5h?tv+=#mbJkyyLURk81cx|O3RsC{wQRz>^LMin{s9HK} zGQ971O2WOCp!j=bfpK5o`lu|iB{|KN0;HQi8ii5Ic#c~=VCcAk*WRnWiX%>ryy&mL z4~x1J{faBx3q-&ST$YXoUfP*kPsy%S7aV(Jm2(%$D_*X(8)}wZ%7~EbE`eXYS9wSO z{1V^vJhXJKE=5B1NNQLlRHlxuqUrAM2D_qEW zX!(on2Fx>sH!SDZ)3__4`GMeDOX9T}3_;pEtvW9Utq|rF*BFFRr(Ks{>=9(?M!YLn zWsh+gGieObp`To4bv`?RM`g~EeRj0Jsbay{9qMP4Xs~!LvfnD?@iqa2pbvupcKv$^ zj19o1eV4>}xxu+$$G~)Tb(?#|LPTDLYw`q<&U_a#P&3L*$yOiDqR>22z?Q7z-ed!( z$#%vle(D^WeEE62IGgANX9r$L-PAI}zy6+j?!J1=KlOBJ%T9f{Olo05*dAkwd|o2$+HXn7NwC z0^t}w+Fqiij!fTvA3+BxZ>#bXT3IUan`;97sCM6j`VPNKbC+x)34*k*fsz{44$nCz zJ~0A#SFMF9QWodDcphexQwOE8>F6Ja0lioM=K;`p|8;xlg!9lICH_KZu}guR{rl2X zkp+qBuonOmIJwfHy~CN7YwfAQLCESl7j)PNzK7?kJkN58*V@1MNH{){WMwPZS(ziI zC$&`h#lOQxN`B+Ya5ei|3gN2+74ma>OgA_e96GP-eg5E*Oj{s9! z+A(4IYr-{C>R<`)z&>?woPNf&j5fkUkyoJjc!VQ_A$`Q7y%k15_cYNz@q;p2{IY&F z$=%zGmmtgYOFc%9*GusxUBXWbnRqAN=db-L z)2pX3(6T&ofUwiuIbyt~;V_Vt!!3C+c!lZE{IkogfkW&kZrL%XXu=jf(WH{v-A_r!E>n7976r`p;-^T)o_HpY`kR6L_&!7~Z-$tDd2Er){h>2T+BxKyL zhfbM=?4|1Uhz_Mr7THl*5$~2>A#})Vk*(*v*~`sA(?=nX8TrM5roU4NHRbPFGofY3 z(9bSH2J3VaJMCFX#R!?u{403nFyI7~45#ni4xdy%=yiLMd`lqH_-=g8H}6ow68F%9 z^?_`^%!Plg-E5?yAD889VJ27EqL|Qr=*LZ5KRJO;4kB&lqtmcp4>TF#R*$$yOh`Hc1gD+ma zn(g=4>clKqUY|l}X>dqJd>|wb@2~^{rcxq5rX$WRpk@U>N%mapPo{|tw=H(V&Fu`C zI3|=|=QRcK(GgyGBbk;IT$q;VSVXMfsvG9+3jUD3vwX{m@u#-2vi|Y{5cSTu&^_?Z zQbu_zDC$c-C+x3@5`LKThaAhHW6MrOE@Ex%6Hz0F#Sdr(ed$7o51x6<2STO+zi-zq_>65BkYMBftxFM7`n&gOfefP zR(8jcQ@g}U+e`2mE;$>3Xn#Sk`_leer_VMtPUaK*5Jsz%`n!-)I%$Z|N z-B z&=Ryny`H|b5kxforS7%q1ilpKvI7Eh>ADkn1UlD9WW4fl{j+fJL%sK8pFj)vt4_Ut8tAU9<$cFBR~ppmwN% zb{H=t?c;(MFt2uMEO}ef2C}Cw#@48e@jVmmwh8?jeRCOr2zWGGKf&Chr&OwsGvwge zcBS{J`f2NXE1UA7^;&az<5%WV7O#V?@(FhOw(YjwXhruDe`Xn>9M`WtIh9V@J^FOR znY8^a#;?c#h~0C&rJ?;0Y*DU)n)IGryzOH`8kTSIP4{R3u^jpk=u`FT9WR+H0U-a4#vMYYPMzYQ?*7p+g=FKc$$~I{jY_@ZS5hP6b_yeOKRAneE`r5KwqY zWw>%HokU_`zMXKuo+E4qGWW^KExYCxhQEf)8RyObekMT!pGQebijS}?v|xA!TX5Fu73@$_Zde%@2}ZB$*Lj)PEb0P)O2Ujo zBjM?W6BpYlAx zgP3u_wSC?_m@P5y9T=10P5Qq5Db<&8DCbll&bxEIy+PeZEn^L9*U~uk1*r-FL-HS~Zu;m23r*3QnZKw2 z)=@ejYDd4=mj|Y65XZQpQ8%7;iu(Zi66h3=A2s;c# zKaaRArI2Wz4sPsjEOjSM-kH9w(2oJ_r4|f38J35X!$FSj@_F)X zjb28w*Szqx`BTsl`nKST1HHBe#K}ylV}JT+ekJQtia$<`%u$Epj{LTj1Cdv)M#Lqhe)yQ=Xo$|0HDWw#W0r;d*A%J5;C0xje00^ZF`^+un(H9|-mzJD@* zsl*VR#V(FdJQ761n%Tl>|HIg<|5=G-*} zPu0N#^Ecd@o)3#@a)MW$}U9tx`%^tsnpVZYr zMNp2;m8OlNS4pC}PjCXs9JKoCD*G%K8e+d3yclC^8sSrRF(&GDO+(X@sU zcgQhH>Ad*qSucZ%V1rjk{gvpO9BTQ;F_w|#DKDeu0rCz8_9wO7JCOC5DmEb>EY6(v zg+`Pp{T|Vviy+t|u*}$jLuc(^n2?oF=Y4W~0J8Zi)}{M5T6?mFGoxy^uj4p7+xKh- zXI|}G=rI1@P}`?Yc$dqhq{Sqp%X!&kvl5>kcObTbw&;@leGSc`D`fh9M{0x|41Q7^ zmZ|4Cn{Rjt*GKNRP^Mrx(m}aov+*d*1uRuksuGkv9nS?}c{w54*x^H}t4`1tI+wk!pTXoI`O(Lq822dv$TX`EI0A z#c5pR6=^ucxcqSEn%x&Ol%mya$?|}OW4LH{nv%dsBCG7VzFbR;G{?hYty9}nKj}QY zvqG3C?BL*VcFcs>hj&t#0`PnBYydssgL;={bvKi}7z)lftT;X#U5MFTca7-YpW`_L z6^wawf5DS7mvXUiJG8<5T1;pJ96*Y971OK!nUvV26%7dD&~I)IJP=@89PWPS2Vbwt z4b~D*7#w$x3pbQOxrnFSBi5QOWN~`Z?O$kRCS2rxm5Kr*8Hnv0l~|N zo^*my06le0INx91%F5;&bh|2p=6|nmcPdnF(bX?CT(iJY@a4<_lQaPyBJY@dh{M8| z@Id(CILh%LzGTOo>0Jq$8C-d2>|mVw<{K@TTQP+ z)}$sa9K8K}%1HVpGk`p3WT9#6@PU0hZN6}ApF%&&nIGxQAbjRzQBu+;Y{$U!+)u<3 zUOQy5Z#u=BzaTwtPrT^hy1Rj0NKC_MFI+iw+&w3Ik}I}T$ZAZB8%}cZs8sTjCP+B83-h5`Z}3iLYUUA zYmz4MjJ8B*S^0YAKt$O^8lbAHQ(uCaJ9h)G+B>`z?7lth;5Am_!2@231C_(eX%$rt zU4)x7TKbV`3$`|+F5meptT8O|`Up4Sqzi_{&ZSwO6BG{$By~MOH?}#c)5>_S4J16j zx8VsEE8qeXX)8t|8&URlGI*_ETbq*{qAMUqqTAV|e#zt_laHo0bg#BDtL%1eMyBZYr@2ncCI^reemZ1@^0B9v71^8;G+dWrKOzWD*1W%6ckJ7;C(lgW4LVv=a zUo4UAK5#o#g*m=jLR!B#01+fFjR|wwun--50*)a&`f|%YZ10|ft%9463sn}^w@WOm zFKM}nU=Tzoa4o(5be*ICwGgGeoY%1C4D5pTUm$q zR`S)(4Mv=B3fvZv9P*xt2}ngc1aHBM0&2?%l<&3;CZ*&QGR%+p|V1U(g4n zC=B!Vrz-oIW%J=~U_9n+1rc@iU=>Xsx2vyg?g#K@Hp?WpHFnUR(I(NQl`UU3=a^>U zr&tFfJMX`0Q;#Clp;kSMM4%U+L~cf#taF4#Cn`ig6ETWQo;PrxW`iEZbA;*DeaW|Q zK4DqgM{%TI(Sz9WYMkg{#U8jppxyswuy3s!1-*XJ8o_~kIlKrlz?PAVmTKy#h?t4F z?a5%FuCPcq(i%FJz~OknI9;vK6dtJ@#kW>;lAF3UZ2FLn*JKc&a8kUvFJHfPBZ*Fi zbpSnJ@O*2t2Lf`@{32}zPC(v?B9iS(8Cgz1>P3EVVSt!v;ls2oK~qdXC71*n3A1$D zLn>R?KVj{RBkg|MgvJLn6gLyGz?;Xm{D_!@_cE|ira3l$!si5J%>8H(_8%e)?@kZcvo zy&7d!sRp0iVfh64buaNV6RUkQ_*0K#QL0!FDn%`a%*$ZI2KCmn%;yMH7Uuju{T+!9 zL=XPkX4T=39@#j4&gO>m#5_DJfHT7o+^y?{@RZV|(7lY@5y+c^sp&BpY)KvK7w5kQ zXhwyB>M_ZbO+H6Reag6kz8EewvfQ=>+}kS+ce&ab%;<~F`9}GZ?3!m18`=~l9qVVB zbTqmp{b#FLwc1*vwE@>O+f?S#v(bS@Uo2d}`jIDJ1dIKJiq-=dX~hG6yZ;p7Io%Tu zRh)OH9s8psmBld47SWU|)SWYs+lz3Ml^o2GA}yP7#B>O!{)iphm0{fL^T|FN$Qlu- z@mroJr@|$!-)Hd=oIMJ)GU1$KCJ06I-CPY+|2*)Lk81U?0FxXs%(7^;kkeT z2|AK;V9PSbOwq_!Qk`j}vy=k4(UeIe}u$-j53OQX>AlT>gu|>EO-1 zt2W*Rw&UE)|C$UGn&Uq6P`#nQMbu!flJN`8 zIK-;bniCN;T@o^QMtuC zqCXkyX3(s6k8e^C{2N%1uYO>^pLyzSD}C{#3|r=VHNskZbdeA3&9%iDA8~^hf2^zD z%?}m}aX+~x@{un{t^CqY()?mhLK*(~>>sRS5FJ^+ns%8xiSMM_KAkzPMkl06=w9sx zWx@MMc5#k5+sL_Z5j3k%FHEG*V-TKw!r84Os07;`((_)?aL`tUjU`O}c{5gD?Q)xb zGAH8l;92o+Vn>@Z$NhVRzM$iD9_*=PXAy16glnBg5B=;)KL@Ac;kJmX&V%S6-6VF!8|ww@ zBU2BPvYsL#8*-DmJEt-`f#NbqSrHtK@6}uly~UaiFObgzGFo(%?Pt?W^9HAM>+Bo0 zNAo4=jf0rL(?fS2*FAQXj_JiHl4{;(=XA)P!ObNWZ}Sw9QWJS!BbN_wcc8TNLD$DF zJ%U}J8pG#@p;tISE+m}YjG4Xzf57?-e_ohsAd2wc`*XxJfrCEQ`cGx~%)hDYxUT{s zAm$rI;w!!yz)L5bqquL!;pT$qnvUOI3_dxyR-m(ruEI@{60sa!-w)f7Z7wLL+29ZM zC)V_C5}8IxQ_%{|)uF4b99DEZ`gsLk`t?U-%6USUm@#_-B4U*%3Vl~Y|f^raYJxK$5@#n zuE|cnTDX!T{0V2T8_(Am)7#>58^)TrMukGZU8%@8*|bh!-NL5hEqHGO5xrv|fJdxY z&?zUSS5lR_M3Rn|%lDak{`Dvx5I7L)5alfW8iJW4T_Uj6M)gIY$rXYdNeiEicz08$F5)XW+6#X)5oFXbD6-UoN5zn+1-&Rg=&9% zdJx-c=Z>9j8Jq#`W_MWUAi~W|$>S>JMOiG*j@7HeD=$HBJ<%##(=tfX?9?q_+e;3; z>6mGfqDRR5mdwvY+V81|*8h242|IQo;mLanq`;yKN;`*Ckf`MFf%mag2_YHyBSww! z%1#yUg0?()z;$!^w|4cDdxnX+ua$3{aOxB!YusMcF2Y7Ij3z&DN^9)Rq`yXWY$v3lrQ{dcRHTLBBlEc5 zFc#!m+#KJ=9>&ZuO|IX%WNb2mOKFpk~F%#B#+tXG>e8?(i$v zBeg#k{@y3*T|Z$N!A!6SMO{jnt4MH}sFzboK7WX5&t&Y!D$xV{aV?gBetPM0(!%Mp z=tmE@^bd-Lg*WWtxm<>~mYq^ydyT^uR>;;uoalsfd9uew4$-Os*0XHmTp4`g4cS5= ztU*%LsdE$gsFU_7b;H??j|;b`!(F6q%W`*7bbHv7nY!`^6j-hg*}HsMa_SLqsUO(UH9=$8EW>;qhK%UohrY#k;;C^` zOH7Gg=tX2Qd~(o@(72K~N%Q^5)aye7RZc~0@$@O*UMJ?;fD6y)gERR1$!fVW{1gBp zEY#-9v6FC6%oxnVIY4Bxm$PPogCOo8Aq1%g=Ti;38maB|95Z$>ARj%PbuzV25@4|l zMA6?=D9z{1Q_&O{Fv^cY8gA8F1)upn0m!|l0ZO>%jh8cN$y8Q(_YseMLBS!Ex$S>{ z-N?L`cPkufFD>$)O_*#P*(&V)Uocwo$C|mFh_1lR?Z9JRd9?9r zt*_Rmwe?WK0`+lm7zQ{u;9#+M_bOEy_d60u34{EL%5%h%OxnSA6+Bg@f|`rwP#l_) znp+^PcW;U`9hn|g!&i!-C5vSdnc7(*%nb+7$tVrvcVRJpRt1~)*r;UfHdua)f8K;C z;=ISgYmp|&K5MC(c(pRz(^t&w;v(l|TPW7VfPdk)A%8x^fYa+*PLnfjNzM!BDfa=+ z{CF{QQC=(WXakql9V@R!G6fviD(_{kiWSJaWb<;Z3Vj^Wk-E0(`M~^BAQ0*+!%=Vb zRLalFQ>lc(??v#AV*}`m{(hAV+%sMSkTbQgQGUkbFynagMbxFkY&V4e^2Ukcu>Isj zm;ixuS2nNWLWmFvfr+~gP_y6-{2*xEsW~9SE@IZCn-UWP%Qnawn6dDPR>i>;a5U@! z?YZ+ZMUU_F<2l&uTAt0rA6~?@#+|n2XWxlP!v+5u_f_yICJlBhszN2;W9Z!20MF7uoc%Qqk2X z%yalQ({>@q{DL@MfxBYP*L)~dh!cb$sKvK^lySde{<8%Cen9>WsjyN*#0af2iuW^vGFqumryXVzpk z6sHuaZ=SN6QpM)XWKg+isETJj)ci93Z5}{~0a0SDOmwXwK-svfh3CRezSl+bB#$5@ zY!PW~j^+*U5uW;?R%WqG?{>!zfVS8#C*onIH`H^J#w7E1T2jJhlKg$5vMtpC)>|rl ztRRIJbQ?A{*@ROn8Nf~sD0oK778ec#)>_Vtk_p7QF<$KQT51)Pc?}^RPOPxmcsMWV z;aF@0>UPkXHf@z%mcL*-?&%EU7`I-FwJ{0cNBrw!n4R_d3ii6PZ6aSa$8!F+7EOCSYr^&SY@|%pes5_pl560gnr=f0 zDjbP^Ddf~0lhc<1$F5s`gc;LEGSoO4X2}?wD&}3pCLH? z(mHi|uQg*BSv_NqWljNp~*IJjhT|VtvZ9?R?DM%`lW5Dm_zCe%6C4zjoY3 zd2+|Wa_2JT8DkcxQ8^lnDqq4M@ZEMK;?AkmGJtavA2-QTK@A zna@z^YCsZKj`g4I1yL#8D=zJy7mw?Fhs=A)-(7iQ}b80e}`#B4e0q_f3X61++e)BW=VET?fOF8r4Pz!8_&T#o9HHkw$xPjT`!9rw8Mr!U3QIP$ot%t3Mu zU6b?zzv0hjm(1*YkLiLOlonyZk|h8}jU$}Toq(D&C2QipzlgS>Gk^`c8w-}f!)v&;Of zeu&F#Qc!SnmzskTG$?-rLZQYrx5Oqs2yOjFdq5Gz3b=>J(o}U1_HA%F@$*7@Sz2GX zg0=?U;ht!v@p=(qE{vs@MbrSgy3wC~M=LnK97Q@AzR1?ybEKri@xg*1$*CnPQT$E_ zL{QD?C%Hco&>?Xo3xY1TwCpz55>uwN$*@+8s5^c9&6kT_M?nR&TVU*<1?l8!XrrH; z=0PiCI!b3SaP{^$?Nyy|HbXV0bDDpRQ&1|=3!Lo_!h07h?pmJ}-%PL0P3wHCJKl+m9vB+HomDw8NQ~iw& zLEcDQJL|I@(8fe?SVXx3@UjG3)nSd>1q1u{={toPBz)<4F}a#;VsE`fasz!}&0z1R z;I4KT;>$KYy@Xg>Wna<3E%2Fs2;ihCc#22d#`o?iYB=8PcFn zEE>}Nm@7ZexuoT@f|jX)k?BQ5M*8TTdf4$3Om!D~?Mu=?CDNSI1^iX&#J|GCqe_>{ zLrG>F{oPyj)4o7(ZAZOa1yoK#cq`U@ePu4>kV9MXQ-bG;$Bl%X-!sAF8S4Ka9PA8^ zFixA_45!+-KfP%B{sxnDJClq$U{Whj_OcOxj>SB3oN#i;(`%AtzmqZgh5YM1KzN4d zcZqD*3rjvLcz8hIz=5`Ci;@|CjkHexCvyCSPAw1 zG*kT(U{no)0oZf}&H?{+XNyEdzMvN~ulYBu>>n={&RZ$b$(Q=TAO8vz_i~_1VMMkFA zt-#`4B>)KhM+2Y`$Psi4{{3GeVaimB59={G`?y{`*biRxtE|LSChZ{S4WPdPfRg^x z5(4JvI|=swFKx*5jJ8?`CXGA1xq@}v4-6kfR8Pu`mK8afaU)L|7gYkC!~Kgte@IHegFXM`~O)f{jYHl z{9C~n$f)`kht>Zb$Nzgvj{gsLLIm~ypL_maxqJWNUjDb-yZ@1!3->>8b7}u8_dogO z(*1YbOy>WYtMET@?f+Y@9|`u&sO3go8zPu%AJmfQMYxdi{=cKy%X zjsJ=J{@-#x|10-jzTy4?nS1{qF1~hu6X3ozH9#Ioz1^h3RQ2LIus#Zf{zYm}W=ZmC zyeOd0Ug$QG*&luIgh8|K1s^2j-^iQ`KQK$ItoOJC<6)60ZjM&JHaPK3%j4s`T+i1H zkoUmAi0!AAPH3|d<*+G$^@o_c*~?gIqphV;`BtJ}HrBpettriJB=QOl55A*sjF?S+ z%%pcX>{om*YRduUUajej40L2crnxs`FQ_S<1;@X}lv?iGVw_vKP>ZxuIP|hdI2t z?7G@=A+YAiUilupvR0DAQFfROAYb{Dfko_Y^YBReKSd;LVo2Jv{L2Y((N@C$8cH$% z1@6I>YEwb{VGK5@{So!gb?gnC@=p8-nE-0ZbtBSfr4CVkG*QVaeT-KJk>PIdxkAUi z=e;6oJEgp@K-&+F)Oc>6+kqv7c^znXs*zz*GI`*yk@841Ol1<#+%u<4sbWbI!av{P zhSK#oGfj`)$O*=(6lzB&(x``etXF8$DtuggZZ%F;a3J97em2$f0J*zq6>&L35g;8j z$mh=o@byygN~In;!#%>`ua!4&l-{d#D)g(tQl9*y=H3l!04gm#Yi_8frM57}O$;IQ zU~2(MZQe9*erP-C+tzC}U?|ymu3Kz8AHx%1n1gRpv*&-2$Qso4^XCS>o*Z9chzZ%} z6!~gkjoWc=^@FzKNwh!N^X$X}IParuQRSfNS^eD$kWb-zJe(TNa~g%a5BG3s2o;id7iM!B*l1)U72{CECUS zgutydl}g{pM#acf17gsWzo{DaA#?_@2zT#bgk3&oI06L_tj&NGIX17sLc%ra>y zq93lI7`lZ6;iSuqAmvpWnt)X+E8rXK1Q2DPYqY|Ew|jR_n%|$$ZQHn=vY46aEH5%UlV!s) z1&SeDIZ{Z5?$3QL5z+8%c}ovxzc}=;VSot39;idA?yxf3{Aq%{8G7mnZ$ouf)*w1) zucJCTNx&WHv+7uKzy1^7qU`MoP>& zB4uV*S!#>FY&ZzG4BNT&*27%XmK-Ff3H-8V2cPQA@BVyMP(Myf0d+nyt0kKEAH>V0 znB`*q5qS9&sg5bV<8eAL7POfH;s=0l`k@!*hf=CeDLhF$qcFm1%4ESVOZ&P0`F1 zvMJg@S4J`djXg_{W;XC`ld2q+tz<-TzW`&0%Q+ty;GOfnK7iZBdutcR%H0CTwx&lD z;N`TPfF`G31$<(239et!W6ZV}SExvW&sL3nxZI!($$w4=>Sf%PueVoP(x`UwTp!fi z3^!1{E>-@0d5NB~#Wgb7v-E6jc+r-uZ26AWC*KOxjh-#}qtJKpS`5y3^k`fNM@o)e zYF-SNtYMc-Bqh}WG(|L&_GLw_78G#UL{8}6&@7FD>Wv8`W7hMlAX+R-*=BVXZ_piu zZ_2cO>7p&;(Rw&|E5G)2_VMXQw3j`5E`18Jr(a1-H0yjxD>T!HTJD41VI^-HcZoyO zyFKHMCRGAK1ZQa8d$JiR)5?2YatixR)Velm7h0dXgoow-2;{18@yB_MEl(bbBzSPT zbB2JTg?{_%VoOPm1!pkT&7zh3$3u1RUS`FOeoDRt$QrpiCZFE=ILF@l92fa-C_F#W zyUZN^@4X1)(K{*`L5Q^nS{pw3tph8MQKH^t869 zQF0M1J8WCb7GDP>H|K{=qfybf0#q@( zKdvZ^5l&C6ktLrxr0Bd>T7V7o*wRn#2t~sKP-8`gWBM!+zyo;2zW7))Bt$!(%vMkJ z`3Ge|mzVb&r`oLDDb$Y{Vyvw~ z>!ywgd92L$ym+v|dmVZma6^?za1_7=1Fml6z#C4*N&}Wpm%A-232!lNa$}KF&>1o8 zp*>?t_MhhK(>-f#4)zLO6giQ?`X1&sh^qLoqSz>6k}l+1RN?oeaZe|HWY(!YrJ;4h zmstJqMciq+DL$F4h@uZdxA@Qi&pM*t>h@_q;>U`2g-6m z*GooLRmy%*+$qt7YiPeEy@Ml)_vArSn-!bE118#L{w?;o&54p}ltgLhRHOve<|}LB zfm^*5h=Ru8QrO>cEvYJ?MxNFWxE{ct#hhd^xuV+_lXnJ@yTLyU5_R1zO&s5s;(B1c_zt;8p)-skq_NLaWrjHQVR2h> z@Uj(uN>#=K*oNTH0D62i8=$a znzWu*%F~TEGr)a33?%ne$qLrp#%!lUIg;%oRU}Rjpsk2KQSHxZU6^mMw&Eg%HR^@| zq>GMb64>y%+QxMi5@cw*!dQ6f8()iRwFP5los`(sw?uD*Al`zQLux<*ULv4)daR_I zv7Z7-ZqqUQYQ^KCIiJ(nfRUC1xkt5mP)oG+XUAy191elpW!OKe7fRXX4*6zWtVkxg zX{{d14eO3v{*L1LvtCO%R)_ z@~C4k+=AY&0^ajT{Q83&MB8xC#i+1==7c$9y%a(?+`C7RJB>A`rpMjUF=Vj)Qq!fx z*HcQ>%1kJ2lr*G-90y(ET&r&7YYgU}-}c@E4o20B5ZTB5{mYp6DE~5*y&`=a{%^Cf z+4o2maNxa@PKFno_9*xsr~TRq_mHg072r7DfD?V;g~Rup#`P%`Z~0uD^U&yFP*|F% z(c^uT;+QWxDLmr9&xEOJY`Bg%0mb0TMn@IOUklm!>4S``1z{~@{+bY`s_$K}KlG!+ z4=k%%-|1UXMZ>ZOTv-bR4Z;}MkIHcFfM4+XP20I|_ zFA0z)4)mSPJb44uG0fXiFon(5&tjEd`^@ha=T8PCdq%)hP(3jFT*;Uuwge8jFwb^> zDXQEYQm|Z-&W21UbU!HcWW_usj%cWe0j|i@Y?+C;d2H((5dH4s!-|C z>SXs#DrvUm@!1nMfc78qqIqlk&kkgU5{@;JmTeI)fU&mRs&U4^&r$I~bLfV;DG80^ zSV%o}h(Rgq))$DjUSqL#Q# z5F8$N82d$0_F{mPNan{lN|@=`W18@4^MpZ^5#~7^eA*|Y0yvp^YnED4AmD0!(tHPd zU8Ix4$;j}nRhwMCNB1`mNvOG~;+^XwH;6f7$%#W#`iHQ28893k;rJW!2s?Me7aPGd z>b9&WySOVKq+z~grxfbBrQL+r6x`BR#s&yDp3wdYvUr``HAWXWhpWRpP)`~(k=o=D zc^P7O6D0y!P->Ze_8F<#PYd4%m6t3UVbmE>qq`zl2Nk0KEUoJ6-)7&PP-~{LzAcBO z>mg-PaH@vRi3?AM(u(-$>ZeKLmVQ_Lswk#MF~8NFA3EQ)zP9*Y@Y;|EF0+s1LsY^?E*J_c2d7d6AU1)6_nKAfz-VnjelExT~TC0lDDsrPyiH>|Wj zFV9C23}4`izl3l&cb0#esp&Bd*G}~i1i$7m&4_?wvj&w2Qit%Q>5A{JB?ji0un=*>kDYfe zNECbAXQhUR^0#lEYS!VyJNxpb=uC}&=vqJw4gQ}9dN(eTQb$1v@>-^iFbUk_{*7JyHqMJD84KxAR2PN&rf65}WM~ zXiX>WWq;fhSdU|xsrP#hx_5rjZ{YWOcT%ae1=j7fqJg_%prs1RJAw$&FQ5Ux!UK7N zo#aiu%ICuiDek7^9MiZCY3s)AAkSmCtq<7*c43b(O)b(do-K(rU- zl_;82jOp*%O14zjtr*=SP5ZfBRJf?(&p9IcimD)7%kljsVtn{EtZH{X9o>l#B$3Q9 zk1N_uK}@Qsu5;7WCarSMYWj4RzzQ-DPb3K8SmdbnvY8<)9S;R92I+Nb=*yuIi&^>U zbTiO@G#(QHR$Xv&kWJYOfQCKL+Pxg93tX70`cI6PfwCGEQ|^9$79T8%tVf2H;0Ko4 zQG1sC@esinb9vItLYm1zCHq8WRb35GU{*fnLJ3ur7W4*I{>lgi@Kk@9><~(_9{8y1 zjbelc-|{&OM$Kpc$XrN$ACAx4`<3N2jgJ@S`{;Ma2Crw_SK>l_?^^aKbUk{cHsmN@ z)YAi&Y(>a!;M8PQ4rhc*WH%$lM5KrgZq&jTCT*RhV;w^VyPYl^vWeNbF<5pYdFr`SOPsdg4N{vbE zrBO=FUIlZ$P%FYjNc+n8XpMc9lfYlyFO!I9Q%J`t$lN8d(;F_O!yQKDCgD!r$<;4E z$dP%;z0Ax;Uk@&uIsUyd+bk zfb6Rv=O;m!j5z)P|lGY{Lv6(Z$Doa-*+CXVOTr*;-d{9CC zHa)jbVju1pH&x8dlfK^TBG^2%>hsPjSQ|pF5-U>1!<`z*?6X*utFeI~9`pY@m9rop zQ1$bOF({uRgw=)8Q%k+n9hxEcx|>>UkFyu6YPIxr{~G_{8kxvBxg;|}ej*6yop}|P zZca#HR0G0^+1qOSlt-?==b+c)9(Ej<3>2Vxb@6>N5_SE+xch)gD4)m6_X6xyu%VAo zd7*nX1H%8KTEjI=j2HwAgOo2BRPSFOq2nPTE2*XLc9K zohhjUK1B=d+h|Z5d+7p#JM}odAxt*Lt3HVs%V|TvjQk9)N}EPi0TlfD}ye0LSIBtFcMs40tG;RBVNDF;+KDV8xruP9qAliM;#8l z=a3C>tBT4z6Q{^xmrOW1s!iodG(#<`@dEN~hh^toJGnYeFkLiXm~ z^Hx}r^p>e&z2IVn+de>4d=wx>bnz&uHG8lx7l|M&BmI-{LIy5nKK{q+W#WTj z`_aRa3LRC>AA9aCc|H1fG*pYfT~rOVF_mc=VOb$RexqiXw?BJLqR7~Phb$5MO^4SJ z-8u%56S^`L z33y006Mfs#(KM3xGbzylp5RU^w5}HW2}BKucI?JnBb#4drR82dtPvd z_;E)3mrKucHk5mS8wy$84=@E65y|(F#(oOs;_^XK%#b4ub3A1*Wh8sDW%Vl5CCVZF&I+c2Rt|9n$_S~U_Q)(K#-mDqvDdV{ zQ0NAFXO68QDl2ML5D<$^uG}%!928i?0#FU)N7*tgNmpkF?k*I+&bKnk5a0hg>VtAg zTdkM@EJc{5#XQU_hAKFwyDd|P4F3w}84kW>Fd-Bebz?gq)D6{~#9SVL!DEdB19Gxk zP~YC^=|+=oD|ck)k&6t1frPBCj;d=Y3v5S!HeV*G8aUlvV-7R2K!SbUUu3ayqzMX* zEFSJ~kDM+jJlokC72V*mD9r=1r|>@y|s3qZjyPLT*M<9tqmIUS3S~@3NdcYni+!QeS%Qm-gog!5@N6(RJ@8uxE(b zWZ<%Y*7T`vme_NyjqOf;c6cKbW=AAMTIS2Qm&?`oBaCGrdeB z+XReECe<1OL_8pj*D?^6d>xd0W}JZHOc;{ArYFHwtlzn+q#Y)5oqAvi5qJssQ);{G zA5BQ0{}$f1fv59?V0tZh#=#5^u3t0?q}py%4vs&98w~mx&OMOUE(6u29IuA5WP3aO z$FWeux1SVOJeLnVJq(X?KyxO9>TYA1qAM}n81dETC0rgH2{WcO)j&H+sGn5l3~ zg3BDYMb?PRU|iHSiGG#55r+^Xqc$1EPiMd#JDEfjSTWZ`YEfkV>1Fq%|JfWtNPbc@ zr7{S)?5|TqG&v-olHWJWPI2wFEt&(=KLo^jy9TfS?87Gc+)N!1GO?z`e1NZ7;xd_c ztw~^ef*|L3e;6{{q?JSz_p0*|0V9TO`Y4ZVQLe zztF9@-Ov~Zn?J7eJ6G6YMSr{jz&6zEhENgp90k4QLj?u=}LoEJo?{?hy^%keaK{HWV$PXnjeRJd6|2$^LOU4i}&KM z=V*3>&V&gO_DmKLVbFk{%f}j`srCey;wUcAJqD-XF2iZ%D7UX$mgz=C6QG1LhQhRE zSH^!MKC24d0war`MdRMCLwihUYtJJLMnCc&S;3gXflzC47lb-?sV+Pi%#Ox5mbdH2 zIhShvf~08*PWs28mv8!Cg)1i2_hwI>(`^%e(+N;+0*lCxxV*w~nWxgm6z$>bx4YRD<*Dm!wU^(Pkmrv=$;d@8@5q3zyt)<44kdjp+!r{ zAHyj92rh8ep^kSfRVeO|IBYD0IZS0%70z%%;o6mDMRD5-*Bc6*y0!zCS(cCeE8N3= z5-$_Me7wW)!K7>JX*|T&$;fQ9Vd4z1@5I55DB^M-v7T29XetgSa>BIV#o~%G=~i>v z;gcD5n?;gEUj4-VN?zgLoPiPe$$IlCs9F9qA6*4)86XmyrL2s`6VTc#cgfg>$Ek$u zUPJKJDIk!ieClwKjOr2?BTlzYZztgiD(qAaH?$1`^UFA&*~QB>4udB@yNu3@=~(z- zM0v=R2q6??N}(!PysYRZU8zoy$w%G(-$cn~# zspn%SPHYr*8LH-|Zgp_-cN>~y7#mLp=1e`LYQS{}1pDtP_(#;J1X=j!7cO zE)s#-%YlW18F*->kiB!#USss)^mrqQ1%Kba?P3(3!ZgMKMdD=#5{=wgBG5N)WC0;# znXf6`X+JzZH$sZ{OziZeebNdJq?SXLGeFlP}Aj_&Ng?(rV9*|K;28> zg_YzZ?R}pixM9S20AU-+Vnn>XZ$RAsDb?%jX1Nuo4JqxdTxf{SwaD$qDJl9@O77CW6+aDysl*X?;BD~z{acB{&b{vBtU^*Th2q!|Qz5{P+;@pJE zWAB)#A!gd(u5+wYui-91(jA?Hb*J;J+k<9w%(YC?VxA!t#lf3xZrEoWK z?0&u2aD@Pi$o@29^DWfqQge;# z`02__5rOA$aX#7Ao&R=#7VF-o2`kuPIA^1G^Ek*nk%{!|ow|cs$+Pi; z&2bQV9HfhPX?Y%wx#wlg-+%x1T>C&C1DqCJS+yBT32lP`O+|&LXT>C^EI2IB)<_ zzRsOz5~{OlsV!`1X2?)NY4q96hmbAuJoA=#HfMQ3}eM2R{@LipGu3e8_5|{mbnd zGQi3JGZXJb%kk3d4(D7S+DQVx|E?Si)i9CMh0?ej|0YNmKv`f&5#FcmZqdJne+s;i zQFcd*^95Z|e&~IM;5A|nlHLFG_*f;}Eix!1Nh3lg*N-T|*BE3=Ymbeml3Fqef?B5n z<*sE(Dm16lPgXjNZ?;a3&^mDbIhTCh>_!eqmdazGo|Fcf6`AncN2_%FE^N5}?h~AN zNhAenlt|wNxL|&)XRH4#k-J&HSOj`I#F=^Dz&6^IsXUHLbqv=gW`(}OEKS1ge9LV+ zuec^=Q=Y(!+x)#t&)3Qz)V0{_{%u^3neCiKSD$FS?76YlCE~`uBc&xDZ*b0~z5*X2 zCv;k_NrTqjWnL`M$He86bP zE{~?q`F`&#Neh*Om9`dIoBg@vHL$l50`6;59vq@p@+K9mD*1q0Dk}q0GUB^e3J0|k zk*dg%9UqZL=ls1_b{~>p_5HawR4}_q7%`sKc8rn2(y(*3NagSoiI)G+P}DX%_TfNi z%ytx5Pez0Lm?W*f@09ZqpiwFk4HyUAg6*Mc*^BZ#0B0_|sDcQNkV>v6QT-cRpC%QP zmOj1p7^hpSsW?=e@Y(-zAph{h(Qw|)aPe#{VAurloL89oQ%C^2O#WuW8?5k*#BbV= zXmnNG;!ekA%kT3YMmOT%u=uwYs&|Hb%~NFmpY2_*X;r#K!d-43Cpz(cq1 zON65%Z`>QApuU)_r5%F!kya2B%|U!LcY&8kz8vpD-Y`9WC5oC)91HA5`9Xf+mUIgG z0biTN%G>VC74;4`5I*olmBzNk-&x^Hb0(hP@s3Jy-Kq=#3(Z@l!@-N;l%2iQeu3bz z)LL}3p$cD3{ppCyPk;RTgMgD(+z_!lCT6(VYBR^76KXNEGLMc7$pOX|xTv1c_}@*q zp4?z0@1bT1@&onYvJapMD9VyMVs;{$=II$f>Dl%Fv9E&^Z}@p1o#IpDpR1Zu(oFD(`3=Tcv7+L#r#XZt8$~W0>#eVWL>GGdQ4|FA zNz=XoF}J!82x8i2asR%>Kl>kRWY*i_MrIw>zL4|mtw|{|@GTQmG_w-!CdExblXB#C zLIG^fyN6Kyr~;lG*DlH}uc(3{8jGzYW$Q^CQ+SAZahb1vT;IjOzRXtYhUf;;L-{EZ z6QKgNvfD}zn4!=Tk{B(sLhJQZy|ZQ;MRJ30k_Dtr)Nw<#5U+ElgnY7<0Wbc58tMO7 zRyowvM0Frvsdnde3iL05ytIn5_6_J*v_1GO>n3A6oOV$r|1659XtkZ;2CMZPg!*Fh zUZ8?0GJ2Ubr-Gzmi?=wCHU>=ogB%F|?B+)7C)?RBm?uZ8BD&waWsBd=??sB0oyNK@ z*t)wMiY~i;sms6nsxHk)E;ON9nOWSN_>yqmK&o}`37yYRpRn}pj=)_!z3cN2h?)P_ zxp&E_Y3ax@6AdzJl~Z?>{nx>Lu4NTtjv8K*iQFTn;zPf| zq}e02f1#N&NroCRc-aDJ_4?!X0U3XprcW=+m87~C4mmzqgsQvO9|0=xwuh1`5oNng zmq3+CXULKQ;TQ0X%gI00#_>(T>S!vV$?Sw-}ZT%`?kgE35n)Flso2&mAMoxW&!r z0zDF)Mp_CgDEjsI$uX7cpW36to4iAdK2?!Lm@~jsw*--^ zIfk|ANoo~Utx}POGZ@mD|Lu+B?bEz^d)e}1Lx5iq8ElLcEV8^b-JB`v2M zZ#Xg7E{U%#hjPIbs!J1-zw~BYQ=8QtcYNeB5N2HDaxT6$xE9Y}vhr&x+IS;(`}VmI zfiVRR&x=;o4)$gA)W~TW%1Wr1=UJji!N2LS<`r;+ab1+Z>%dcJjH5^*CIX$!S!!c# z1gmohQVFWlQvCanr5zLIC)R*Y9nW-tD#ls^tIx0{|3bkA=p=%NRD>`#&usXXX5lB5(rrt>dguzIeI^NGnzo zLpWW$B2JESbA|vW{&WDp`VBF*x9$wjBX-%N5S~BVmaZiUg7WgGwHZ z0TcB8|NDLSvN}9Ysudk#9kIkrIq7iB?ihLXVQa#3kr2{D z`j2sa^XSAjhU0Z~iFl;B<}{tHk_#i~_V`@)#I5A>CF3bumSI~-u;xp9sou(@-x2v5 zf=Wb=T|fcq#iUm&|7&Fo^jIVIUtgl0`g6E9p)2Fg<<`v==}&j`=L}EP&)F3;3;+V4w&$;+bwP#d)08>32@tIPx|!K&S_)~GJ5z_P?H_2zsuXg>`3XL*)Ux(WrWZTPx3ZDWrHwjfBwMv*k4lR)aHa%X(b{{bQo{uTlyS?13L!{EAM41k74a={CPX_B7kmP(`JTN|xRP*65WZQLGk6 zzOFpbx%XHH_M+-=P8fTXa5mgBSnp1Hi4JeLgSJ#|T;r7Mo66*x^kW$7N>y7djWIxnS zfaG*Zq#i% zaI;>nPzB5$Yw3w9+*hR>dVYJJ8ExX#!^ja_k}#W`Joj4L=7NTs2vu&B2Lt@eXPcI- zTk2|bc;P6nZC|4;%EYr49I~6A+!3caoVXT4;z~=DJ;<2ZVhwjVUe*x&9&+M(-RR%< zBOgEfah(c!GE}WW;Zb1`%MVSO-g$2{M>Y0N8J;eWk(@;aOL951=+@*h+I71tkO-T7 zVSQl^q(H7#1~Z%`815v|EZ6x1#$Xm%hQGcL?p|y?X^%`>3$d^TyLNZBAbMT}%tj-u5h~+jJ{n@lJ#KWD=Fy8y z#j|RFXWo!bA>$M2v!^!PUe(kZY5QJrOX!7IUA&S21^H#{ZdP<I~6RPNCwB#I}z5`AGvpQa6CCiIQ__A&m`Ggz8=|wN4Og8BnA5(a$yL%`MgkMZYNE_7IH&l+z`-ZtS(}U%98cagN0r~)HKWFA z5$AoR{v0Fp=DaqzdXV8qOcDbh{{oSw zQa8?r&_$rid{wgCv1m$OgP(dE4K-X9xl=>#fIhEFPdQCkG z8>)ch#rO%VNW%(%_If5A z#5ZX2eA+H@l^4zg0q83A`NB1RUDVa zj(%wQ6H^If_Ni2?F6!(qh2!_eV>8G%>YOY)cqPnXj1qC+yb_G{26~>Nr{yMjlg3|P z#YvQUDP-jIVVGB43(lIra2*pSw15A1S6=62AIhxz~2Dp`8HEJn@9Zh556EvNu z1F027a?N1w=rjo0>dd7;pi3jz$9MzE`l0bb=CQkK7ZfKMPC@gx$qid{eF>!33MjFN zZX4m;p9RthxGt-&Sjg_+%pfC=1?T+JJ89O+1SeopX-r}B-14kfVOV@Agbu;fWs=VT zcLK0*3mCT+3rwlk5o(Qhu_ zn@*3VBzYvSMT|OkR5BG$$(&LHlSbGCxrdi@$+PKUB!{+9t?P!1MXk|lNi^yInwW5* zF(_6vyH6j=&W{AA1o^5IWX*no4FL0hm`A1KSie%~@<B3QqvC@VG ztJ$?%y_OG@Ob2$X^D<^}Y@Fgr*aKgty{J?NS1*Qkz(j{+n{v^e>BfpBO!;1) zU_4D*asYB+B$)sg4Le39HUWeTLck|kH59*6eWxx)%YdX$KtI<2x!jMkDU*l5zHQtY)Qk$j45MoYhUh}zoV8aw`=uj^!w!a)i z5ziYq#S5dk4;qTZ$SA2)X?JCK|BUN1GmtEMfwW#ZlKFu z7xMDmXgp8YSy3ruKs{Q+LhEbH^t8*|^toy(Tp^vtOOvLZTJK&5ur7(4(h?1kuw%vc zonTN%M~H7$0x@SinjSTxC*~vT!#Z$o)w)0F6Go{hB0DCwU6(H5gE5A<)_qhqTmg)X zb9<2wdD-}!{iA`AlETl^hD-m4!9|>fUXjwX3v=K53Pd8(h4Cn*X*g*4ojWCrcp|KLrc~053C)_WMWDQj|#O4L&<$J#<;GBz|_oE6uTENiaZOQX_bX z&!=4Tzpr*vxBs~5sn3Zlm5H)B;7-SErfP!`=?Nz>lWko{;~FNujoEUCcWq`jQZwJZ z1)IVmBy(8#e+D(Dzq&gZbn8#gw>fx>;N)-2N*yxPYZ)Lyd71wV$tx>{NN#1g`^iOF zvg`cC(%M$>QFdmbfq;`ujuo^0wG>=Q)b>bCWP^AklfqxWWnT!(6pP3+L(pp>mJf%Ah-H3fg%w=9_fVgKlQ^G)9i z%&Gt)v^*LEsflQ%Aw!5d!G(9?E zGa;Ys5+*^&Pw+ojJjX9>bxhUUISj?D(GDWo=Tq4-y?U zHt>E)PN~ieqP}dA?mC@`7wSIf<_c8Q*V>kwqnfbrNOy9$n4IA|~rqj!#3k(@(X!;}psUpW;lqh{rb zf^kA?bc;D*U*5Dx?_#4l(&QR@Xrx?^aTQx-FI(w}TWBY*u%BV)h0_lWW>ODHAfM@? zqV+!VacFjAP%l#?nJVLocN(Jc3xDr7X!E#dkZ)RdzJfdMcRE&*={Ed9L%-^=L=x%$ zU!GfnGp$GN=Zw#)jApib*d5e-9~#t=%7=akQEGzBd?L4ogMT!KYdWaHsud0(;8$b( z{O7{m-U|KteZY3ETb}}8QhtJA^C2pNq5PHG$Kt&xO4r70xLiC>J`VQi)T3n$D~(+{ z9iSJm`1gnfAAUPbobF-w-#*_hsNB@?u@9)uALk!tjees@T^-h#PAqW!J^PElSse&k zM%Ktma59^C8WpRjDwd$Tr%Mx~vT^9Uk!E*g#ygUNF7ybX{V1s4Nl#lHS@jFKL&!(- zuySF<$p|Z}!HJTH_M8?hbW>#490Dx;VQ9E0Wq2+8!tqd5<*e!1W|03oiN zgTvd+#GD^}Q+})$iQYO%Vi>$dT;{o1q3Rh$%y=K;D>EU%RN}^;*s!Eh5TCWJvRC`N zZqax<+h{s1AMA&kc###lUE;dJ7^S9=p`e<`FO!ko9xNh=>>>7sU@6)GqYm}*HF=@i zV5kp)$9obROm52)(+Kv*eh2MHqsyvnTAcZ287Q3Co+o{(rr_RLMBCA)5KYN0ogxz* z;)eoTfdW?1kTwH&f$^01c&`0;CoGVM#I7bk##HQyC;Qxz3-&eW@sg6bS$tEYtvV4N z(Jll|Rqt^+mkJWQSBSZ4DR{Pb>i7Z2A60L@ScRQag1E+)0rX!lL;-*v0sZ`TQ}&ZX z@VE-mviUxWe=olX=JjW`Zj054I;PEgmZigQhi5fMRU|}_-!hHa&;%os4NUb|+7im4 z(Cg;?hLrs4j8=`Jx#i>mUBYgkDf5if*YUqq7#a&zDn^`{Z#gAyH(^GMs!%o+@=CI+ z_*B}MbX!8781*K*W3~1s;p`t)KTE{9JG_XO(L3nIg=mD32GSmvb&x)B~8v4 zL7oPF%6sX_jzRzaz>3vC>qhtnAXTvr~-W2g=5Bl=0t(h2}Y(_ExUe0+itSI zMR=0m;zINCTEm4)+<-85e!Au#5`ux4vq%@TPGdbdsM6-x2knCC4`XN{hk z&G21jr!q5V*Mq`umi+gX<(mP@vSjiBjK#tK;4J$x-jO&sB38uO>=HRX@MN7ESJ&as z>73N76QA^x^@t~ao@Pu#VJl<~abXqI?JN|Fkjt^24~XIRc~i|HA-!`FeaIm7oj2idXm zJ{{(-HhJdCv!1z7IJ-Zh#l{KG4J?q%o`WOiF)t{IVnWZ3fQ|On;^ajP_~&SflUsKl zj?@o5(O+n~FvQT_CYp>Bp;;iEH1!xpUtnyGQi+^5sL5a54zI3VL zJhn6KJZ6E$ZpzMIhOraa0#nLwI#M+XGyFocy}4d-qj8u;7vfMvB6y|JcFQ? zA-ac-ZOW1GD83#dmO3rY55Eg4@!%n)I5q!n1%(On!fa2@WQv{v-k17`Jd59)f*s7v z4Uj+FbNH)dQirv3(uqAL(#Xc3f(!n1{fiD~$qd|rSqeHgw^Ixd4(x zRJ2@0v_!p@&t7bKqYBM-i5wsikLadFeNeLtsMhl^z_AwEwtkV# zClyu2zcW$TN#04FGNSedpq)y+gLv<+3T1I3dyw?BLjEc>%z|ZnLx0-pb)w{|ga~80$=F_t6LY9;n*JM-Wlq&q&#KjCM7kz~h@Sm-D zuR8*)W?|Ue0vD>GMSSS%MVSm=PJME7r z}%|7T?Z^IVXqnai)qV% z)o{Eg$O(QVT|zv8;qSA)LoHm7oCf&B3JgS2BMaODyF*%FzHE_q8{e(WU$(=ZkZoIsuNWwUh!RX2` zWg^8znPhqHi)u(`RDxf=Yut1DDgB&N4tf2g+jr+!Pyr!W$zi%`X&`^FVgecpMB2Fw z^CPE;&Wm~PK;Zm1GOy@@8bcc!JZEEuvJV2wZ)HlJ}HRb5W6AX(QKgtUGQ?-E@f936C(ri!8_%E zczZ8nCY^0NVpv&SXKZ;5)!Q3s%Qsn<^z}p;3Ovdsd&&3GyCwadxp03zHdND`b|rha zTAEj-S8Dt%ap=__qtI6!Ne8}5$xGZyuX=pvyN@Ci4%wQuh=&~yeuq}8-o0%KY*u(2 zFXPa$TB#s`&s$mrQg4zsIy4;AIpn7o*7#!{p1BadpuN4rZ3s_?bL{P(pW%fY-T{A5A>u`fINap~1-$uQx= zcy)tMtkBGAIwQ0DEu0!^CJncF+qU8@t~_}|sHuqG_B6Xh-7p_}$n`5*KU?S9 zGj;hUxXI(3UmVAJxMu0&LLnrkEJYpfrMD%Cn9*y(H!0Gfj@WOjxzVOKhj`+bV17<2 zB8kIMboJbh;@!TYB}+s2Xl278ZnOst*+N~wc>uLv)+W348_tL2yG+=L=%Y3O*xj3) z5kV1oUe)M|vg$*Op~OS=i$U?GK9gEt)~ELve?>J{%iJ>euSGhZg#{(_>Q84L8i#Ha zESS2GMu{iYx%ZMFAX`l?hEO0u=Z0$0z<}20C&X|CW$A*%I}rUa>d7@3@;>eIA-Akx zg~_36qzUrnyegtdU6GX|h|_l=53cy*flaATAYKO+%JIMcO0S##Ote~1LPXh-W4P~) z)~WV{N)X}E9bJH!E#Z=`dhcU;M5HnY_z+bqeca1t-TmzO1@zV~U#6$p-whP?#;E1z zLfNrHK@YTxs2YdyD2iMK`?nW$G_s&Q7V_y&nJn)Wti;9ItA7lS3x33N3Z?`{txBJI*7hW4||fNP#WK1`Xgw zp@Jc{E~GqdU^3 zf$XDmzK#+7KaN(=vI1&4w%N?3MUfX**08~{6uEepwu)jq5(=ebXTC$PpfJjL4cP80 zPw>jcw@k0$OD(%$L;eK6#~^@9;Fbs~@_ScxV{T3Czg$MAzsswR9c5Eso}b)94B3u# z)n(rHgv5B6mb}VEi=ou~d@RNYTsd`+BGAH_k7p&K32WnecZN*fA6hWO6A=PB`g~rm zLBpyLZ&GdCCH_GMv}zHJs)ucXmmiZnHqNwh?T7}AauIja%S2~5d+b|iH`Ki$$S?1X zq3Qu2)?}rifw*%TwrJ^~DK~%Of-T@SoGv=M#IB=~AoGX59D>LiYA%~(H4q+KD+;D9 zlV@(fy~-^mvT_eQ?DaL~!_Kc~x8eR0Q!{Sl{q9Wb%Tpg&L1wn=&}qJFePlpOs{j2_ zMX{nb=kas%9d8U)uh^1fML+ZyOw}*7QEU8%R8HnbAyO)1o9g530Irpzceu)bfY$2_Oln*PzDY4;-U; zXEtN^nHl7Y44?;P11UaRT@VYeMch!$N~*}$`U>`ZSanvT47EvuE;k~c%JPd3bKAj( zC2%ec|8p5nCYicwL%s|2@|6H{3tue3f442_SNQXK`51@&nE8xD(Qh(6{}}`9o)Z1L z*ieosdll}M%>-`za~_LF(^>&@D}k~@0q9#ui;V}yhNKTJEAh9QcbVO^8ZcDAE13Tc z{9;;m7-dJcG+-^%;yG|Ej6kDG8&+78iKGoPER~W}djpOS9&h{vpE1LyF@MbgEw5F;0 zFB#;Qj=^3=6+US8;%IA4N9Zwo*m*p^M?1No-;m}vctl(#;B);Qjsd#&mr8Vyle{&# zay)@LW;vQ12+7*boL{>z0{3#XO(0v)S-WeGanhxDmRcVTlM?82s~`dHDc`}Xy|e*W zqKwN}6P;V}=yubYd;$5#xCA85rhEJJ6p#Sq_OekX1}!$G{NRD%+#xpB=$l%b!}sfN zi|Q_PQfK-fh^hdTc(D4ClYZ#yV!a0&c<@8 z?7;ifYp}Mv4zY=&)NsNV2@+n-^MUh8@gi<*i1e|^y-g#YJV_YJ#3h{2rfd>eU{I{U z64!G|&qUfdQ<~UtYfcQeM}(Nl|J`9wrDJ{55N3tTr9m++|CMDH5}xjBaT#|r2jK)I z)6pk>0|wf#cJtTXV>;Ysn#($y-4uo>1v#wi3B!`9kp^A$B6fs}NZ5!wb9Ovo&tGUp z&a^<6DWRv&$VoIw8I3U;XEv@fI)FM6%FTe=)hW?U8Jk)5I+wc4?;7@g?iuF;ZJ<#J3wf*OK1{p;t*RXUG6$07$Ep0O{RnccQ;e}q* z5&dSi0-%u*VauKbp6j?@Bf758{xH+=rD~VS#_a;9iagO%f4S$+sW#HKe>jwr|5UwK z-QWK-)TnRgPHNhFbcASEDE;%^HgRfgnm=$-W=%U-z-Gy#KWy8Hfl<2gmPP$q?HDUU zj&+0?s)JCv5p$WJ@;TH)lEC%QHT#y%+CQfY!_1tDkZat?)M@->@}i7ac&{WuD-`A9 zLa9*crh#}qm)*mxPF3|XM|oA0^mT{|!?7$nvvbG~)oF+r41YP0%07#0JSMdwmS<_? zy7kEZcz}m~gnZB82~?e7rF+Vx3=OY;)M3T<_j}bF8SgY58h4=K9i%w!CGV0$rSB53 zOl}gQ9aLlGiAZb(_Vl+KSuHVZku=0M29HmSP6vv8sZ;5U=A8Myja8*xsnG)hn z!^sohbN*DIe6(>NHX-Uin z5Gz7A;3Ngdew+O06SLq-djy>?Q+gOMD)`OXk1`1`IjB~Sl^v98{U5ma*3-SRktjr` z`+-ioZ21lw2k)^m%t&BbIhxk@8hH?;bSbAyb@44WvfVq-axA3Mk-H0|-y45A#Yk&q zRyvjU`D$SkUsbVZ(mAes+xc8w+6PUbQ!_SA9GAAo^(Z!=;gCoMVLm^+`3s@+Ofa+x zrYCJ_^yu&M0%lB{p|8iQMCn7e_5MBKfqEGRsLe5vk3Jb3*jb z@&HOJd_-XO>RH|!we=uiuzdVXNpCbC;I$jwE~pSB?h|mg199B`o0?STq;`l2Be5S$S#~Cb)X=vLg|J9XN*Obbgk}w53}hxQNYk@8Ki( zMR!??iA-C}DEtqFbaeNvlnVuiktmZur4S!H=|vVkrHs>pF0_;16z>tKc#;R@6>#Fk z`2h2S-}|DZZE)_}nLIlY)~qj&-Y3y2Ff>~!RNQNMNNCrXHJ$YnV20z5Woh>Kl;*(F z$7h}Ty!Y++GR)zqlIVCd@UEgqH&xL(JU z0UCgUnYIuRl(#ew_)8#=%6aWgGe%Niao$=G9wqn!$QP|e#p|q zX0S6JW;If6Y$QDG$(7+vF$@;D9ie(hcD(C}+(~7Pj6Tl-gr{@NHmZ|~-P4$yg&E+* zQL(R)+>K0^7~ZCvTmi=*mJiN`yAphW$e>;-MVO`WTD%_q{5`aTfWg z#G!hQN4uqe)7roRNBiCG7|6BADba04y76?_}@|CZwHmHAeqn(rxE?B2m91ev_<17cnv!M(7u zg_&3}O43C`|4}*G1O~`w$)d*|p1}K1Qlu$xZl7 z)DgVek$9Uk80fD9jV%^AMcMX-6LL(@#Chla>9FbW$7H7 z5dxkc0va3|j>88|;!{AR7i)&Xk{R^FO zz1M9ZuNY&nhg&E_{{Dupkb(a3fti{!ki|i3b_DGqA3a;tgUAq?BNaw09$<6Hyc4ZF zhktD*rt3(Y8M({}3pBL&m%z8;gmS|DtRL2Fw{B^s=#nYcubCusN#6@BWGE{PyqCMn zre*dBn zkJ7*TW&HlaLJaVpK&Km^Hyvz*`=!Cb{<1ongg7M68!_Xy zA`kA;`c~vV&HUdvsh$xix6ddo(W5_0KLhBn=t2noN|8P(3>E} zFC@_!Z}POq=xyGubS&BlcvZVt#`DR-tKD!cWxp36tWr(XD6>_I#s$)EtjWEYYxhzJ zqjD9;3!SNSO{=-g$r((WM+tlS7f0y~chf8y0crUzn!8*V)k!yHQ7Vm-r(X9ac&|Me zR_qXvh~p0ErQ*iEpG+lQVY$K47PL&re3$jPKMzIaaSyY6JR!r!l%ovKCR?GlG1qZs zRQxc32k=ih3%kK=;kw8&UAyzo<_2g9IoqkKxkMtlJ8-jcLec$YjWQ0M)O2vD^wfi^9D?5MJlOK1Z?KezBa8Hd6H4)ZOXd87=p7Ec3!I z5P!LfxkYMvj5!1E6w_Hn$-z{uN)tlCiXpKt5Y>TDFbQ7mPM=}SLTBKtNiYL}cvI*t zzT`(4bF_J3x3fi&grD?+j#CnW&P`E5S{Z*%)ap<(BRVz_kla-I*Y-Y?;tC%!Z8Ood zBsL+n5R}4y@@u#aMZ#T56W^;R@8BLP%is2QE9d=o$3Uy=nL_6hTdK-U)u7l-?I~Ji zd2w!S@f|XMEDV_bIzIN4IgTcM6_RcSuCGAOORc7XKgg9r?5~`wRPfKE@a7a_&+j|Q zQUuPUQs>$pFK(xIsNL3z$@}Ju?ThX~*S*78A*lB@ef+y$Hxr}UWD32N$u>}z`DJ1J zOwTJNu&&^=;w&ARHEF75(2ECDYew3@%Xu5;0G-bAr!muzmvecjE;-tRO(j1$ZRTBp zY@`0BduCcIG9QAj$G7j2~⪚JD^&tb4zTl8PYrYYJ(;7@=@wmL_#7lB3* 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

wTxt(I(I0P;H2V6tva0w}_`jx?eyXIxUP6{_| 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 M0DTMEG3bErZy=D`|Wgq(gcVyeHg*#QPvs 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

Cq>K-H_oGyih?|Xe~h3f&z>Um}ZOq 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¤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 UBlZ7wzm6?>$z>L93+UvE9>K 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 s?j97xb^iKe Date: Fri, 24 May 2024 14:15:50 +0200 Subject: [PATCH 06/31] Day-2 operations for profile variables (#2911) * docs: Profile variables day-2 draft * docs: Replace relative links with absolute * docs: Revert absolute paths to relative paths * chore: Fix formatting --- _partials/index.ts | 2 + .../cluster-management/create-cluster.md | 13 ++-- .../export-cluster-definition.md | 2 +- .../cluster-management/update-cluster.md | 71 +++++++++++++++++++ .../upload-content-bundle.md | 2 +- 5 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 _partials/index.ts create mode 100644 docs/docs-content/clusters/edge/local-ui/cluster-management/update-cluster.md diff --git a/_partials/index.ts b/_partials/index.ts new file mode 100644 index 0000000000..6c691941af --- /dev/null +++ b/_partials/index.ts @@ -0,0 +1,2 @@ +// This file is generated. DO NOT EDIT! +export * as partialexample2689 from "@site/_partials/_partial_example.mdx"; diff --git a/docs/docs-content/clusters/edge/local-ui/cluster-management/create-cluster.md b/docs/docs-content/clusters/edge/local-ui/cluster-management/create-cluster.md index 3c106e9df3..36775b1c72 100644 --- a/docs/docs-content/clusters/edge/local-ui/cluster-management/create-cluster.md +++ b/docs/docs-content/clusters/edge/local-ui/cluster-management/create-cluster.md @@ -3,7 +3,7 @@ sidebar_label: "Create Local Cluster" title: "Create Local Cluster" description: "Instructions for creating a locally manageg cluster in Edge Host Management Console." hide_table_of_contents: false -sidebar_position: 32 +sidebar_position: 30 tags: ["edge"] --- @@ -16,7 +16,7 @@ cluster using Local UI. ## Limitations -- You can only create single node clusters consisting solely of the Edge host you create the cluster from. You cannot +- You can only create single-node clusters consisting solely of the Edge host you create the cluster from. You cannot include other Edge hosts in the same local or remote network. ## Prerequisites @@ -34,7 +34,7 @@ cluster using Local UI. 1. Log into the local UI by visiting the 5080 port of your Edge device's IP address or domain name. For more information, refer to [Access Local UI](../host-management/access-console.md). -2. From the left **Main Menu**, click **Clusters**. +2. From the left **Main Menu**, click **Cluster**. 3. Click **Create cluster**. @@ -57,7 +57,10 @@ cluster using Local UI. 6. If your selected cluster profile has profile variables, you will now be prompted to enter the values for those profile variables. The variables with default values will be auto-populated unless the variable value is masked when - you defined the variable. Enter the values for the profile variables and click **Next**. + you defined the variable. For more information on cluster profile variables, refer to + [Define and Manage Profile Variables](../../../../profiles/cluster-profiles/create-cluster-profiles/define-profile-variables.md). + + Enter the values for the profile variables and click **Next**. 7. In the **Cluster Config** step, enter a virtual IP address to be used by your cluster. Optionally, you can also specify a Network Time Protocol server and an SSH public key. @@ -82,4 +85,4 @@ cluster using Local UI. 1. Log in to the local UI. -2. Click **Clusters**. Verify that you cluster has entered the running status. +2. Click **Cluster**. Verify that your cluster has entered the running status. diff --git a/docs/docs-content/clusters/edge/local-ui/cluster-management/export-cluster-definition.md b/docs/docs-content/clusters/edge/local-ui/cluster-management/export-cluster-definition.md index b8a3e4a87e..f2eaa477ba 100644 --- a/docs/docs-content/clusters/edge/local-ui/cluster-management/export-cluster-definition.md +++ b/docs/docs-content/clusters/edge/local-ui/cluster-management/export-cluster-definition.md @@ -3,7 +3,7 @@ sidebar_label: "Export Cluster Definition" title: "Export Cluster Definition" description: "Instructions for exporting cluster definition." hide_table_of_contents: false -sidebar_position: 32 +sidebar_position: 50 tags: ["edge"] --- diff --git a/docs/docs-content/clusters/edge/local-ui/cluster-management/update-cluster.md b/docs/docs-content/clusters/edge/local-ui/cluster-management/update-cluster.md new file mode 100644 index 0000000000..921ff7e66d --- /dev/null +++ b/docs/docs-content/clusters/edge/local-ui/cluster-management/update-cluster.md @@ -0,0 +1,71 @@ +--- +sidebar_label: "Update Local Cluster" +title: "Update Local Cluster" +description: "Instructions for updating a locally manageg cluster in Edge Host Management Console." +hide_table_of_contents: false +sidebar_position: 40 +tags: ["edge"] +--- + +You can update existing local clusters from the local UI by uploading a new cluster profile version. This guide explains +how to update an existing cluster in local UI. + +:::preview + +::: + +## Prerequisites + +- Network access to the Edge device’s IP and port where the local UI is exposed. The default port is 5080. + +- Credentials to log into the local UI. Any OS user can be used to log in to the local UI. + +- A local cluster created in local UI. For more information, refer to [Create Local Cluster](create-cluster.md). + +## Update Local Cluster + +1. Log into the local UI by visiting the 5080 port of your Edge device's IP address or domain name. For more + information, refer to [Access Local UI](../host-management/access-console.md). + +2. From the left **Main Menu**, select **Cluster**, and then select the **Configuration** tab. + +3. In the upper-right corner, select **Upload Configuration**. + +4. In the **Upload Configuration** wizard, browse or drag and drop the new cluster profile version **.tgz** file. Once + the upload finishes, select **Review Changes**. + + To learn more about how to export a cluster profile and import it during this step, refer to + [Export Cluster Definition](./export-cluster-definition.md). + +5. Local UI displays the **Review Changes** modal, where you can review the update summary and verify all incoming + changes to the cluster profile variables. Your current configuration is displayed on the left, and the incoming + changes are displayed on the right. + + For more information on cluster profile variables, refer to + [Define and Manage Profile Variables](../../../../profiles/cluster-profiles/create-cluster-profiles/define-profile-variables.md). + +6. Click each profile variable and review the changes. You can specify values for new profile variables, override the + incoming default values, or leave the incoming changes as is, depending on your local cluster configuration. + + :::info + + If your current cluster configuration overrides the default profile variable values, local UI will preserve your + configuration in case the update introduces new defaults. To use the new default values, click **Use default** in the + respective profile variable field. + + ::: + +7. Once all incoming changes have the **Reviewed** status, click **Confirm Changes**. + +8. Review all profile variables on the **Configuration** tab to make sure that the cluster configuration matches your + expectations. + +9. In the bottom-left corner, click **Update**. + +## Validate + +1. Log in to the local UI. + +2. From the left **Main Menu**, select **Cluster**. + +3. Verify that your cluster is in the **Running** status. diff --git a/docs/docs-content/clusters/edge/local-ui/cluster-management/upload-content-bundle.md b/docs/docs-content/clusters/edge/local-ui/cluster-management/upload-content-bundle.md index 22129fe76c..1c3af0f084 100644 --- a/docs/docs-content/clusters/edge/local-ui/cluster-management/upload-content-bundle.md +++ b/docs/docs-content/clusters/edge/local-ui/cluster-management/upload-content-bundle.md @@ -3,7 +3,7 @@ sidebar_label: "Upload Content Bundle" title: "Upload Content Bundle" description: "Instructions for building and uploading content to Edge hosts." hide_table_of_contents: false -sidebar_position: 32 +sidebar_position: 60 tags: ["edge"] --- From 829a5e52a81f0b1c0b72b23f32e6677664374251 Mon Sep 17 00:00:00 2001 From: Ravikumar Kondepati Date: Fri, 24 May 2024 20:50:33 +0530 Subject: [PATCH 07/31] docs: update palette 4.4 API docs (#2919) Co-authored-by: Karl Cardenas --- docs/api-content/api-docs/palette-apis.json | 113045 +++++++---------- docs/api-content/api-docs/v1/api.json | 82082 +++++++++++- 2 files changed, 129551 insertions(+), 65576 deletions(-) diff --git a/docs/api-content/api-docs/palette-apis.json b/docs/api-content/api-docs/palette-apis.json index 80acecc41d..ddda187cdf 100644 --- a/docs/api-content/api-docs/palette-apis.json +++ b/docs/api-content/api-docs/palette-apis.json @@ -11,7 +11,7 @@ ], "swagger": "2.0", "info": { - "title": "Palette APIs - 4.3", + "title": "Palette APIs - 4.4", "version": "v1" }, "paths": { @@ -52,7 +52,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -69,7 +69,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -81,11 +81,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -168,7 +168,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -185,7 +185,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -197,11 +197,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -273,7 +273,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -290,7 +290,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -302,11 +302,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -386,7 +386,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -403,7 +403,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -415,11 +415,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -581,21 +581,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -700,21 +700,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -851,7 +851,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -868,7 +868,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -880,11 +880,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -1016,11 +1016,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -1314,7 +1314,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -1331,7 +1331,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -1343,11 +1343,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -1377,11 +1377,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -1455,11 +1455,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -1605,7 +1605,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -1622,7 +1622,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -1634,11 +1634,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -1668,11 +1668,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -1893,7 +1893,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -1910,7 +1910,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -1922,11 +1922,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -2009,7 +2009,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -2026,7 +2026,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -2038,11 +2038,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -2274,21 +2274,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -2513,7 +2513,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -2530,7 +2530,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -2542,11 +2542,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -2607,11 +2607,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -2704,21 +2704,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -3159,7 +3159,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -3176,7 +3176,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -3188,11 +3188,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -3212,7 +3212,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -3229,7 +3229,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -3241,11 +3241,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -3275,11 +3275,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -3662,7 +3662,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -3679,7 +3679,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -3691,11 +3691,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -3725,11 +3725,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -3978,7 +3978,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -3995,7 +3995,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -4007,11 +4007,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -4156,7 +4156,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -4173,7 +4173,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -4185,11 +4185,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -4502,7 +4502,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -4519,7 +4519,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -4531,11 +4531,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -4709,7 +4709,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -4726,7 +4726,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -4738,11 +4738,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -5122,52 +5122,6 @@ } } }, - "/v1/auth/org/{orgName}/switch": { - "post": { - "description": "Creates a request to switch to the same user's other organization. Only possible if user belongs to multiple organization", - "tags": [ - "v1" - ], - "summary": "Creates a request to switch organization", - "operationId": "V1AuthOrgSwitch", - "parameters": [ - { - "type": "boolean", - "default": true, - "description": "Describes a way to set cookie from backend for switched organization", - "name": "setCookie", - "in": "query" - }, - { - "type": "string", - "description": "Organization name for which switch request has to be created", - "name": "orgName", - "in": "path", - "required": true - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "Returns the Authorization token. To be used for further api calls", - "type": "object", - "properties": { - "Authorization": { - "description": "Describes the authentication token in jwt format.", - "type": "string" - }, - "isMfa": { - "description": "Indicates the authentication flow using MFA", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - }, "/v1/auth/org/{org}/oidc/callback": { "get": { "description": "Returns the Authorization token for the palette. This is called by the IDP as a callback url after IDP authenticates the user with its server.", @@ -5917,11 +5871,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -5929,7 +5881,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -5946,7 +5898,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -5958,11 +5910,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -6088,11 +6040,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -6100,7 +6050,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -6117,7 +6067,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -6129,11 +6079,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -6272,11 +6222,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -6284,7 +6232,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -6301,7 +6249,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -6313,11 +6261,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -6413,11 +6361,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -6425,7 +6371,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -6442,7 +6388,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -6454,11 +6400,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -6659,11 +6605,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -6671,7 +6617,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -6688,7 +6634,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -6700,11 +6646,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -6825,11 +6771,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -6837,7 +6783,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -6854,7 +6800,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -6866,11 +6812,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -6998,11 +6944,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -7010,7 +6956,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -7027,7 +6973,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -7039,11 +6985,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -7134,11 +7080,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -7146,7 +7092,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -7163,7 +7109,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -7175,11 +7121,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -7375,11 +7321,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -7387,7 +7333,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -7404,7 +7350,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -7416,11 +7362,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -7512,21 +7458,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -7620,11 +7566,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -7632,7 +7578,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -7649,7 +7595,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -7661,11 +7607,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -7727,21 +7673,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -7822,7 +7768,7 @@ } ] }, - "/v1/cloudaccounts/coxedge": { + "/v1/cloudaccounts/gcp": { "get": { "security": [ { @@ -7835,8 +7781,8 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of CoxEdge cloud accounts", - "operationId": "v1CloudAccountsCoxEdgeList", + "summary": "Retrieves a list of gcp cloud accounts", + "operationId": "v1CloudAccountsGcpList", "parameters": [ { "type": "string", @@ -7886,7 +7832,7 @@ ], "responses": { "200": { - "description": "An array of cloud account items", + "description": "An array of gcp cloud account items", "schema": { "type": "object", "required": [ @@ -7897,15 +7843,15 @@ "type": "array", "uniqueItems": true, "items": { - "description": "CoxEdge cloud account information", + "description": "GCP account information", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -7913,7 +7859,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -7930,7 +7876,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -7942,41 +7888,24 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "CoxEdge cloud account", "type": "object", - "required": [ - "apiBaseUrl", - "apiKey" - ], "properties": { - "apiBaseUrl": { - "description": "The base url - used to make api calls", - "type": "string" - }, - "apiKey": { - "description": "CoxEdge cloud account ApiKey", - "type": "string" - }, - "environment": { - "description": "The environment belonging to the organization", - "type": "string" - }, - "organizationId": { - "description": "The Id of organization", + "jsonCredentials": { + "description": "Gcp cloud account json credentials", "type": "string" }, - "service": { - "description": "The service for which the organization is allowed to provision resources", + "jsonCredentialsFileName": { + "description": "Reference of the credentials stored in the file", "type": "string" } } @@ -8037,23 +7966,23 @@ "tags": [ "v1" ], - "summary": "Creates an CoxEdge cloud account", - "operationId": "v1CloudAccountsCoxEdgeCreate", + "summary": "Creates a GCP cloud account", + "operationId": "v1CloudAccountsGcpCreate", "parameters": [ { - "description": "Request payload to validate CoxEdge cloud account", + "description": "Request payload to validate GCP cloud account", "name": "body", "in": "body", "schema": { - "description": "CoxEdge cloud account information", + "description": "GCP account information", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -8061,7 +7990,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -8078,7 +8007,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -8090,41 +8019,24 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "CoxEdge cloud account", "type": "object", - "required": [ - "apiBaseUrl", - "apiKey" - ], "properties": { - "apiBaseUrl": { - "description": "The base url - used to make api calls", - "type": "string" - }, - "apiKey": { - "description": "CoxEdge cloud account ApiKey", - "type": "string" - }, - "environment": { - "description": "The environment belonging to the organization", - "type": "string" - }, - "organizationId": { - "description": "The Id of organization", + "jsonCredentials": { + "description": "Gcp cloud account json credentials", "type": "string" }, - "service": { - "description": "The service for which the organization is allowed to provision resources", + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", "type": "string" } } @@ -8173,7 +8085,7 @@ } } }, - "/v1/cloudaccounts/coxedge/{uid}": { + "/v1/cloudaccounts/gcp/{uid}": { "get": { "security": [ { @@ -8186,8 +8098,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified CoxEdge account", - "operationId": "v1CloudAccountsCoxEdgeGet", + "summary": "Returns the specified GCP cloud account", + "operationId": "v1CloudAccountsGcpGet", "parameters": [ { "type": "string", @@ -8200,15 +8112,15 @@ "200": { "description": "OK", "schema": { - "description": "CoxEdge cloud account information", + "description": "GCP account information", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -8216,7 +8128,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -8233,7 +8145,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -8245,41 +8157,24 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "CoxEdge cloud account", "type": "object", - "required": [ - "apiBaseUrl", - "apiKey" - ], "properties": { - "apiBaseUrl": { - "description": "The base url - used to make api calls", - "type": "string" - }, - "apiKey": { - "description": "CoxEdge cloud account ApiKey", - "type": "string" - }, - "environment": { - "description": "The environment belonging to the organization", - "type": "string" - }, - "organizationId": { - "description": "The Id of organization", + "jsonCredentials": { + "description": "Gcp cloud account json credentials", "type": "string" }, - "service": { - "description": "The service for which the organization is allowed to provision resources", + "jsonCredentialsFileName": { + "description": "Reference of the credentials stored in the file", "type": "string" } } @@ -8311,22 +8206,23 @@ "tags": [ "v1" ], - "summary": "Updates the specified CoxEdge account", - "operationId": "v1CloudAccountsCoxEdgeUpdate", + "summary": "Updates the specified GCP account", + "operationId": "v1CloudAccountsGcpUpdate", "parameters": [ { + "description": "Request payload to validate GCP cloud account", "name": "body", "in": "body", "schema": { - "description": "CoxEdge cloud account information", + "description": "GCP account information", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -8334,7 +8230,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -8351,7 +8247,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -8363,41 +8259,24 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "CoxEdge cloud account", "type": "object", - "required": [ - "apiBaseUrl", - "apiKey" - ], "properties": { - "apiBaseUrl": { - "description": "The base url - used to make api calls", - "type": "string" - }, - "apiKey": { - "description": "CoxEdge cloud account ApiKey", - "type": "string" - }, - "environment": { - "description": "The environment belonging to the organization", - "type": "string" - }, - "organizationId": { - "description": "The Id of organization", + "jsonCredentials": { + "description": "Gcp cloud account json credentials", "type": "string" }, - "service": { - "description": "The service for which the organization is allowed to provision resources", + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", "type": "string" } } @@ -8440,8 +8319,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified CoxEdge account", - "operationId": "v1CloudAccountsCoxEdgeDelete", + "summary": "Deletes the specified GCP account", + "operationId": "v1CloudAccountsGcpDelete", "parameters": [ { "type": "string", @@ -8459,14 +8338,14 @@ "parameters": [ { "type": "string", - "description": "CoxEdge cloud account uid", + "description": "GCP cloud account uid", "name": "uid", "in": "path", "required": true } ] }, - "/v1/cloudaccounts/gcp": { + "/v1/cloudaccounts/maas": { "get": { "security": [ { @@ -8479,8 +8358,8 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of gcp cloud accounts", - "operationId": "v1CloudAccountsGcpList", + "summary": "Retrieves a list of Maas cloud accounts", + "operationId": "v1CloudAccountsMaasList", "parameters": [ { "type": "string", @@ -8530,7 +8409,7 @@ ], "responses": { "200": { - "description": "An array of gcp cloud account items", + "description": "An array of cloud account items", "schema": { "type": "object", "required": [ @@ -8541,15 +8420,13 @@ "type": "array", "uniqueItems": true, "items": { - "description": "GCP account information", + "description": "Maas cloud account information", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -8557,7 +8434,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -8574,7 +8451,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -8586,612 +8463,35 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { "type": "object", + "required": [ + "apiKey", + "apiEndpoint" + ], "properties": { - "jsonCredentials": { - "description": "Gcp cloud account json credentials", + "apiEndpoint": { "type": "string" }, - "jsonCredentialsFileName": { - "description": "Reference of the credentials stored in the file", + "apiKey": { "type": "string" - } - } - }, - "status": { - "description": "Status of the account", - "type": "object", - "properties": { - "state": { - "description": "Cloud account status", - "type": "string" - } - } - } - } - } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } - } - } - } - } - } - }, - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Creates a GCP cloud account", - "operationId": "v1CloudAccountsGcpCreate", - "parameters": [ - { - "description": "Request payload to validate GCP cloud account", - "name": "body", - "in": "body", - "schema": { - "description": "GCP account information", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the account.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "jsonCredentials": { - "description": "Gcp cloud account json credentials", - "type": "string" - }, - "jsonCredentialsFileUid": { - "description": "Reference of the credentials stored in the file", - "type": "string" - } - } - }, - "status": { - "description": "Status of the account", - "type": "object", - "properties": { - "state": { - "description": "Cloud account status", - "type": "string" - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/cloudaccounts/gcp/{uid}": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified GCP cloud account", - "operationId": "v1CloudAccountsGcpGet", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "GCP account information", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the account.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "jsonCredentials": { - "description": "Gcp cloud account json credentials", - "type": "string" - }, - "jsonCredentialsFileName": { - "description": "Reference of the credentials stored in the file", - "type": "string" - } - } - }, - "status": { - "description": "Status of the account", - "type": "object", - "properties": { - "state": { - "description": "Cloud account status", - "type": "string" - } - } - } - } - } - } - } - }, - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates the specified GCP account", - "operationId": "v1CloudAccountsGcpUpdate", - "parameters": [ - { - "description": "Request payload to validate GCP cloud account", - "name": "body", - "in": "body", - "schema": { - "description": "GCP account information", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the account.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "jsonCredentials": { - "description": "Gcp cloud account json credentials", - "type": "string" - }, - "jsonCredentialsFileUid": { - "description": "Reference of the credentials stored in the file", - "type": "string" - } - } - }, - "status": { - "description": "Status of the account", - "type": "object", - "properties": { - "state": { - "description": "Cloud account status", - "type": "string" - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "delete": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Deletes the specified GCP account", - "operationId": "v1CloudAccountsGcpDelete", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "GCP cloud account uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/cloudaccounts/maas": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of Maas cloud accounts", - "operationId": "v1CloudAccountsMaasList", - "parameters": [ - { - "type": "string", - "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", - "name": "fields", - "in": "query" - }, - { - "type": "string", - "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", - "name": "filters", - "in": "query" - }, - { - "type": "string", - "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", - "name": "orderBy", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "default": 50, - "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { - "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of cloud account items", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Maas cloud account information", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the account.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "required": [ - "apiKey", - "apiEndpoint" - ], - "properties": { - "apiEndpoint": { - "type": "string" - }, - "apiKey": { - "type": "string" - }, - "preferredSubnets": { - "description": "list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"", - "type": "array", - "items": { - "type": "string", - "default": "" - } + }, + "preferredSubnets": { + "description": "list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"", + "type": "array", + "items": { + "type": "string", + "default": "" + } } } }, @@ -9263,11 +8563,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -9275,7 +8573,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -9292,7 +8590,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -9304,11 +8602,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -9411,11 +8709,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -9423,7 +8719,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -9440,7 +8736,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -9452,11 +8748,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -9522,11 +8818,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -9534,7 +8828,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -9551,7 +8845,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -9563,11 +8857,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -10161,11 +9455,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -10173,7 +9467,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -10190,7 +9484,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -10202,11 +9496,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -10322,11 +9616,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -10334,7 +9628,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -10351,7 +9645,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -10363,11 +9657,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -10490,11 +9784,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -10502,7 +9796,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -10519,7 +9813,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -10531,11 +9825,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -10621,11 +9915,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -10633,7 +9927,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -10650,7 +9944,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -10662,11 +9956,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -11388,7 +10682,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -11405,7 +10699,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -11417,11 +10711,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -11559,11 +10853,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -11571,7 +10865,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -11588,7 +10882,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -11600,11 +10894,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -11694,11 +10988,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -11706,7 +11000,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -11723,7 +11017,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -11735,11 +11029,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -11836,11 +11130,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -11848,7 +11142,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -11865,7 +11159,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -11877,11 +11171,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -11941,11 +11235,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -11953,7 +11247,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -11970,7 +11264,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -11982,11 +11276,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -12151,11 +11445,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -12163,7 +11457,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -12180,7 +11474,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -12192,11 +11486,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -12294,11 +11588,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -12306,7 +11600,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -12323,7 +11617,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -12335,11 +11629,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -12444,11 +11738,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -12456,7 +11750,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -12473,7 +11767,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -12485,11 +11779,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -12558,11 +11852,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -12570,7 +11864,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -12587,7 +11881,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -12599,11 +11893,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -12962,11 +12256,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -12974,7 +12268,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -12991,7 +12285,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -13003,11 +12297,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -13025,11 +12319,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -13264,7 +12558,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -13351,7 +12645,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -13397,7 +12691,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -13856,7 +13150,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -13900,7 +13194,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -13946,7 +13240,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -14111,7 +13405,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -14155,7 +13449,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -14201,7 +13495,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -14348,11 +13642,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -14360,7 +13652,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -14377,7 +13669,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -14389,11 +13681,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -14645,11 +13937,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -14657,7 +13947,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -14674,7 +13964,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -14686,11 +13976,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -14966,11 +14256,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -14978,7 +14266,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -14995,7 +14283,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -15007,11 +14295,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -15234,11 +14522,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -15246,7 +14532,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -15263,7 +14549,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -15275,11 +14561,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -15573,11 +14859,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -15585,7 +14871,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -15602,7 +14888,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -15614,11 +14900,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -15636,11 +14922,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -15789,7 +15075,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -15855,7 +15141,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -15901,7 +15187,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -16239,7 +15525,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -16283,7 +15569,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -16329,7 +15615,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -16530,7 +15816,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -16574,7 +15860,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -16620,7 +15906,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -16767,11 +16053,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -16779,7 +16063,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -16796,7 +16080,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -16808,11 +16092,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -17047,11 +16331,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -17059,7 +16341,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -17076,7 +16358,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -17088,11 +16370,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -17351,11 +16633,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -17363,7 +16643,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -17380,7 +16660,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -17392,11 +16672,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -17602,11 +16882,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -17614,7 +16892,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -17631,7 +16909,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -17643,11 +16921,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -17924,11 +17202,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -17936,7 +17214,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -17953,7 +17231,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -17965,11 +17243,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -17987,11 +17265,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -18226,7 +17504,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -18313,7 +17591,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -18359,7 +17637,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -18818,7 +18096,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -18862,7 +18140,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -18908,7 +18186,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -19073,7 +18351,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -19117,7 +18395,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -19163,7 +18441,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -19311,11 +18589,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -19323,7 +18599,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -19340,7 +18616,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -19352,11 +18628,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -19608,11 +18884,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -19620,7 +18894,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -19637,7 +18911,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -19649,11 +18923,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -19930,11 +19204,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -19942,7 +19214,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -19959,7 +19231,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -19971,11 +19243,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -20198,11 +19470,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -20210,7 +19480,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -20227,7 +19497,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -20239,11 +19509,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -20537,7 +19807,7 @@ "type": "object", "properties": { "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -20545,7 +19815,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -20562,7 +19832,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -20574,11 +19844,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -20596,11 +19866,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -20647,7 +19917,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -20679,7 +19949,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false }, @@ -20834,7 +20104,7 @@ "x-omitempty": false }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -20866,7 +20136,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -20973,7 +20243,7 @@ "x-omitempty": false }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -21005,7 +20275,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -21159,11 +20429,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -21171,7 +20439,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -21188,7 +20456,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -21200,11 +20468,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -21400,11 +20668,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -21412,7 +20678,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -21429,7 +20695,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -21441,11 +20707,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -21672,11 +20938,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -21684,7 +20948,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -21701,7 +20965,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -21713,11 +20977,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -21884,11 +21148,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -21896,7 +21158,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -21913,7 +21175,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -21925,11 +21187,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -22143,8 +21405,8 @@ } ] }, - "/v1/cloudconfigs/coxedge/{configUid}": { - "get": { + "/v1/cloudconfigs/coxedge/{configUid}/machinePools/{machinePoolName}/machines": { + "post": { "security": [ { "ApiKey": [] @@ -22156,29 +21418,20 @@ "tags": [ "v1" ], - "summary": "Returns the specified CoxEdge cloud config", - "operationId": "v1CloudConfigsCoxEdgeGet", + "summary": "Adds the machine to cloud config's machine pool", + "operationId": "v1CloudConfigsCoxEdgePoolMachinesAdd", "parameters": [ { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", + "name": "body", + "in": "body", "schema": { - "description": "CoxEdgeCloudConfig is the Schema for the coxedgecloudconfigs API", + "description": "CoxEdge cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", "type": "string" }, "metadata": { @@ -22186,7 +21439,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -22203,7 +21456,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -22215,523 +21468,22 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "CoxEdgeCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", - "type": "object", - "properties": { - "cloudAccountRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "clusterConfig": { - "description": "Cluster level configuration for coxedge cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "sshAuthorizedKeys", - "coxEdgeLoadBalancerConfig" - ], - "properties": { - "coxEdgeLoadBalancerConfig": { - "description": "CoxEdge loadbalancer config", - "type": "object", - "properties": { - "pops": { - "description": "CoxEdge PoPs - geographical location for the loadbalancer", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "coxEdgeWorkerLoadBalancerConfig": { - "description": "CoxEdge loadbalancer config", - "type": "object", - "properties": { - "pops": { - "description": "CoxEdge PoPs - geographical location for the loadbalancer", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "environment": { - "type": "string" - }, - "organizationId": { - "type": "string" - }, - "sshAuthorizedKeys": { - "description": "CoxEdge ssh authorized keys", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "machinePoolConfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "isControlPlane" - ], - "properties": { - "additionalLabels": { - "description": "additionalLabels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deployments": { - "type": "array", - "items": { - "properties": { - "cpuUtilization": { - "type": "integer", - "format": "int32" - }, - "enableAutoScaling": { - "type": "boolean" - }, - "instancesPerPop": { - "type": "integer", - "format": "int32" - }, - "maxInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "minInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "pops": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "instanceConfig": { - "properties": { - "category": { - "type": "string" - }, - "cpuSet": { - "type": "integer", - "format": "int64" - }, - "diskGiB": { - "type": "integer", - "format": "int64" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean" - }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "persistentStorages": { - "description": "Array of coxedge load persistent storages", - "type": "array", - "uniqueItems": true, - "items": { - "description": "CoxEdge load persistent storage", - "type": "object", - "properties": { - "path": { - "description": "Coxedge load persistent storage path", - "type": "string" - }, - "size": { - "description": "Coxedge load persistent storage size", - "type": "integer", - "format": "int64" - } - } - } - }, - "securityGroupRules": { - "type": "array", - "items": { - "properties": { - "action": { - "type": "string", - "enum": [ - "block", - "allow" - ] - }, - "description": { - "type": "string" - }, - "portRange": { - "type": "string" - }, - "protocol": { - "type": "string", - "enum": [ - "TCP", - "UDP", - "TCP_UDP", - "ESP", - "AH", - "ICMP", - "GRE" - ] - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32" - }, - "spec": { - "type": "string" - }, - "taints": { - "description": "master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean" - } - } - } - } - } - }, - "status": { - "description": "CoxEdgeCloudConfigStatus defines the observed state of CoxEdgeCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", - "type": "object", - "properties": { - "conditions": { - "description": "spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`", - "type": "array", - "items": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "imageID": { - "description": "For mold controller to identify if is there any changes in Pack", - "type": "string" - } - } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] - }, - "/v1/cloudconfigs/coxedge/{configUid}/clusterConfig": { - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsCoxEdgeUidClusterConfigUpdate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "CoxEdge cloud cluster config entity", - "type": "object", - "properties": { - "clusterConfig": { - "description": "Cluster level configuration for coxedge cloud and applicable for all the machine pools", + "description": "CoxEdge cloud VM definition spec", "type": "object", - "required": [ - "sshAuthorizedKeys", - "coxEdgeLoadBalancerConfig" - ], "properties": { - "coxEdgeLoadBalancerConfig": { - "description": "CoxEdge loadbalancer config", - "type": "object", - "properties": { - "pops": { - "description": "CoxEdge PoPs - geographical location for the loadbalancer", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "coxEdgeWorkerLoadBalancerConfig": { - "description": "CoxEdge loadbalancer config", - "type": "object", - "properties": { - "pops": { - "description": "CoxEdge PoPs - geographical location for the loadbalancer", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "environment": { - "type": "string" - }, - "organizationId": { - "type": "string" + "addAnycastIpAddress": { + "type": "boolean" }, - "sshAuthorizedKeys": { - "description": "CoxEdge ssh authorized keys", - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] - }, - "/v1/cloudconfigs/coxedge/{configUid}/machinePools": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Creates a CoxEdge cloud config's machine pool", - "operationId": "v1CloudConfigsCoxEdgeMachinePoolCreate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "properties": { "deployments": { "type": "array", "items": { @@ -22767,10 +21519,11 @@ } } }, + "image": { + "type": "string" + }, "persistentStorages": { - "description": "Array of coxedge load persistent storages", "type": "array", - "uniqueItems": true, "items": { "description": "CoxEdge load persistent storage", "type": "object", @@ -22787,36 +21540,541 @@ } } }, - "securityGroupRules": { + "ports": { "type": "array", "items": { + "description": "CoxEdge network port", + "type": "object", "properties": { - "action": { + "protocol": { + "type": "string" + }, + "publicPort": { + "type": "string" + }, + "publicPortDesc": { + "type": "string" + } + } + } + }, + "providerId": { + "type": "string" + }, + "specs": { + "type": "string" + }, + "sshAuthorizedKeys": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster's cloud config uid", + "name": "configUid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Machine pool name", + "name": "machinePoolName", + "in": "path", + "required": true + } + ] + }, + "/v1/cloudconfigs/edge-native/{configUid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified edge-native cloud config", + "operationId": "v1CloudConfigsEdgeNativeGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "EdgeNativeCloudConfig is the Schema for the edgenativecloudconfigs API", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "EdgeNativeCloudConfigSpec defines the desired state of EdgeNativeCloudConfig", + "type": "object", + "required": [ + "clusterConfig", + "machinePoolConfig" + ], + "properties": { + "clusterConfig": { + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { "type": "string", - "enum": [ - "block", - "allow" - ] + "default": "" + } + }, + "overlayNetworkConfiguration": { + "type": "object", + "properties": { + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" + }, + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "hosts" + ], + "properties": { + "additionalLabels": { + "description": "AdditionalLabels", + "type": "object", + "additionalProperties": { + "type": "string", + "default": "" + } }, - "description": { + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string", + "default": "" + } + }, + "hosts": { + "type": "array", + "items": { + "description": "EdgeNativeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "IsCandidateCaption": { + "description": "Is Edge host nominated as candidate", + "type": "boolean", + "default": false, + "x-omitempty": false + }, + "caCert": { + "description": "CACert for TLS connections", + "type": "string" + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string", + "default": "" + }, + "hostName": { + "description": "Qualified name of host", + "type": "string", + "default": "" + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string", + "default": "" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated. Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated. Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { "type": "string" }, - "portRange": { + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "osType": { + "description": "the os type for the pool, must be supported by the provider", "type": "string" }, - "protocol": { + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + } + } + } + } + }, + "status": { + "description": "EdgeNativeCloudConfigStatus defines the observed state of EdgeNativeCloudConfig", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", - "enum": [ - "TCP", - "UDP", - "TCP_UDP", - "ESP", - "AH", - "ICMP", - "GRE" - ] + "format": "date-time" }, - "source": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { "type": "string" }, "type": { @@ -22825,10 +22083,228 @@ } } }, - "spec": { + "nodeImage": { + "type": "string" + }, + "sourceImageId": { + "description": "SourceImageId can be from packref's annotations or from pack.json", "type": "string" } } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster's cloud config uid", + "name": "configUid", + "in": "path", + "required": true + } + ] + }, + "/v1/cloudconfigs/edge-native/{configUid}/clusterConfig": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the cluster configuration information", + "operationId": "v1CloudConfigsEdgeNativeUidClusterConfig", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "EdgeNative cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "type": "object", + "properties": { + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + } + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "overlayNetworkConfiguration": { + "type": "object", + "properties": { + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" + }, + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false + } + } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster's cloud config uid", + "name": "configUid", + "in": "path", + "required": true + } + ] + }, + "/v1/cloudconfigs/edge-native/{configUid}/machinePools": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Creates a edge-native cloud config's machine pool", + "operationId": "v1CloudConfigsEdgeNativeMachinePoolCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "cloudConfig": { + "required": [ + "edgeHosts" + ], + "properties": { + "edgeHosts": { + "type": "array", + "uniqueItems": true, + "items": { + "required": [ + "hostUid" + ], + "properties": { + "hostName": { + "description": "Edge host name", + "type": "string" + }, + "hostUid": { + "description": "Edge host id", + "type": "string" + }, + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } + }, + "nicName": { + "description": "Deprecated - Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated - Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] + } + } + } + } + } }, "poolConfig": { "description": "Machine pool configuration for the cluster", @@ -22859,7 +22335,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -22903,7 +22379,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -22949,7 +22425,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -22998,7 +22474,7 @@ } ] }, - "/v1/cloudconfigs/coxedge/{configUid}/machinePools/{machinePoolName}": { + "/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}": { "put": { "security": [ { @@ -23011,116 +22487,83 @@ "tags": [ "v1" ], - "summary": "Updates the specified CoxEdge cloud config's machine pool", - "operationId": "v1CloudConfigsCoxEdgeMachinePoolUpdate", + "summary": "Updates the specified edge-native cloud config's machine pool", + "operationId": "v1CloudConfigsEdgeNativeMachinePoolUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { "type": "object", - "required": [ - "cloudConfig" - ], "properties": { "cloudConfig": { - "type": "object", + "required": [ + "edgeHosts" + ], "properties": { - "deployments": { + "edgeHosts": { "type": "array", + "uniqueItems": true, "items": { + "required": [ + "hostUid" + ], "properties": { - "cpuUtilization": { - "type": "integer", - "format": "int32" - }, - "enableAutoScaling": { - "type": "boolean" - }, - "instancesPerPop": { - "type": "integer", - "format": "int32" - }, - "maxInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "minInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "name": { + "hostName": { + "description": "Edge host name", "type": "string" }, - "pops": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "persistentStorages": { - "description": "Array of coxedge load persistent storages", - "type": "array", - "uniqueItems": true, - "items": { - "description": "CoxEdge load persistent storage", - "type": "object", - "properties": { - "path": { - "description": "Coxedge load persistent storage path", + "hostUid": { + "description": "Edge host id", "type": "string" }, - "size": { - "description": "Coxedge load persistent storage size", - "type": "integer", - "format": "int64" - } - } - } - }, - "securityGroupRules": { - "type": "array", - "items": { - "properties": { - "action": { - "type": "string", - "enum": [ - "block", - "allow" - ] + "nic": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { + "type": "string" + } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + } }, - "description": { + "nicName": { + "description": "Deprecated - Edge host nic name", "type": "string" }, - "portRange": { + "staticIP": { + "description": "Deprecated - Edge host static IP", "type": "string" }, - "protocol": { + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", "type": "string", "enum": [ - "TCP", - "UDP", - "TCP_UDP", - "ESP", - "AH", - "ICMP", - "GRE" + "primary", + "secondary" ] - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" } } } - }, - "spec": { - "type": "string" } } }, @@ -23153,7 +22596,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -23197,7 +22640,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -23243,7 +22686,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -23278,7 +22721,7 @@ "v1" ], "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsCoxEdgeMachinePoolDelete", + "operationId": "v1CloudConfigsEdgeNativeMachinePoolDelete", "parameters": [ { "type": "string", @@ -23310,7 +22753,7 @@ } ] }, - "/v1/cloudconfigs/coxedge/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}/machines": { "get": { "security": [ { @@ -23323,48 +22766,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of CoxEdge machines", - "operationId": "v1CloudConfigsCoxEdgePoolMachinesList", + "summary": "Retrieves a list of edge-native machines", + "operationId": "v1CloudConfigsEdgeNativePoolMachinesList", "parameters": [ - { - "type": "string", - "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", - "name": "fields", - "in": "query" - }, - { - "type": "string", - "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", - "name": "filters", - "in": "query" - }, - { - "type": "string", - "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", - "name": "orderBy", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "default": 50, - "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { - "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -23374,9 +22778,9 @@ ], "responses": { "200": { - "description": "An array of CoxEdge machine items", + "description": "An array of edge-native machine items", "schema": { - "description": "CoxEdge machine list", + "description": "EdgeNative machine list", "type": "object", "required": [ "items" @@ -23386,15 +22790,12 @@ "type": "array", "uniqueItems": true, "items": { - "description": "CoxEdge cloud VM definition", - "type": "object", + "description": "EdgeNative cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -23402,7 +22803,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -23419,7 +22820,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -23431,107 +22832,72 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "CoxEdge cloud VM definition spec", + "description": "EdgeNative cloud VM definition spec", "type": "object", "properties": { - "addAnycastIpAddress": { - "type": "boolean" + "edgeHostUid": { + "type": "string" + }, + "instanceType": { + "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name is the instance name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } }, - "deployments": { + "nics": { "type": "array", + "uniqueItems": true, "items": { + "description": "Generic network interface", + "type": "object", "properties": { - "cpuUtilization": { - "type": "integer", - "format": "int32" - }, - "enableAutoScaling": { - "type": "boolean" - }, - "instancesPerPop": { - "type": "integer", - "format": "int32" - }, - "maxInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "minInstancesPerPop": { + "index": { "type": "integer", - "format": "int32" + "format": "int8" }, - "name": { + "networkName": { "type": "string" }, - "pops": { + "privateIPs": { "type": "array", "items": { "type": "string" } - } - } - } - }, - "image": { - "type": "string" - }, - "persistentStorages": { - "type": "array", - "items": { - "description": "CoxEdge load persistent storage", - "type": "object", - "properties": { - "path": { - "description": "Coxedge load persistent storage path", - "type": "string" - }, - "size": { - "description": "Coxedge load persistent storage size", - "type": "integer", - "format": "int64" - } - } - } - }, - "ports": { - "type": "array", - "items": { - "description": "CoxEdge network port", - "type": "object", - "properties": { - "protocol": { - "type": "string" }, - "publicPort": { - "type": "string" - }, - "publicPortDesc": { + "publicIp": { "type": "string" } } } - }, - "providerId": { - "type": "string" - }, - "specs": { - "type": "string" - }, - "sshAuthorizedKeys": { - "type": "array", - "items": { - "type": "string" - } } } }, @@ -23606,32 +22972,6 @@ } } } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } } } } @@ -23650,22 +22990,19 @@ "tags": [ "v1" ], - "summary": "Adds the machine to cloud config's machine pool", - "operationId": "v1CloudConfigsCoxEdgePoolMachinesAdd", + "summary": "Adds the edge-native machine to cloud config's machine pool", + "operationId": "v1CloudConfigsEdgeNativePoolMachinesAdd", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "CoxEdge cloud VM definition", - "type": "object", + "description": "EdgeNative cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -23673,7 +23010,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -23690,7 +23027,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -23702,107 +23039,72 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "CoxEdge cloud VM definition spec", + "description": "EdgeNative cloud VM definition spec", "type": "object", "properties": { - "addAnycastIpAddress": { - "type": "boolean" + "edgeHostUid": { + "type": "string" }, - "deployments": { + "instanceType": { + "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name is the instance name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { "type": "array", + "uniqueItems": true, "items": { + "description": "Generic network interface", + "type": "object", "properties": { - "cpuUtilization": { - "type": "integer", - "format": "int32" - }, - "enableAutoScaling": { - "type": "boolean" - }, - "instancesPerPop": { - "type": "integer", - "format": "int32" - }, - "maxInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "minInstancesPerPop": { + "index": { "type": "integer", - "format": "int32" + "format": "int8" }, - "name": { + "networkName": { "type": "string" }, - "pops": { + "privateIPs": { "type": "array", "items": { "type": "string" } - } - } - } - }, - "image": { - "type": "string" - }, - "persistentStorages": { - "type": "array", - "items": { - "description": "CoxEdge load persistent storage", - "type": "object", - "properties": { - "path": { - "description": "Coxedge load persistent storage path", - "type": "string" - }, - "size": { - "description": "Coxedge load persistent storage size", - "type": "integer", - "format": "int64" - } - } - } - }, - "ports": { - "type": "array", - "items": { - "description": "CoxEdge network port", - "type": "object", - "properties": { - "protocol": { - "type": "string" }, - "publicPort": { - "type": "string" - }, - "publicPortDesc": { + "publicIp": { "type": "string" } } } - }, - "providerId": { - "type": "string" - }, - "specs": { - "type": "string" - }, - "sshAuthorizedKeys": { - "type": "array", - "items": { - "type": "string" - } } } }, @@ -23925,7 +23227,7 @@ } ] }, - "/v1/cloudconfigs/coxedge/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { "get": { "security": [ { @@ -23938,8 +23240,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified CoxEdge machine", - "operationId": "v1CloudConfigsCoxEdgePoolMachinesUidGet", + "summary": "Returns the specified edge-native machine", + "operationId": "v1CloudConfigsEdgeNativePoolMachinesUidGet", "parameters": [ { "type": "string", @@ -23952,15 +23254,12 @@ "200": { "description": "OK", "schema": { - "description": "CoxEdge cloud VM definition", - "type": "object", + "description": "EdgeNative cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -23968,7 +23267,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -23985,7 +23284,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -23997,107 +23296,72 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "CoxEdge cloud VM definition spec", + "description": "EdgeNative cloud VM definition spec", "type": "object", "properties": { - "addAnycastIpAddress": { - "type": "boolean" + "edgeHostUid": { + "type": "string" }, - "deployments": { + "instanceType": { + "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name is the instance name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { "type": "array", + "uniqueItems": true, "items": { + "description": "Generic network interface", + "type": "object", "properties": { - "cpuUtilization": { - "type": "integer", - "format": "int32" - }, - "enableAutoScaling": { - "type": "boolean" - }, - "instancesPerPop": { - "type": "integer", - "format": "int32" - }, - "maxInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "minInstancesPerPop": { + "index": { "type": "integer", - "format": "int32" + "format": "int8" }, - "name": { + "networkName": { "type": "string" }, - "pops": { + "privateIPs": { "type": "array", "items": { "type": "string" } - } - } - } - }, - "image": { - "type": "string" - }, - "persistentStorages": { - "type": "array", - "items": { - "description": "CoxEdge load persistent storage", - "type": "object", - "properties": { - "path": { - "description": "Coxedge load persistent storage path", - "type": "string" - }, - "size": { - "description": "Coxedge load persistent storage size", - "type": "integer", - "format": "int64" - } - } - } - }, - "ports": { - "type": "array", - "items": { - "description": "CoxEdge network port", - "type": "object", - "properties": { - "protocol": { - "type": "string" - }, - "publicPort": { - "type": "string" }, - "publicPortDesc": { + "publicIp": { "type": "string" } } } - }, - "providerId": { - "type": "string" - }, - "specs": { - "type": "string" - }, - "sshAuthorizedKeys": { - "type": "array", - "items": { - "type": "string" - } } } }, @@ -24187,22 +23451,19 @@ "tags": [ "v1" ], - "summary": "Updates the specified machine to the cloud config's machine pool", - "operationId": "v1CloudConfigsCoxEdgePoolMachinesUidUpdate", + "summary": "Updates the specified machine to cloud config's machine pool", + "operationId": "v1CloudConfigsEdgeNativePoolMachinesUidUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "CoxEdge cloud VM definition", - "type": "object", + "description": "EdgeNative cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -24210,7 +23471,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -24227,7 +23488,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -24239,107 +23500,72 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "CoxEdge cloud VM definition spec", + "description": "EdgeNative cloud VM definition spec", "type": "object", "properties": { - "addAnycastIpAddress": { - "type": "boolean" + "edgeHostUid": { + "type": "string" }, - "deployments": { + "instanceType": { + "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name is the instance name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "type": "integer", + "format": "int32" + } + } + }, + "nics": { "type": "array", + "uniqueItems": true, "items": { + "description": "Generic network interface", + "type": "object", "properties": { - "cpuUtilization": { - "type": "integer", - "format": "int32" - }, - "enableAutoScaling": { - "type": "boolean" - }, - "instancesPerPop": { - "type": "integer", - "format": "int32" - }, - "maxInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "minInstancesPerPop": { + "index": { "type": "integer", - "format": "int32" + "format": "int8" }, - "name": { + "networkName": { "type": "string" }, - "pops": { + "privateIPs": { "type": "array", "items": { "type": "string" } - } - } - } - }, - "image": { - "type": "string" - }, - "persistentStorages": { - "type": "array", - "items": { - "description": "CoxEdge load persistent storage", - "type": "object", - "properties": { - "path": { - "description": "Coxedge load persistent storage path", - "type": "string" - }, - "size": { - "description": "Coxedge load persistent storage size", - "type": "integer", - "format": "int64" - } - } - } - }, - "ports": { - "type": "array", - "items": { - "description": "CoxEdge network port", - "type": "object", - "properties": { - "protocol": { - "type": "string" }, - "publicPort": { - "type": "string" - }, - "publicPortDesc": { + "publicIp": { "type": "string" } } } - }, - "providerId": { - "type": "string" - }, - "specs": { - "type": "string" - }, - "sshAuthorizedKeys": { - "type": "array", - "items": { - "type": "string" - } } } }, @@ -24440,8 +23666,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified CoxEdge machine", - "operationId": "v1CloudConfigsCoxEdgePoolMachinesUidDelete", + "summary": "Deletes the specified edge-native machine", + "operationId": "v1CloudConfigsEdgeNativePoolMachinesUidDelete", "parameters": [ { "type": "string", @@ -24480,7 +23706,7 @@ } ] }, - "/v1/cloudconfigs/edge-native/{configUid}": { + "/v1/cloudconfigs/eks/{configUid}": { "get": { "security": [ { @@ -24493,8 +23719,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified edge-native cloud config", - "operationId": "v1CloudConfigsEdgeNativeGet", + "summary": "Returns the specified EKS cloud config", + "operationId": "v1CloudConfigsEksGet", "parameters": [ { "type": "string", @@ -24507,15 +23733,23 @@ "200": { "description": "OK", "schema": { - "description": "EdgeNativeCloudConfig is the Schema for the edgenativecloudconfigs API", + "description": "EksCloudConfig is the Schema for the ekscloudconfigs API", "type": "object", "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, "metadata": { "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -24532,7 +23766,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -24544,197 +23778,393 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "EdgeNativeCloudConfigSpec defines the desired state of EdgeNativeCloudConfig", + "description": "EksCloudConfigSpec defines the cloud configuration input by user", "type": "object", - "required": [ - "clusterConfig", - "machinePoolConfig" - ], "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, "clusterConfig": { - "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "description": "EksClusterConfig defines EKS specific config", "type": "object", + "required": [ + "region" + ], "properties": { - "controlPlaneEndpoint": { + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "type": "array", + "items": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + } + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", "type": "object", "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", - "type": "string" + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", + "type": "boolean" }, - "host": { - "description": "Host is FQDN(DDNS) or IP", + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", "type": "string" }, - "type": { - "description": "Type indicates DDNS or VIP", - "type": "string" + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } } } }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", - "type": "array", - "items": { - "type": "string", - "default": "" - } - }, - "overlayNetworkConfiguration": { + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", "type": "object", "properties": { - "cidr": { - "description": "CIDR is the CIDR of the overlay network", - "type": "string" + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" }, - "enable": { - "description": "Enable is a flag to enable overlay network", - "type": "boolean", - "x-omitempty": false + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } } } }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string", - "default": "" - } + "region": { + "description": "The AWS Region the cluster lives in.", + "type": "string" }, - "staticIp": { - "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", - "type": "boolean" + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" } } }, - "machinePoolConfig": { + "fargateProfiles": { "type": "array", "items": { + "description": "FargateProfile defines the desired state of FargateProfile", "type": "object", "required": [ - "hosts" + "name" ], "properties": { - "additionalLabels": { - "description": "AdditionalLabels", - "type": "object", - "additionalProperties": { - "type": "string", - "default": "" - } - }, "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", "type": "object", "additionalProperties": { - "type": "string", - "default": "" + "type": "string" } }, - "hosts": { + "name": { + "description": "name specifies the profile name.", + "type": "string" + }, + "selectors": { + "description": "Selectors specify fargate pod selectors.", "type": "array", "items": { - "description": "EdgeNativeHost is the underlying appliance", + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", "type": "object", "required": [ - "hostUid", - "hostAddress" + "namespace" ], "properties": { - "IsCandidateCaption": { - "description": "Is Edge host nominated as candidate", - "type": "boolean", - "default": false, - "x-omitempty": false + "labels": { + "description": "Labels specifies which pod labels this selector should match.", + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "caCert": { - "description": "CACert for TLS connections", + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", "type": "string" - }, - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the Host", - "type": "string", - "default": "" - }, - "hostName": { - "description": "Qualified name of host", - "type": "string", - "default": "" - }, - "hostUid": { - "description": "HostUid is the ID of the EdgeHost", - "type": "string", - "default": "" - }, - "nic": { + } + } + } + }, + "subnetIds": { + "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "machinePoolConfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "isControlPlane" + ], + "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", "type": "object", "properties": { - "dns": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", "type": "array", + "uniqueItems": true, "items": { - "type": "string" + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } } }, - "gateway": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - }, - "macAddr": { - "type": "string" - }, - "nicName": { - "type": "string" - }, - "subnet": { + "id": { + "description": "ID of resource", "type": "string" } } - }, - "nicName": { - "description": "Deprecated. Edge host nic name", - "type": "string" - }, - "staticIP": { - "description": "Deprecated. Edge host static IP", - "type": "string" - }, - "twoNodeCandidatePriority": { - "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", - "type": "string", - "enum": [ - "primary", - "secondary" - ] } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" } } }, + "instanceType": { + "description": "instance type", + "type": "string" + }, "isControlPlane": { "description": "whether this pool is for control plane", - "type": "boolean" + "type": "boolean", + "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { - "type": "string", - "default": "" + "type": "string" } }, "machinePoolProperties": { @@ -24769,18 +24199,37 @@ "type": "integer", "format": "int32" }, - "osType": { - "description": "the os type for the pool, must be supported by the provider", - "type": "string" + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64" }, "size": { "description": "size of the pool, number of machines", "type": "integer", "format": "int32" }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", + "uniqueItems": true, "items": { "description": "Taint", "type": "object", @@ -24824,65 +24273,174 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean" + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false } } } } } - }, - "status": { - "description": "EdgeNativeCloudConfigStatus defines the observed state of EdgeNativeCloudConfig", + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster's cloud config uid", + "name": "configUid", + "in": "path", + "required": true + } + ] + }, + "/v1/cloudconfigs/eks/{configUid}/clusterConfig": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the cluster configuration information", + "operationId": "v1CloudConfigsEksUidClusterConfig", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "EKS cloud cluster config entity", + "type": "object", + "properties": { + "clusterConfig": { + "description": "EksClusterConfig defines EKS specific config", "type": "object", + "required": [ + "region" + ], "properties": { - "conditions": { + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", "type": "array", "items": { + "description": "EksAddon represents a EKS addon", "type": "object", "required": [ - "type", - "status" + "name", + "version" ], "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", "type": "string" }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "name": { + "description": "Name is the name of the addon", "type": "string" }, - "status": { + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", "type": "string" }, - "type": { + "version": { + "description": "Version is the version of the addon to use", "type": "string" } } } }, - "nodeImage": { + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", "type": "string" }, - "sourceImageId": { - "description": "SourceImageId can be from packref's annotations or from pack.json", + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "type": "object", + "properties": { + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", + "type": "boolean" + }, + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "region": { + "description": "The AWS Region the cluster lives in.", + "type": "string" + }, + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", "type": "string" } } } } } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" } } }, @@ -24896,7 +24454,7 @@ } ] }, - "/v1/cloudconfigs/edge-native/{configUid}/clusterConfig": { + "/v1/cloudconfigs/eks/{configUid}/fargateProfiles": { "put": { "security": [ { @@ -24909,70 +24467,67 @@ "tags": [ "v1" ], - "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsEdgeNativeUidClusterConfig", + "summary": "Updates EKS cloud config's fargate profiles", + "operationId": "v1CloudConfigsEksUidFargateProfilesUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "EdgeNative cloud cluster config entity", + "description": "Fargate profiles", "type": "object", "properties": { - "clusterConfig": { - "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", - "type": "object", - "properties": { - "controlPlaneEndpoint": { - "type": "object", - "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", - "type": "string" - }, - "host": { - "description": "Host is FQDN(DDNS) or IP", - "type": "string" - }, - "type": { - "description": "Type indicates DDNS or VIP", + "fargateProfiles": { + "type": "array", + "items": { + "description": "FargateProfile defines the desired state of FargateProfile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", + "type": "object", + "additionalProperties": { "type": "string" } - } - }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", - "type": "array", - "items": { - "type": "string", - "default": "" - } - }, - "overlayNetworkConfiguration": { - "type": "object", - "properties": { - "cidr": { - "description": "CIDR is the CIDR of the overlay network", + }, + "name": { + "description": "name specifies the profile name.", + "type": "string" + }, + "selectors": { + "description": "Selectors specify fargate pod selectors.", + "type": "array", + "items": { + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "labels": { + "description": "Labels specifies which pod labels this selector should match.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", + "type": "string" + } + } + } + }, + "subnetIds": { + "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", + "type": "array", + "items": { "type": "string" - }, - "enable": { - "description": "Enable is a flag to enable overlay network", - "type": "boolean", - "x-omitempty": false } } - }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string", - "default": "" - } - }, - "staticIp": { - "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", - "type": "boolean" } } } @@ -25002,7 +24557,7 @@ } ] }, - "/v1/cloudconfigs/edge-native/{configUid}/machinePools": { + "/v1/cloudconfigs/eks/{configUid}/machinePools": { "post": { "security": [ { @@ -25015,80 +24570,175 @@ "tags": [ "v1" ], - "summary": "Creates a edge-native cloud config's machine pool", - "operationId": "v1CloudConfigsEdgeNativeMachinePoolCreate", + "summary": "Creates an EKS cloud config's machine pool", + "operationId": "v1CloudConfigsEksMachinePoolCreate", "parameters": [ { "name": "body", "in": "body", "schema": { - "type": "object", "properties": { "cloudConfig": { - "required": [ - "edgeHosts" - ], "properties": { - "edgeHosts": { - "type": "array", - "uniqueItems": true, - "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostName": { - "description": "Edge host name", - "type": "string" - }, - "hostUid": { - "description": "Edge host id", - "type": "string" - }, - "nic": { + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", "type": "object", "properties": { - "dns": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", "type": "array", + "uniqueItems": true, "items": { - "type": "string" + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } } }, - "gateway": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - }, - "macAddr": { - "type": "string" - }, - "nicName": { - "type": "string" - }, - "subnet": { + "id": { + "description": "ID of resource", "type": "string" } } - }, - "nicName": { - "description": "Deprecated - Edge host nic name", + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { "type": "string" }, - "staticIP": { - "description": "Deprecated - Edge host static IP", + "id": { "type": "string" - }, - "twoNodeCandidatePriority": { - "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", - "type": "string", - "enum": [ - "primary", - "secondary" - ] } } } @@ -25124,7 +24774,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -25168,7 +24818,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -25214,7 +24864,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -25263,7 +24913,7 @@ } ] }, - "/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}": { + "/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}": { "put": { "security": [ { @@ -25276,80 +24926,175 @@ "tags": [ "v1" ], - "summary": "Updates the specified edge-native cloud config's machine pool", - "operationId": "v1CloudConfigsEdgeNativeMachinePoolUpdate", + "summary": "Updates the specified EKS cloud config's machine pool", + "operationId": "v1CloudConfigsEksMachinePoolUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "type": "object", "properties": { "cloudConfig": { - "required": [ - "edgeHosts" - ], "properties": { - "edgeHosts": { - "type": "array", - "uniqueItems": true, - "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostName": { - "description": "Edge host name", - "type": "string" - }, - "hostUid": { - "description": "Edge host id", - "type": "string" - }, - "nic": { + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", "type": "object", "properties": { - "dns": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", "type": "array", + "uniqueItems": true, "items": { - "type": "string" + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } } }, - "gateway": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - }, - "macAddr": { - "type": "string" - }, - "nicName": { - "type": "string" - }, - "subnet": { + "id": { + "description": "ID of resource", "type": "string" } } - }, - "nicName": { - "description": "Deprecated - Edge host nic name", + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { "type": "string" }, - "staticIP": { - "description": "Deprecated - Edge host static IP", + "id": { "type": "string" - }, - "twoNodeCandidatePriority": { - "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", - "type": "string", - "enum": [ - "primary", - "secondary" - ] } } } @@ -25385,7 +25130,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -25429,7 +25174,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -25475,7 +25220,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -25510,7 +25255,7 @@ "v1" ], "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsEdgeNativeMachinePoolDelete", + "operationId": "v1CloudConfigsEksMachinePoolDelete", "parameters": [ { "type": "string", @@ -25542,7 +25287,7 @@ } ] }, - "/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}/machines": { "get": { "security": [ { @@ -25555,9 +25300,48 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of edge-native machines", - "operationId": "v1CloudConfigsEdgeNativePoolMachinesList", + "summary": "Retrieves a list of EKS machines", + "operationId": "v1CloudConfigsEksPoolMachinesList", "parameters": [ + { + "type": "string", + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "name": "fields", + "in": "query" + }, + { + "type": "string", + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "name": "filters", + "in": "query" + }, + { + "type": "string", + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "name": "orderBy", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -25567,9 +25351,9 @@ ], "responses": { "200": { - "description": "An array of edge-native machine items", + "description": "An array of EKS machine items", "schema": { - "description": "EdgeNative machine list", + "description": "AWS machine list", "type": "object", "required": [ "items" @@ -25579,14 +25363,13 @@ "type": "array", "uniqueItems": true, "items": { - "description": "EdgeNative cloud VM definition", + "description": "AWS cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -25594,7 +25377,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -25611,7 +25394,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -25623,61 +25406,90 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "EdgeNative cloud VM definition spec", + "description": "AWS cloud VM definition spec", "type": "object", + "required": [ + "instanceType", + "vpcId", + "ami" + ], "properties": { - "edgeHostUid": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "type": "string" + }, + "az": { + "type": "string" + }, + "dnsName": { + "type": "string" + }, + "iamProfile": { "type": "string" }, "instanceType": { - "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int32" - }, - "name": { - "description": "Name is the instance name", - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } + "type": "string" }, "nics": { "type": "array", - "uniqueItems": true, "items": { - "description": "Generic network interface", + "description": "AWS network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, - "networkName": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { @@ -25689,6 +25501,21 @@ } } } + }, + "phase": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" } } }, @@ -25763,6 +25590,32 @@ } } } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } } } } @@ -25781,21 +25634,20 @@ "tags": [ "v1" ], - "summary": "Adds the edge-native machine to cloud config's machine pool", - "operationId": "v1CloudConfigsEdgeNativePoolMachinesAdd", + "summary": "Adds the machine to cloud config's machine pool", + "operationId": "v1CloudConfigsEksPoolMachinesAdd", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "EdgeNative cloud VM definition", + "description": "AWS cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -25803,7 +25655,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -25820,7 +25672,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -25832,61 +25684,90 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "EdgeNative cloud VM definition spec", + "description": "AWS cloud VM definition spec", "type": "object", + "required": [ + "instanceType", + "vpcId", + "ami" + ], "properties": { - "edgeHostUid": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "type": "string" + }, + "az": { + "type": "string" + }, + "dnsName": { + "type": "string" + }, + "iamProfile": { "type": "string" }, "instanceType": { - "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int32" - }, - "name": { - "description": "Name is the instance name", - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } + "type": "string" }, "nics": { "type": "array", - "uniqueItems": true, "items": { - "description": "Generic network interface", + "description": "AWS network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, - "networkName": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { @@ -25898,6 +25779,21 @@ } } } + }, + "phase": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" } } }, @@ -26020,7 +25916,7 @@ } ] }, - "/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { "get": { "security": [ { @@ -26033,8 +25929,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified edge-native machine", - "operationId": "v1CloudConfigsEdgeNativePoolMachinesUidGet", + "summary": "Returns the specified EKS machine", + "operationId": "v1CloudConfigsEksPoolMachinesUidGet", "parameters": [ { "type": "string", @@ -26047,14 +25943,13 @@ "200": { "description": "OK", "schema": { - "description": "EdgeNative cloud VM definition", + "description": "AWS cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -26062,7 +25957,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -26079,7 +25974,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -26091,61 +25986,90 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "EdgeNative cloud VM definition spec", + "description": "AWS cloud VM definition spec", "type": "object", + "required": [ + "instanceType", + "vpcId", + "ami" + ], "properties": { - "edgeHostUid": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "type": "string" + }, + "az": { + "type": "string" + }, + "dnsName": { + "type": "string" + }, + "iamProfile": { "type": "string" }, "instanceType": { - "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int32" - }, - "name": { - "description": "Name is the instance name", - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } + "type": "string" }, "nics": { "type": "array", - "uniqueItems": true, "items": { - "description": "Generic network interface", + "description": "AWS network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, - "networkName": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { @@ -26157,6 +26081,21 @@ } } } + }, + "phase": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" } } }, @@ -26246,21 +26185,20 @@ "tags": [ "v1" ], - "summary": "Updates the specified machine to cloud config's machine pool", - "operationId": "v1CloudConfigsEdgeNativePoolMachinesUidUpdate", + "summary": "Updates the specified machine to the cloud config's machine pool", + "operationId": "v1CloudConfigsEksPoolMachinesUidUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "EdgeNative cloud VM definition", + "description": "AWS cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -26268,7 +26206,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -26285,7 +26223,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -26297,61 +26235,90 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "EdgeNative cloud VM definition spec", + "description": "AWS cloud VM definition spec", "type": "object", + "required": [ + "instanceType", + "vpcId", + "ami" + ], "properties": { - "edgeHostUid": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "type": "string" + }, + "az": { + "type": "string" + }, + "dnsName": { + "type": "string" + }, + "iamProfile": { "type": "string" }, "instanceType": { - "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int32" - }, - "name": { - "description": "Name is the instance name", - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } + "type": "string" }, "nics": { "type": "array", - "uniqueItems": true, "items": { - "description": "Generic network interface", + "description": "AWS network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, - "networkName": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { @@ -26363,17 +26330,32 @@ } } } - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { + }, + "phase": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { "conditions": { "type": "array", "items": { @@ -26463,8 +26445,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified edge-native machine", - "operationId": "v1CloudConfigsEdgeNativePoolMachinesUidDelete", + "summary": "Deletes the specified EKS machine", + "operationId": "v1CloudConfigsEksPoolMachinesUidDelete", "parameters": [ { "type": "string", @@ -26503,7 +26485,7 @@ } ] }, - "/v1/cloudconfigs/edge/{configUid}": { + "/v1/cloudconfigs/gcp/{configUid}": { "get": { "security": [ { @@ -26516,8 +26498,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified edge cloud config", - "operationId": "v1CloudConfigsEdgeGet", + "summary": "Returns the specified GCP cloud config", + "operationId": "v1CloudConfigsGcpGet", "parameters": [ { "type": "string", @@ -26530,15 +26512,15 @@ "200": { "description": "OK", "schema": { - "description": "EdgeCloudConfig is the Schema for the Edgecloudconfigs API", + "description": "GcpCloudConfig is the Schema for the gcpcloudconfigs API", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -26546,7 +26528,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -26563,7 +26545,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -26575,33 +26557,70 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "EdgeCloudConfigSpec defines the desired state of EdgeCloudConfig", + "description": "GcpCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", "type": "object", - "required": [ - "clusterConfig", - "machinePoolConfig" - ], "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, "clusterConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", "type": "object", + "required": [ + "project", + "region" + ], "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" + "managedClusterConfig": { + "description": "GCP managed cluster config", + "type": "object", + "properties": { + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" + }, + "location": { + "description": "Can be Region or Zone", + "type": "string" + } } + }, + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" + }, + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" + }, + "region": { + "description": "GCP region for the cluster", + "type": "string" } } }, @@ -26610,7 +26629,8 @@ "items": { "type": "object", "required": [ - "hosts" + "isControlPlane", + "instanceType" ], "properties": { "additionalLabels": { @@ -26627,50 +26647,49 @@ "type": "string" } }, - "hosts": { + "azs": { "type": "array", "items": { - "description": "EdgeHost of Edge clusters", - "type": "object", - "required": [ - "hostUid", - "hostAddress" - ], - "properties": { - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the Host", - "type": "string" - }, - "hostIdentity": { - "type": "object", - "properties": { - "caCert": { - "description": "CACert is the client CA certificate", - "type": "string" - }, - "socketPath": { - "description": "SocketPath is an optional path to the socket on the host, if not using defaults", - "type": "string" - } - } - }, - "hostName": { - "description": "HostName is the name of the EdgeHost", - "type": "string" - }, - "hostUid": { - "description": "HostUid is the ID of the EdgeHost", - "type": "string" - } + "type": "string" + } + }, + "instanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "type": "integer", + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" } } }, + "instanceType": { + "type": "string" + }, "isControlPlane": { "description": "whether this pool is for control plane", "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -26708,13 +26727,29 @@ "type": "integer", "format": "int32" }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, "size": { "description": "size of the pool, number of machines", "type": "integer", "format": "int32" }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -26760,7 +26795,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -26769,9 +26804,15 @@ } }, "status": { + "description": "GcpCloudConfigStatus defines the observed state of GcpCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", "type": "object", "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, "conditions": { + "description": "spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`", "type": "array", "items": { "type": "object", @@ -26807,11 +26848,37 @@ } } }, - "nodeImage": { - "type": "string" + "images": { + "description": "Refers to GCP image", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "roleDigest": { + "description": "this map will be for ansible roles present in each pack", + "type": "object", + "additionalProperties": { + "type": "string" + } }, "sourceImageId": { - "description": "SourceImageId can be from packref's annotations or from pack.json", + "description": "sourceImageId, it can be from packref's annotations or from pack.json", "type": "string" }, "useCapiImage": { @@ -26835,7 +26902,7 @@ } ] }, - "/v1/cloudconfigs/edge/{configUid}/clusterConfig": { + "/v1/cloudconfigs/gcp/{configUid}/clusterConfig": { "put": { "security": [ { @@ -26849,25 +26916,48 @@ "v1" ], "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsEdgeUidClusterConfig", + "operationId": "v1CloudConfigsGcpUidClusterConfig", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Edge cloud cluster config entity", + "description": "Gcp cloud cluster config entity", "type": "object", "properties": { "clusterConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", "type": "object", + "required": [ + "project", + "region" + ], "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" + "managedClusterConfig": { + "description": "GCP managed cluster config", + "type": "object", + "properties": { + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" + }, + "location": { + "description": "Can be Region or Zone", + "type": "string" + } } + }, + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" + }, + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" + }, + "region": { + "description": "GCP region for the cluster", + "type": "string" } } } @@ -26897,7 +26987,7 @@ } ] }, - "/v1/cloudconfigs/edge/{configUid}/machinePools": { + "/v1/cloudconfigs/gcp/{configUid}/machinePools": { "post": { "security": [ { @@ -26910,29 +27000,50 @@ "tags": [ "v1" ], - "summary": "Creates a edge cloud config's machine pool", - "operationId": "v1CloudConfigsEdgeMachinePoolCreate", + "summary": "Creates a Gcp cloud config's machine pool", + "operationId": "v1CloudConfigsGcpMachinePoolCreate", "parameters": [ { "name": "body", "in": "body", "schema": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { + "type": "object", "required": [ - "edgeHosts" + "instanceType" ], "properties": { - "edgeHosts": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnets": { "type": "array", - "uniqueItems": true, "items": { - "required": [ - "hostUid" - ], "properties": { - "hostUid": { + "az": { + "type": "string" + }, + "id": { "type": "string" } } @@ -26969,7 +27080,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -27013,7 +27124,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -27059,7 +27170,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -27108,7 +27219,7 @@ } ] }, - "/v1/cloudconfigs/edge/{configUid}/machinePools/{machinePoolName}": { + "/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}": { "put": { "security": [ { @@ -27121,29 +27232,50 @@ "tags": [ "v1" ], - "summary": "Updates the specified Edge cloud config's machine pool", - "operationId": "v1CloudConfigsEdgeMachinePoolUpdate", + "summary": "Updates the specified GCP cloud config's machine pool", + "operationId": "v1CloudConfigsGcpMachinePoolUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { + "type": "object", "required": [ - "edgeHosts" + "instanceType" ], "properties": { - "edgeHosts": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnets": { "type": "array", - "uniqueItems": true, "items": { - "required": [ - "hostUid" - ], "properties": { - "hostUid": { + "az": { + "type": "string" + }, + "id": { "type": "string" } } @@ -27180,7 +27312,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -27224,7 +27356,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -27270,7 +27402,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -27305,7 +27437,7 @@ "v1" ], "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsEdgeMachinePoolDelete", + "operationId": "v1CloudConfigsGcpMachinePoolDelete", "parameters": [ { "type": "string", @@ -27337,7 +27469,7 @@ } ] }, - "/v1/cloudconfigs/edge/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}/machines": { "get": { "security": [ { @@ -27350,9 +27482,48 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Edge machines", - "operationId": "v1CloudConfigsEdgePoolMachinesList", + "summary": "Retrieves a list of GCP machines", + "operationId": "v1CloudConfigsGcpPoolMachinesList", "parameters": [ + { + "type": "string", + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "name": "fields", + "in": "query" + }, + { + "type": "string", + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "name": "filters", + "in": "query" + }, + { + "type": "string", + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "name": "orderBy", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -27362,9 +27533,9 @@ ], "responses": { "200": { - "description": "An array of Edge machine items", + "description": "An array of GCP machine items", "schema": { - "description": "Edge machine list", + "description": "GCP machine list", "type": "object", "required": [ "items" @@ -27374,15 +27545,13 @@ "type": "array", "uniqueItems": true, "items": { - "description": "Edge cloud VM definition", + "description": "GCP cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -27390,7 +27559,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -27407,7 +27576,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -27419,69 +27588,93 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Edge cloud VM definition spec", + "description": "GCP cloud VM definition spec", "type": "object", + "required": [ + "instanceType" + ], "properties": { - "bootstrapped": { - "type": "boolean" - }, - "customImage": { - "type": "string" - }, - "edgeHostUid": { + "image": { "type": "string" }, - "instanceType": { - "description": "EdgeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], + "instanceConfig": { "properties": { - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", + "category": { + "type": "string" + }, + "cpuSet": { "type": "integer", - "format": "int32" + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" }, "numCPUs": { - "description": "NumCPUs is the number of CPUs", + "description": "NumCPUs is the number of virtual processors in a virtual machine", "type": "integer", "format": "int32" } } }, - "loadBalancerConfigured": { - "type": "boolean" + "instanceType": { + "type": "string" }, - "mounts": { + "nics": { "type": "array", - "uniqueItems": true, "items": { - "description": "Edge mounts", + "description": "GCP network interface", "type": "object", "properties": { - "containerPath": { - "type": "string" + "index": { + "type": "integer", + "format": "int8" }, - "hostPath": { + "networkName": { "type": "string" }, - "readonly": { - "type": "boolean" + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" } } } + }, + "project": { + "type": "string" + }, + "region": { + "type": "string" + }, + "rootDeviceSize": { + "type": "integer", + "format": "int64" + }, + "zone": { + "type": "string" } } }, @@ -27556,6 +27749,32 @@ } } } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } } } } @@ -27574,22 +27793,20 @@ "tags": [ "v1" ], - "summary": "Adds the Edge machine to cloud config's machine pool", - "operationId": "v1CloudConfigsEdgePoolMachinesAdd", + "summary": "Adds the machine to cloud config's machine pool", + "operationId": "v1CloudConfigsGcpPoolMachinesAdd", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Edge cloud VM definition", + "description": "GCP cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -27597,7 +27814,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -27614,7 +27831,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -27626,69 +27843,93 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Edge cloud VM definition spec", + "description": "GCP cloud VM definition spec", "type": "object", + "required": [ + "instanceType" + ], "properties": { - "bootstrapped": { - "type": "boolean" - }, - "customImage": { - "type": "string" - }, - "edgeHostUid": { + "image": { "type": "string" }, - "instanceType": { - "description": "EdgeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], + "instanceConfig": { "properties": { - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", + "category": { + "type": "string" + }, + "cpuSet": { "type": "integer", - "format": "int32" + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" }, "numCPUs": { - "description": "NumCPUs is the number of CPUs", + "description": "NumCPUs is the number of virtual processors in a virtual machine", "type": "integer", "format": "int32" } } }, - "loadBalancerConfigured": { - "type": "boolean" + "instanceType": { + "type": "string" }, - "mounts": { + "nics": { "type": "array", - "uniqueItems": true, "items": { - "description": "Edge mounts", + "description": "GCP network interface", "type": "object", "properties": { - "containerPath": { - "type": "string" + "index": { + "type": "integer", + "format": "int8" }, - "hostPath": { + "networkName": { "type": "string" }, - "readonly": { - "type": "boolean" + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" } } } + }, + "project": { + "type": "string" + }, + "region": { + "type": "string" + }, + "rootDeviceSize": { + "type": "integer", + "format": "int64" + }, + "zone": { + "type": "string" } } }, @@ -27811,7 +28052,7 @@ } ] }, - "/v1/cloudconfigs/edge/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { "get": { "security": [ { @@ -27824,8 +28065,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified Edge machine", - "operationId": "v1CloudConfigsEdgePoolMachinesUidGet", + "summary": "Returns the specified GCP machine", + "operationId": "v1CloudConfigsGcpPoolMachinesUidGet", "parameters": [ { "type": "string", @@ -27838,15 +28079,13 @@ "200": { "description": "OK", "schema": { - "description": "Edge cloud VM definition", + "description": "GCP cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -27854,7 +28093,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -27871,7 +28110,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -27883,69 +28122,93 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Edge cloud VM definition spec", + "description": "GCP cloud VM definition spec", "type": "object", + "required": [ + "instanceType" + ], "properties": { - "bootstrapped": { - "type": "boolean" - }, - "customImage": { - "type": "string" - }, - "edgeHostUid": { + "image": { "type": "string" }, - "instanceType": { - "description": "EdgeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], + "instanceConfig": { "properties": { - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", + "category": { + "type": "string" + }, + "cpuSet": { "type": "integer", - "format": "int32" + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" }, "numCPUs": { - "description": "NumCPUs is the number of CPUs", + "description": "NumCPUs is the number of virtual processors in a virtual machine", "type": "integer", "format": "int32" } } }, - "loadBalancerConfigured": { - "type": "boolean" + "instanceType": { + "type": "string" }, - "mounts": { + "nics": { "type": "array", - "uniqueItems": true, "items": { - "description": "Edge mounts", + "description": "GCP network interface", "type": "object", "properties": { - "containerPath": { - "type": "string" + "index": { + "type": "integer", + "format": "int8" }, - "hostPath": { + "networkName": { "type": "string" }, - "readonly": { - "type": "boolean" + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" } } } + }, + "project": { + "type": "string" + }, + "region": { + "type": "string" + }, + "rootDeviceSize": { + "type": "integer", + "format": "int64" + }, + "zone": { + "type": "string" } } }, @@ -28035,22 +28298,20 @@ "tags": [ "v1" ], - "summary": "Updates the specified machine to cloud config's machine pool", - "operationId": "v1CloudConfigsEdgePoolMachinesUidUpdate", + "summary": "Updates the specified machine to the cloud config's machine pool", + "operationId": "v1CloudConfigsGcpPoolMachinesUidUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Edge cloud VM definition", + "description": "GCP cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -28058,7 +28319,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -28075,7 +28336,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -28087,69 +28348,93 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Edge cloud VM definition spec", + "description": "GCP cloud VM definition spec", "type": "object", + "required": [ + "instanceType" + ], "properties": { - "bootstrapped": { - "type": "boolean" - }, - "customImage": { - "type": "string" - }, - "edgeHostUid": { + "image": { "type": "string" }, - "instanceType": { - "description": "EdgeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], + "instanceConfig": { "properties": { - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", + "category": { + "type": "string" + }, + "cpuSet": { "type": "integer", - "format": "int32" + "format": "int64" + }, + "diskGiB": { + "type": "integer", + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" }, "numCPUs": { - "description": "NumCPUs is the number of CPUs", + "description": "NumCPUs is the number of virtual processors in a virtual machine", "type": "integer", "format": "int32" } } }, - "loadBalancerConfigured": { - "type": "boolean" + "instanceType": { + "type": "string" }, - "mounts": { + "nics": { "type": "array", - "uniqueItems": true, "items": { - "description": "Edge mounts", + "description": "GCP network interface", "type": "object", "properties": { - "containerPath": { - "type": "string" + "index": { + "type": "integer", + "format": "int8" }, - "hostPath": { + "networkName": { "type": "string" }, - "readonly": { - "type": "boolean" + "privateIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "publicIp": { + "type": "string" } } } + }, + "project": { + "type": "string" + }, + "region": { + "type": "string" + }, + "rootDeviceSize": { + "type": "integer", + "format": "int64" + }, + "zone": { + "type": "string" } } }, @@ -28250,8 +28535,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified Edge machine", - "operationId": "v1CloudConfigsEdgePoolMachinesUidDelete", + "summary": "Deletes the specified GCP machine", + "operationId": "v1CloudConfigsGcpPoolMachinesUidDelete", "parameters": [ { "type": "string", @@ -28290,7 +28575,7 @@ } ] }, - "/v1/cloudconfigs/eks/{configUid}": { + "/v1/cloudconfigs/generic/{configUid}": { "get": { "security": [ { @@ -28303,8 +28588,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified EKS cloud config", - "operationId": "v1CloudConfigsEksGet", + "summary": "Returns the specified Generic cloud config", + "operationId": "v1CloudConfigsGenericGet", "parameters": [ { "type": "string", @@ -28317,15 +28602,9 @@ "200": { "description": "OK", "schema": { - "description": "EksCloudConfig is the Schema for the ekscloudconfigs API", - "type": "object", + "description": "Generic CloudConfig for all cloud types", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", - "type": "string" - }, "kind": { - "description": "Cloud type of the cloud config", "type": "string" }, "metadata": { @@ -28333,7 +28612,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -28350,7 +28629,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -28362,17 +28641,17 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "EksCloudConfigSpec defines the cloud configuration input by user", + "description": "Generic CloudConfig spec for all cloud types", "type": "object", "properties": { "cloudAccountRef": { @@ -28384,173 +28663,66 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } }, "clusterConfig": { - "description": "EksClusterConfig defines EKS specific config", + "description": "Generic cluster config", "type": "object", - "required": [ - "region" - ], "properties": { - "addons": { - "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", - "type": "array", - "items": { - "description": "EksAddon represents a EKS addon", - "type": "object", - "required": [ - "name", - "version" - ], - "properties": { - "conflictResolution": { - "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", - "type": "string" - }, - "name": { - "description": "Name is the name of the addon", - "type": "string" - }, - "serviceAccountRoleARN": { - "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", - "type": "string" - }, - "version": { - "description": "Version is the version of the addon to use", - "type": "string" - } - } - } - }, - "bastionDisabled": { - "description": "BastionDisabled is the option to disable bastion node", - "type": "boolean" - }, - "controlPlaneLoadBalancer": { - "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", - "type": "string" - }, - "encryptionConfig": { - "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", - "type": "object", - "properties": { - "isEnabled": { - "description": "Is encryption configuration enabled for the cluster", - "type": "boolean" - }, - "provider": { - "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", - "type": "string" - }, - "resources": { - "description": "Resources specifies the resources to be encrypted", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "endpointAccess": { - "description": "EndpointAccess specifies how control plane endpoints are accessible", + "instanceType": { "type": "object", "properties": { - "private": { - "description": "Private points VPC-internal control plane access to the private endpoint", - "type": "boolean" + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" }, - "privateCIDRs": { - "description": "PrivateCIDRs specifies which blocks can access the private endpoint", - "type": "array", - "items": { - "type": "string" - } + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" }, - "public": { - "description": "Public controls whether control plane endpoints are publicly accessible", - "type": "boolean" + "name": { + "type": "string" }, - "publicCIDRs": { - "description": "PublicCIDRs specifies which blocks can access the public endpoint", - "type": "array", - "items": { - "type": "string" - } + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" } } }, "region": { - "description": "The AWS Region the cluster lives in.", - "type": "string" - }, - "sshKeyName": { - "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", - "type": "string" - }, - "vpcId": { - "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "description": "cluster region information", "type": "string" } } }, - "fargateProfiles": { + "edgeHostRefs": { + "description": "Appliances (Edge Host) uids", "type": "array", "items": { - "description": "FargateProfile defines the desired state of FargateProfile", + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", "type": "object", - "required": [ - "name" - ], "properties": { - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", - "type": "object", - "additionalProperties": { - "type": "string" - } + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" }, "name": { - "description": "name specifies the profile name.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, - "selectors": { - "description": "Selectors specify fargate pod selectors.", - "type": "array", - "items": { - "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", - "type": "object", - "required": [ - "namespace" - ], - "properties": { - "labels": { - "description": "Labels specifies which pod labels this selector should match.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "description": "Namespace specifies which namespace this selector should match.", - "type": "string" - } - } - } - }, - "subnetIds": { - "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", - "type": "array", - "items": { - "type": "string" - } + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" } } } @@ -28563,228 +28735,25 @@ "isControlPlane" ], "properties": { - "additionalLabels": { - "description": "additionalLabels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "awsLaunchTemplate": { - "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", - "type": "object", - "properties": { - "additionalSecurityGroups": { - "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", - "type": "array", - "uniqueItems": true, - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", - "type": "object", - "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - } - }, - "ami": { - "description": "AMI is the reference to the AMI from which to create the machine instance", - "type": "object", - "properties": { - "eksOptimizedLookupType": { - "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", - "type": "string", - "enum": [ - "AmazonLinux", - "AmazonLinuxGPU" - ] - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - }, - "imageLookupBaseOS": { - "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", - "type": "string" - }, - "imageLookupFormat": { - "description": "ImageLookupFormat is the AMI naming format to look up the image", - "type": "string" - }, - "imageLookupOrg": { - "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", - "type": "string" - }, - "rootVolume": { - "description": "Volume encapsulates the configuration options for the storage device.", - "type": "object", - "properties": { - "deviceName": { - "description": "Device name", - "type": "string" - }, - "encrypted": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "boolean" - }, - "encryptionKey": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "string" - }, - "iops": { - "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", - "type": "integer", - "format": "int64" - }, - "throughput": { - "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", - "type": "integer", - "format": "int64" - }, - "type": { - "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", - "type": "string" - } - } - } - } - }, - "azs": { - "description": "AZs is only used for dynamic placement", - "type": "array", - "items": { - "type": "string" - } - }, - "capacityType": { - "description": "EC2 instance capacity type", - "type": "string", - "default": "on-demand", - "enum": [ - "on-demand", - "spot" - ] - }, - "enableAwsLaunchTemplate": { - "description": "flag to know if aws launch template is enabled", - "type": "boolean" - }, - "instanceConfig": { - "properties": { - "category": { - "type": "string" - }, - "cpuSet": { - "type": "integer", - "format": "int64" - }, - "diskGiB": { - "type": "integer", - "format": "int64" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, "instanceType": { - "description": "instance type", "type": "string" }, "isControlPlane": { "description": "whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false + "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" } }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, "name": { "type": "string" }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, "rootDeviceSize": { - "description": "rootDeviceSize in GBs", + "description": "Size of root volume in GB. Default is 30GB", "type": "integer", "format": "int64" }, @@ -28793,73 +28762,9 @@ "type": "integer", "format": "int32" }, - "spotMarketOptions": { - "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", - "type": "object", - "properties": { - "maxPrice": { - "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", - "type": "string" - } - } - }, - "subnetIds": { - "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "taints": { - "description": "master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" } } } @@ -28881,7 +28786,7 @@ } ] }, - "/v1/cloudconfigs/eks/{configUid}/clusterConfig": { + "/v1/cloudconfigs/generic/{configUid}/clusterConfig": { "put": { "security": [ { @@ -28895,119 +28800,44 @@ "v1" ], "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsEksUidClusterConfig", + "operationId": "v1CloudConfigsGenericUidClusterConfig", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "EKS cloud cluster config entity", + "description": "Generic cloud cluster config entity", "type": "object", "properties": { "clusterConfig": { - "description": "EksClusterConfig defines EKS specific config", + "description": "Generic cluster config", "type": "object", - "required": [ - "region" - ], "properties": { - "addons": { - "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", - "type": "array", - "items": { - "description": "EksAddon represents a EKS addon", - "type": "object", - "required": [ - "name", - "version" - ], - "properties": { - "conflictResolution": { - "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", - "type": "string" - }, - "name": { - "description": "Name is the name of the addon", - "type": "string" - }, - "serviceAccountRoleARN": { - "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", - "type": "string" - }, - "version": { - "description": "Version is the version of the addon to use", - "type": "string" - } - } - } - }, - "bastionDisabled": { - "description": "BastionDisabled is the option to disable bastion node", - "type": "boolean" - }, - "controlPlaneLoadBalancer": { - "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", - "type": "string" - }, - "encryptionConfig": { - "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", - "type": "object", - "properties": { - "isEnabled": { - "description": "Is encryption configuration enabled for the cluster", - "type": "boolean" - }, - "provider": { - "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", - "type": "string" - }, - "resources": { - "description": "Resources specifies the resources to be encrypted", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "endpointAccess": { - "description": "EndpointAccess specifies how control plane endpoints are accessible", + "instanceType": { "type": "object", "properties": { - "private": { - "description": "Private points VPC-internal control plane access to the private endpoint", - "type": "boolean" + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" }, - "privateCIDRs": { - "description": "PrivateCIDRs specifies which blocks can access the private endpoint", - "type": "array", - "items": { - "type": "string" - } + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" }, - "public": { - "description": "Public controls whether control plane endpoints are publicly accessible", - "type": "boolean" + "name": { + "type": "string" }, - "publicCIDRs": { - "description": "PublicCIDRs specifies which blocks can access the public endpoint", - "type": "array", - "items": { - "type": "string" - } + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" } } }, "region": { - "description": "The AWS Region the cluster lives in.", - "type": "string" - }, - "sshKeyName": { - "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", - "type": "string" - }, - "vpcId": { - "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "description": "cluster region information", "type": "string" } } @@ -29038,110 +28868,7 @@ } ] }, - "/v1/cloudconfigs/eks/{configUid}/fargateProfiles": { - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates EKS cloud config's fargate profiles", - "operationId": "v1CloudConfigsEksUidFargateProfilesUpdate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Fargate profiles", - "type": "object", - "properties": { - "fargateProfiles": { - "type": "array", - "items": { - "description": "FargateProfile defines the desired state of FargateProfile", - "type": "object", - "required": [ - "name" - ], - "properties": { - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "name specifies the profile name.", - "type": "string" - }, - "selectors": { - "description": "Selectors specify fargate pod selectors.", - "type": "array", - "items": { - "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", - "type": "object", - "required": [ - "namespace" - ], - "properties": { - "labels": { - "description": "Labels specifies which pod labels this selector should match.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "description": "Namespace specifies which namespace this selector should match.", - "type": "string" - } - } - } - }, - "subnetIds": { - "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] - }, - "/v1/cloudconfigs/eks/{configUid}/machinePools": { + "/v1/cloudconfigs/generic/{configUid}/machinePools": { "post": { "security": [ { @@ -29154,8 +28881,8 @@ "tags": [ "v1" ], - "summary": "Creates an EKS cloud config's machine pool", - "operationId": "v1CloudConfigsEksMachinePoolCreate", + "summary": "Creates a generic cloud config's machine pool", + "operationId": "v1CloudConfigsGenericMachinePoolCreate", "parameters": [ { "name": "body", @@ -29163,169 +28890,35 @@ "schema": { "properties": { "cloudConfig": { + "description": "Generic cluster config", + "type": "object", "properties": { - "awsLaunchTemplate": { - "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "instanceType": { "type": "object", "properties": { - "additionalSecurityGroups": { - "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", - "type": "array", - "uniqueItems": true, - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", - "type": "object", - "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - } - }, - "ami": { - "description": "AMI is the reference to the AMI from which to create the machine instance", - "type": "object", - "properties": { - "eksOptimizedLookupType": { - "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", - "type": "string", - "enum": [ - "AmazonLinux", - "AmazonLinuxGPU" - ] - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - }, - "imageLookupBaseOS": { - "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", - "type": "string" + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" }, - "imageLookupFormat": { - "description": "ImageLookupFormat is the AMI naming format to look up the image", - "type": "string" + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" }, - "imageLookupOrg": { - "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "name": { "type": "string" }, - "rootVolume": { - "description": "Volume encapsulates the configuration options for the storage device.", - "type": "object", - "properties": { - "deviceName": { - "description": "Device name", - "type": "string" - }, - "encrypted": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "boolean" - }, - "encryptionKey": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "string" - }, - "iops": { - "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", - "type": "integer", - "format": "int64" - }, - "throughput": { - "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", - "type": "integer", - "format": "int64" - }, - "type": { - "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", - "type": "string" - } - } + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" } } }, - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "capacityType": { - "description": "EC2 instance capacity type", - "type": "string", - "default": "on-demand", - "enum": [ - "on-demand", - "spot" - ] - }, - "enableAwsLaunchTemplate": { - "description": "flag to know if aws launch template is enabled", - "type": "boolean" - }, - "instanceType": { - "description": "instance type", + "region": { + "description": "cluster region information", "type": "string" - }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64", - "maximum": 2000, - "minimum": 1 - }, - "spotMarketOptions": { - "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", - "type": "object", - "properties": { - "maxPrice": { - "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", - "type": "string" - } - } - }, - "subnets": { - "type": "array", - "items": { - "properties": { - "az": { - "type": "string" - }, - "id": { - "type": "string" - } - } - } } } }, @@ -29358,7 +28951,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -29402,7 +28995,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -29448,7 +29041,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -29497,7 +29090,7 @@ } ] }, - "/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}": { + "/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}": { "put": { "security": [ { @@ -29510,8 +29103,8 @@ "tags": [ "v1" ], - "summary": "Updates the specified EKS cloud config's machine pool", - "operationId": "v1CloudConfigsEksMachinePoolUpdate", + "summary": "Updates the specified generic cloud config's machine pool", + "operationId": "v1CloudConfigsGenericMachinePoolUpdate", "parameters": [ { "name": "body", @@ -29519,169 +29112,35 @@ "schema": { "properties": { "cloudConfig": { + "description": "Generic cluster config", + "type": "object", "properties": { - "awsLaunchTemplate": { - "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "instanceType": { "type": "object", "properties": { - "additionalSecurityGroups": { - "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", - "type": "array", - "uniqueItems": true, - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", - "type": "object", - "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - } - }, - "ami": { - "description": "AMI is the reference to the AMI from which to create the machine instance", - "type": "object", - "properties": { - "eksOptimizedLookupType": { - "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", - "type": "string", - "enum": [ - "AmazonLinux", - "AmazonLinuxGPU" - ] - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - }, - "imageLookupBaseOS": { - "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", - "type": "string" + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" }, - "imageLookupFormat": { - "description": "ImageLookupFormat is the AMI naming format to look up the image", - "type": "string" + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" }, - "imageLookupOrg": { - "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "name": { "type": "string" }, - "rootVolume": { - "description": "Volume encapsulates the configuration options for the storage device.", - "type": "object", - "properties": { - "deviceName": { - "description": "Device name", - "type": "string" - }, - "encrypted": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "boolean" - }, - "encryptionKey": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "string" - }, - "iops": { - "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", - "type": "integer", - "format": "int64" - }, - "throughput": { - "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", - "type": "integer", - "format": "int64" - }, - "type": { - "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", - "type": "string" - } - } + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" } } }, - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "capacityType": { - "description": "EC2 instance capacity type", - "type": "string", - "default": "on-demand", - "enum": [ - "on-demand", - "spot" - ] - }, - "enableAwsLaunchTemplate": { - "description": "flag to know if aws launch template is enabled", - "type": "boolean" - }, - "instanceType": { - "description": "instance type", + "region": { + "description": "cluster region information", "type": "string" - }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64", - "maximum": 2000, - "minimum": 1 - }, - "spotMarketOptions": { - "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", - "type": "object", - "properties": { - "maxPrice": { - "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", - "type": "string" - } - } - }, - "subnets": { - "type": "array", - "items": { - "properties": { - "az": { - "type": "string" - }, - "id": { - "type": "string" - } - } - } } } }, @@ -29714,7 +29173,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -29758,7 +29217,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -29804,7 +29263,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -29839,7 +29298,7 @@ "v1" ], "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsEksMachinePoolDelete", + "operationId": "v1CloudConfigsGenericMachinePoolDelete", "parameters": [ { "type": "string", @@ -29871,7 +29330,7 @@ } ] }, - "/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}/machines": { "get": { "security": [ { @@ -29884,8 +29343,8 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of EKS machines", - "operationId": "v1CloudConfigsEksPoolMachinesList", + "summary": "Retrieves a list of Generic machines", + "operationId": "v1CloudConfigsGenericPoolMachinesList", "parameters": [ { "type": "string", @@ -29935,9 +29394,9 @@ ], "responses": { "200": { - "description": "An array of EKS machine items", + "description": "An array of Generic machine items", "schema": { - "description": "AWS machine list", + "description": "Generic machine list", "type": "object", "required": [ "items" @@ -29947,15 +29406,12 @@ "type": "array", "uniqueItems": true, "items": { - "description": "AWS cloud VM definition", - "type": "object", + "description": "Generic cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -29963,7 +29419,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -29980,7 +29436,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -29992,90 +29448,60 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "AWS cloud VM definition spec", - "type": "object", - "required": [ - "instanceType", - "vpcId", - "ami" - ], + "description": "Generic cloud VM definition spec", "properties": { - "additionalSecurityGroups": { - "description": "Additional Security groups", - "type": "array", - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", - "type": "object", - "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - } - }, - "ami": { - "type": "string" - }, - "az": { - "type": "string" - }, - "dnsName": { + "hostName": { "type": "string" }, - "iamProfile": { + "imageId": { "type": "string" }, "instanceType": { - "type": "string" + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } }, "nics": { "type": "array", "items": { - "description": "AWS network interface", + "description": "Generic network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, + "networkName": { + "type": "string" + }, "privateIPs": { "type": "array", "items": { @@ -30088,20 +29514,8 @@ } } }, - "phase": { - "type": "string" - }, "sshKeyName": { "type": "string" - }, - "subnetId": { - "type": "string" - }, - "type": { - "type": "string" - }, - "vpcId": { - "type": "string" } } }, @@ -30221,21 +29635,18 @@ "v1" ], "summary": "Adds the machine to cloud config's machine pool", - "operationId": "v1CloudConfigsEksPoolMachinesAdd", + "operationId": "v1CloudConfigsGenericPoolMachinesAdd", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "AWS cloud VM definition", - "type": "object", + "description": "Generic cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -30243,7 +29654,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -30260,7 +29671,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -30272,90 +29683,60 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "AWS cloud VM definition spec", - "type": "object", - "required": [ - "instanceType", - "vpcId", - "ami" - ], + "description": "Generic cloud VM definition spec", "properties": { - "additionalSecurityGroups": { - "description": "Additional Security groups", - "type": "array", - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", - "type": "object", - "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - } - }, - "ami": { - "type": "string" - }, - "az": { - "type": "string" - }, - "dnsName": { + "hostName": { "type": "string" }, - "iamProfile": { + "imageId": { "type": "string" }, "instanceType": { - "type": "string" + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } }, "nics": { "type": "array", "items": { - "description": "AWS network interface", + "description": "Generic network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, + "networkName": { + "type": "string" + }, "privateIPs": { "type": "array", "items": { @@ -30368,20 +29749,8 @@ } } }, - "phase": { - "type": "string" - }, "sshKeyName": { "type": "string" - }, - "subnetId": { - "type": "string" - }, - "type": { - "type": "string" - }, - "vpcId": { - "type": "string" } } }, @@ -30504,7 +29873,7 @@ } ] }, - "/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { "get": { "security": [ { @@ -30517,8 +29886,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified EKS machine", - "operationId": "v1CloudConfigsEksPoolMachinesUidGet", + "summary": "Returns the specified generic machine", + "operationId": "v1CloudConfigsGenericPoolMachinesUidGet", "parameters": [ { "type": "string", @@ -30531,15 +29900,12 @@ "200": { "description": "OK", "schema": { - "description": "AWS cloud VM definition", - "type": "object", + "description": "Generic cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -30547,7 +29913,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -30564,7 +29930,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -30576,90 +29942,60 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "AWS cloud VM definition spec", - "type": "object", - "required": [ - "instanceType", - "vpcId", - "ami" - ], + "description": "Generic cloud VM definition spec", "properties": { - "additionalSecurityGroups": { - "description": "Additional Security groups", - "type": "array", - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", - "type": "object", - "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - } - }, - "ami": { - "type": "string" - }, - "az": { - "type": "string" - }, - "dnsName": { + "hostName": { "type": "string" }, - "iamProfile": { + "imageId": { "type": "string" }, "instanceType": { - "type": "string" + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } }, "nics": { "type": "array", "items": { - "description": "AWS network interface", + "description": "Generic network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, + "networkName": { + "type": "string" + }, "privateIPs": { "type": "array", "items": { @@ -30672,20 +30008,8 @@ } } }, - "phase": { - "type": "string" - }, "sshKeyName": { "type": "string" - }, - "subnetId": { - "type": "string" - }, - "type": { - "type": "string" - }, - "vpcId": { - "type": "string" } } }, @@ -30776,21 +30100,18 @@ "v1" ], "summary": "Updates the specified machine to the cloud config's machine pool", - "operationId": "v1CloudConfigsEksPoolMachinesUidUpdate", + "operationId": "v1CloudConfigsGenericPoolMachinesUidUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "AWS cloud VM definition", - "type": "object", + "description": "Generic cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -30798,7 +30119,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -30815,7 +30136,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -30827,90 +30148,60 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "AWS cloud VM definition spec", - "type": "object", - "required": [ - "instanceType", - "vpcId", - "ami" - ], + "description": "Generic cloud VM definition spec", "properties": { - "additionalSecurityGroups": { - "description": "Additional Security groups", - "type": "array", - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", - "type": "object", - "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - } - }, - "ami": { - "type": "string" - }, - "az": { - "type": "string" - }, - "dnsName": { + "hostName": { "type": "string" }, - "iamProfile": { + "imageId": { "type": "string" }, "instanceType": { - "type": "string" + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } }, "nics": { "type": "array", "items": { - "description": "AWS network interface", + "description": "Generic network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, + "networkName": { + "type": "string" + }, "privateIPs": { "type": "array", "items": { @@ -30923,20 +30214,8 @@ } } }, - "phase": { - "type": "string" - }, "sshKeyName": { "type": "string" - }, - "subnetId": { - "type": "string" - }, - "type": { - "type": "string" - }, - "vpcId": { - "type": "string" } } }, @@ -31037,8 +30316,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified EKS machine", - "operationId": "v1CloudConfigsEksPoolMachinesUidDelete", + "summary": "Deletes the specified machine", + "operationId": "v1CloudConfigsGenericPoolMachinesUidDelete", "parameters": [ { "type": "string", @@ -31077,7 +30356,7 @@ } ] }, - "/v1/cloudconfigs/gcp/{configUid}": { + "/v1/cloudconfigs/gke/{configUid}": { "get": { "security": [ { @@ -31090,8 +30369,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified GCP cloud config", - "operationId": "v1CloudConfigsGcpGet", + "summary": "Returns the specified GKE cloud config", + "operationId": "v1CloudConfigsGkeGet", "parameters": [ { "type": "string", @@ -31108,11 +30387,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -31120,7 +30399,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -31137,7 +30416,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -31149,11 +30428,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -31171,11 +30450,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -31281,7 +30560,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -31341,7 +30620,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -31387,7 +30666,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -31494,7 +30773,7 @@ } ] }, - "/v1/cloudconfigs/gcp/{configUid}/clusterConfig": { + "/v1/cloudconfigs/gke/{configUid}/clusterConfig": { "put": { "security": [ { @@ -31508,7 +30787,7 @@ "v1" ], "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsGcpUidClusterConfig", + "operationId": "v1CloudConfigsGkeUidClusterConfig", "parameters": [ { "name": "body", @@ -31579,7 +30858,7 @@ } ] }, - "/v1/cloudconfigs/gcp/{configUid}/machinePools": { + "/v1/cloudconfigs/gke/{configUid}/machinePools": { "post": { "security": [ { @@ -31592,8 +30871,8 @@ "tags": [ "v1" ], - "summary": "Creates a Gcp cloud config's machine pool", - "operationId": "v1CloudConfigsGcpMachinePoolCreate", + "summary": "Creates an GKE cloud config's machine pool", + "operationId": "v1CloudConfigsGkeMachinePoolCreate", "parameters": [ { "name": "body", @@ -31672,7 +30951,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -31716,7 +30995,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -31762,7 +31041,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -31811,7 +31090,7 @@ } ] }, - "/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}": { + "/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}": { "put": { "security": [ { @@ -31824,8 +31103,8 @@ "tags": [ "v1" ], - "summary": "Updates the specified GCP cloud config's machine pool", - "operationId": "v1CloudConfigsGcpMachinePoolUpdate", + "summary": "Updates the specified GKE cloud config's machine pool", + "operationId": "v1CloudConfigsGkeMachinePoolUpdate", "parameters": [ { "name": "body", @@ -31904,7 +31183,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -31948,7 +31227,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -31994,7 +31273,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -32029,7 +31308,7 @@ "v1" ], "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsGcpMachinePoolDelete", + "operationId": "v1CloudConfigsGkeMachinePoolDelete", "parameters": [ { "type": "string", @@ -32061,7 +31340,7 @@ } ] }, - "/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}/machines": { "get": { "security": [ { @@ -32074,8 +31353,8 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of GCP machines", - "operationId": "v1CloudConfigsGcpPoolMachinesList", + "summary": "Retrieves a list of GKE machines", + "operationId": "v1CloudConfigsGkePoolMachinesList", "parameters": [ { "type": "string", @@ -32125,7 +31404,7 @@ ], "responses": { "200": { - "description": "An array of GCP machine items", + "description": "An array of GKE machine items", "schema": { "description": "GCP machine list", "type": "object", @@ -32141,11 +31420,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -32153,7 +31430,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -32170,7 +31447,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -32182,11 +31459,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -32388,7 +31665,7 @@ "v1" ], "summary": "Adds the machine to cloud config's machine pool", - "operationId": "v1CloudConfigsGcpPoolMachinesAdd", + "operationId": "v1CloudConfigsGkePoolMachinesAdd", "parameters": [ { "name": "body", @@ -32398,11 +31675,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -32410,7 +31685,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -32427,7 +31702,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -32439,11 +31714,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -32648,7 +31923,7 @@ } ] }, - "/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { "get": { "security": [ { @@ -32661,8 +31936,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified GCP machine", - "operationId": "v1CloudConfigsGcpPoolMachinesUidGet", + "summary": "Returns the specified GKE machine", + "operationId": "v1CloudConfigsGkePoolMachinesUidGet", "parameters": [ { "type": "string", @@ -32679,11 +31954,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -32691,7 +31964,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -32708,7 +31981,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -32720,11 +31993,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -32897,7 +32170,7 @@ "v1" ], "summary": "Updates the specified machine to the cloud config's machine pool", - "operationId": "v1CloudConfigsGcpPoolMachinesUidUpdate", + "operationId": "v1CloudConfigsGkePoolMachinesUidUpdate", "parameters": [ { "name": "body", @@ -32907,11 +32180,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -32919,7 +32190,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -32936,7 +32207,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -32948,11 +32219,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -33135,8 +32406,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified GCP machine", - "operationId": "v1CloudConfigsGcpPoolMachinesUidDelete", + "summary": "Deletes the specified Gcp machine", + "operationId": "v1CloudConfigsGkePoolMachinesUidDelete", "parameters": [ { "type": "string", @@ -33175,7 +32446,7 @@ } ] }, - "/v1/cloudconfigs/generic/{configUid}": { + "/v1/cloudconfigs/maas/{configUid}": { "get": { "security": [ { @@ -33188,8 +32459,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified Generic cloud config", - "operationId": "v1CloudConfigsGenericGet", + "summary": "Returns the specified Maas cloud config", + "operationId": "v1CloudConfigsMaasGet", "parameters": [ { "type": "string", @@ -33202,9 +32473,15 @@ "200": { "description": "OK", "schema": { - "description": "Generic CloudConfig for all cloud types", + "description": "MaasCloudConfig is the Schema for the maascloudconfigs API", + "type": "object", "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -33212,7 +32489,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -33229,7 +32506,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -33241,17 +32518,17 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Generic CloudConfig spec for all cloud types", + "description": "MaasCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", "type": "object", "properties": { "cloudAccountRef": { @@ -33263,65 +32540,30 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } }, "clusterConfig": { - "description": "Generic cluster config", + "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", "type": "object", + "required": [ + "domain" + ], "properties": { - "instanceType": { - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, - "region": { - "description": "cluster region information", + "domain": { + "description": "Domain name of the cluster to be provisioned", "type": "string" - } - } - }, - "edgeHostRefs": { - "description": "Appliances (Edge Host) uids", - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", + }, + "sshKeys": { + "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { "type": "string" } } @@ -33332,44 +32574,234 @@ "items": { "type": "object", "required": [ - "isControlPlane" + "instanceType" ], "properties": { + "additionalLabels": { + "description": "additionalLabels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, "instanceType": { - "type": "string" + "type": "object", + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + } + } }, "isControlPlane": { "description": "whether this pool is for control plane", "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" } }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, "name": { "type": "string" }, - "rootDeviceSize": { - "description": "Size of root volume in GB. Default is 30GB", + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", "type": "integer", - "format": "int64" + "format": "int32" + }, + "resourcePool": { + "type": "string" }, "size": { "description": "size of the pool, number of machines", "type": "integer", "format": "int32" }, + "tags": { + "description": "Tags in maas environment", + "type": "array", + "items": { + "type": "string" + } + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } } } } + }, + "status": { + "description": "MaasCloudConfigStatus defines the observed state of MaasCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "type": "object", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "nodeImage": { + "description": "Name of the image", + "type": "object", + "properties": { + "name": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "roleDigest": { + "description": "this map will be for ansible roles present in eack pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + } } } } @@ -33386,7 +32818,7 @@ } ] }, - "/v1/cloudconfigs/generic/{configUid}/clusterConfig": { + "/v1/cloudconfigs/maas/{configUid}/clusterConfig": { "put": { "security": [ { @@ -33400,45 +32832,32 @@ "v1" ], "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsGenericUidClusterConfig", + "operationId": "v1CloudConfigsMaasUidClusterConfig", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Generic cloud cluster config entity", + "description": "Maas cloud cluster config entity", "type": "object", "properties": { "clusterConfig": { - "description": "Generic cluster config", + "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", "type": "object", + "required": [ + "domain" + ], "properties": { - "instanceType": { - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, - "region": { - "description": "cluster region information", + "domain": { + "description": "Domain name of the cluster to be provisioned", "type": "string" + }, + "sshKeys": { + "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } } } } @@ -33468,7 +32887,7 @@ } ] }, - "/v1/cloudconfigs/generic/{configUid}/machinePools": { + "/v1/cloudconfigs/maas/{configUid}/machinePools": { "post": { "security": [ { @@ -33481,44 +32900,56 @@ "tags": [ "v1" ], - "summary": "Creates a generic cloud config's machine pool", - "operationId": "v1CloudConfigsGenericMachinePoolCreate", + "summary": "Creates an Maas cloud config's machine pool", + "operationId": "v1CloudConfigsMaasMachinePoolCreate", "parameters": [ { "name": "body", "in": "body", "schema": { + "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { - "description": "Generic cluster config", "type": "object", + "required": [ + "instanceType", + "resourcePool" + ], "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, "instanceType": { "type": "object", "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "minCPU": { + "description": "Minimum CPU cores", "type": "integer", "format": "int32" }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", + "minMemInMB": { + "description": "Minimum memory in MiB", "type": "integer", "format": "int32" } } }, - "region": { - "description": "cluster region information", + "resourcePool": { + "description": "the resource pool", "type": "string" + }, + "tags": { + "description": "Tags in maas environment", + "type": "array", + "items": { + "type": "string" + } } } }, @@ -33551,7 +32982,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -33595,7 +33026,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -33641,7 +33072,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -33690,7 +33121,7 @@ } ] }, - "/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}": { + "/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}": { "put": { "security": [ { @@ -33703,44 +33134,56 @@ "tags": [ "v1" ], - "summary": "Updates the specified generic cloud config's machine pool", - "operationId": "v1CloudConfigsGenericMachinePoolUpdate", + "summary": "Updates the specified Maas cloud config's machine pool", + "operationId": "v1CloudConfigsMaasMachinePoolUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { + "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { - "description": "Generic cluster config", "type": "object", + "required": [ + "instanceType", + "resourcePool" + ], "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, "instanceType": { "type": "object", "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "minCPU": { + "description": "Minimum CPU cores", "type": "integer", "format": "int32" }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", + "minMemInMB": { + "description": "Minimum memory in MiB", "type": "integer", "format": "int32" } } }, - "region": { - "description": "cluster region information", + "resourcePool": { + "description": "the resource pool", "type": "string" + }, + "tags": { + "description": "Tags in maas environment", + "type": "array", + "items": { + "type": "string" + } } } }, @@ -33773,7 +33216,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -33817,7 +33260,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -33863,7 +33306,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -33898,7 +33341,7 @@ "v1" ], "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsGenericMachinePoolDelete", + "operationId": "v1CloudConfigsMaasMachinePoolDelete", "parameters": [ { "type": "string", @@ -33930,7 +33373,7 @@ } ] }, - "/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}/machines": { "get": { "security": [ { @@ -33943,8 +33386,8 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Generic machines", - "operationId": "v1CloudConfigsGenericPoolMachinesList", + "summary": "Retrieves a list of Maas machines", + "operationId": "v1CloudConfigsMaasPoolMachinesList", "parameters": [ { "type": "string", @@ -33994,9 +33437,9 @@ ], "responses": { "200": { - "description": "An array of Generic machine items", + "description": "An array of Maas machine items", "schema": { - "description": "Generic machine list", + "description": "List of MAAS machines", "type": "object", "required": [ "items" @@ -34006,14 +33449,13 @@ "type": "array", "uniqueItems": true, "items": { - "description": "Generic cloud VM definition", + "description": "Maas cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -34021,7 +33463,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -34038,7 +33480,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -34050,60 +33492,35 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Generic cloud VM definition spec", + "description": "Maas cloud VM definition spec", + "type": "object", "properties": { - "hostName": { + "az": { "type": "string" }, - "imageId": { + "hostname": { "type": "string" }, - "instanceType": { - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, "nics": { "type": "array", "items": { - "description": "Generic network interface", + "description": "Maas network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, - "networkName": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { @@ -34115,9 +33532,6 @@ } } } - }, - "sshKeyName": { - "type": "string" } } }, @@ -34237,20 +33651,19 @@ "v1" ], "summary": "Adds the machine to cloud config's machine pool", - "operationId": "v1CloudConfigsGenericPoolMachinesAdd", + "operationId": "v1CloudConfigsMaasPoolMachinesAdd", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Generic cloud VM definition", + "description": "Maas cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -34258,7 +33671,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -34275,7 +33688,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -34287,60 +33700,35 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Generic cloud VM definition spec", + "description": "Maas cloud VM definition spec", + "type": "object", "properties": { - "hostName": { + "az": { "type": "string" }, - "imageId": { + "hostname": { "type": "string" }, - "instanceType": { - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, "nics": { "type": "array", "items": { - "description": "Generic network interface", + "description": "Maas network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, - "networkName": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { @@ -34352,9 +33740,6 @@ } } } - }, - "sshKeyName": { - "type": "string" } } }, @@ -34477,7 +33862,7 @@ } ] }, - "/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { "get": { "security": [ { @@ -34490,8 +33875,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified generic machine", - "operationId": "v1CloudConfigsGenericPoolMachinesUidGet", + "summary": "Returns the specified Maas machine", + "operationId": "v1CloudConfigsMaasPoolMachinesUidGet", "parameters": [ { "type": "string", @@ -34504,14 +33889,13 @@ "200": { "description": "OK", "schema": { - "description": "Generic cloud VM definition", + "description": "Maas cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -34519,7 +33903,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -34536,7 +33920,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -34548,60 +33932,35 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Generic cloud VM definition spec", + "description": "Maas cloud VM definition spec", + "type": "object", "properties": { - "hostName": { + "az": { "type": "string" }, - "imageId": { + "hostname": { "type": "string" }, - "instanceType": { - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, "nics": { "type": "array", "items": { - "description": "Generic network interface", + "description": "Maas network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, - "networkName": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { @@ -34613,9 +33972,6 @@ } } } - }, - "sshKeyName": { - "type": "string" } } }, @@ -34706,20 +34062,19 @@ "v1" ], "summary": "Updates the specified machine to the cloud config's machine pool", - "operationId": "v1CloudConfigsGenericPoolMachinesUidUpdate", + "operationId": "v1CloudConfigsMaasPoolMachinesUidUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Generic cloud VM definition", + "description": "Maas cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -34727,7 +34082,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -34744,7 +34099,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -34756,60 +34111,35 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Generic cloud VM definition spec", + "description": "Maas cloud VM definition spec", + "type": "object", "properties": { - "hostName": { + "az": { "type": "string" }, - "imageId": { + "hostname": { "type": "string" }, - "instanceType": { - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, "nics": { "type": "array", "items": { - "description": "Generic network interface", + "description": "Maas network interface", "type": "object", "properties": { "index": { "type": "integer", "format": "int8" }, - "networkName": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { @@ -34821,9 +34151,6 @@ } } } - }, - "sshKeyName": { - "type": "string" } } }, @@ -34924,8 +34251,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified machine", - "operationId": "v1CloudConfigsGenericPoolMachinesUidDelete", + "summary": "Deletes the specified Maas machine", + "operationId": "v1CloudConfigsMaasPoolMachinesUidDelete", "parameters": [ { "type": "string", @@ -34964,7 +34291,7 @@ } ] }, - "/v1/cloudconfigs/gke/{configUid}": { + "/v1/cloudconfigs/openstack/{configUid}": { "get": { "security": [ { @@ -34977,8 +34304,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified GKE cloud config", - "operationId": "v1CloudConfigsGkeGet", + "summary": "Returns the specified OpenStack cloud config", + "operationId": "v1CloudConfigsOpenStackGet", "parameters": [ { "type": "string", @@ -34991,15 +34318,15 @@ "200": { "description": "OK", "schema": { - "description": "GcpCloudConfig is the Schema for the gcpcloudconfigs API", + "description": "OpenStackCloudConfig is the Schema for the OpenStackcloudconfigs API", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -35007,7 +34334,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -35024,7 +34351,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -35036,17 +34363,17 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "GcpCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "description": "OpenStackCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", "type": "object", "properties": { "cloudAccountRef": { @@ -35058,48 +34385,83 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } }, "clusterConfig": { - "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", "type": "object", - "required": [ - "project", - "region" - ], "properties": { - "managedClusterConfig": { - "description": "GCP managed cluster config", + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "type": "array", + "items": { + "type": "string" + } + }, + "domain": { "type": "object", "properties": { - "enableAutoPilot": { - "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", - "type": "boolean" + "id": { + "type": "string" }, - "location": { - "description": "Can be Region or Zone", + "name": { "type": "string" } } }, "network": { - "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", "type": "string" }, "project": { - "description": "Name of the project in which cluster is to be deployed", - "type": "string" + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } }, "region": { - "description": "GCP region for the cluster", "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } } } }, @@ -35108,8 +34470,7 @@ "items": { "type": "object", "required": [ - "isControlPlane", - "instanceType" + "flavorConfig" ], "properties": { "additionalLabels": { @@ -35127,40 +34488,48 @@ } }, "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" } }, - "instanceConfig": { + "diskGiB": { + "description": "DiskGiB is used to configure rootVolume, the volume metadata to boot from", + "type": "integer", + "format": "int32" + }, + "flavor": { + "description": "Openstack flavor name, only return argument", + "type": "string" + }, + "flavorConfig": { + "required": [ + "name" + ], "properties": { - "category": { - "type": "string" - }, - "cpuSet": { - "type": "integer", - "format": "int64" - }, "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", "type": "integer", - "format": "int64" + "format": "int32" }, "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", "type": "integer", "format": "int64" }, "name": { + "description": "Openstack flavor name", "type": "string" }, "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", + "description": "NumCPUs is the number of virtual processors in a virtual machine.", "type": "integer", "format": "int32" } } }, - "instanceType": { + "image": { "type": "string" }, "isControlPlane": { @@ -35168,7 +34537,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -35206,29 +34575,24 @@ "type": "integer", "format": "int32" }, - "rootDeviceSize": { - "description": "Size of root volume in GB. Default is 30GB", - "type": "integer", - "format": "int64" - }, "size": { "description": "size of the pool, number of machines", "type": "integer", "format": "int32" }, "subnet": { - "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", - "type": "string" - }, - "subnetIds": { - "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", "type": "object", - "additionalProperties": { - "type": "string" + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -35274,7 +34638,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -35283,15 +34647,10 @@ } }, "status": { - "description": "GcpCloudConfigStatus defines the observed state of GcpCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "description": "OpenStackCloudConfigStatus defines the observed state of OpenStackCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", "type": "object", "properties": { - "ansibleRoleDigest": { - "description": "For mold controller to identify if is there any changes in Pack", - "type": "string" - }, "conditions": { - "description": "spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`", "type": "array", "items": { "type": "object", @@ -35327,41 +34686,14 @@ } } }, - "images": { - "description": "Refers to GCP image", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "os": { - "type": "string" - }, - "region": { - "type": "string" - }, - "state": { - "type": "string" - } - } - }, - "isAddonLayer": { - "description": "addon layers present in spc", - "type": "boolean" - }, - "roleDigest": { - "description": "this map will be for ansible roles present in each pack", - "type": "object", - "additionalProperties": { - "type": "string" - } + "nodeImage": { + "type": "string" }, "sourceImageId": { "description": "sourceImageId, it can be from packref's annotations or from pack.json", "type": "string" }, "useCapiImage": { - "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", "type": "boolean" } } @@ -35381,7 +34713,7 @@ } ] }, - "/v1/cloudconfigs/gke/{configUid}/clusterConfig": { + "/v1/cloudconfigs/openstack/{configUid}/clusterConfig": { "put": { "security": [ { @@ -35395,48 +34727,83 @@ "v1" ], "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsGkeUidClusterConfig", + "operationId": "v1CloudConfigsOpenStackUidClusterConfig", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Gcp cloud cluster config entity", + "description": "Openstack cloud cluster config entity", "type": "object", "properties": { "clusterConfig": { - "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", "type": "object", - "required": [ - "project", - "region" - ], "properties": { - "managedClusterConfig": { - "description": "GCP managed cluster config", + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "type": "array", + "items": { + "type": "string" + } + }, + "domain": { "type": "object", "properties": { - "enableAutoPilot": { - "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", - "type": "boolean" + "id": { + "type": "string" }, - "location": { - "description": "Can be Region or Zone", + "name": { "type": "string" } } }, "network": { - "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", "type": "string" }, "project": { - "description": "Name of the project in which cluster is to be deployed", - "type": "string" + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } }, "region": { - "description": "GCP region for the cluster", "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } } } } @@ -35466,7 +34833,7 @@ } ] }, - "/v1/cloudconfigs/gke/{configUid}/machinePools": { + "/v1/cloudconfigs/openstack/{configUid}/machinePools": { "post": { "security": [ { @@ -35479,8 +34846,8 @@ "tags": [ "v1" ], - "summary": "Creates an GKE cloud config's machine pool", - "operationId": "v1CloudConfigsGkeMachinePoolCreate", + "summary": "Creates a OpenStack cloud config's machine pool", + "operationId": "v1CloudConfigsOpenStackMachinePoolCreate", "parameters": [ { "name": "body", @@ -35494,37 +34861,55 @@ "cloudConfig": { "type": "object", "required": [ - "instanceType" + "flavorConfig" ], "properties": { "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" } }, - "instanceType": { - "type": "string" - }, - "rootDeviceSize": { - "description": "Size of root volume in GB. Default is 30GB", + "diskGiB": { + "description": "Root disk size", "type": "integer", - "format": "int64" + "format": "int32" }, - "subnet": { - "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", - "type": "string" + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } }, - "subnets": { - "type": "array", - "items": { - "properties": { - "az": { - "type": "string" - }, - "id": { - "type": "string" - } + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" } } } @@ -35559,7 +34944,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -35603,7 +34988,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -35649,7 +35034,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -35698,7 +35083,7 @@ } ] }, - "/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}": { + "/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}": { "put": { "security": [ { @@ -35711,8 +35096,8 @@ "tags": [ "v1" ], - "summary": "Updates the specified GKE cloud config's machine pool", - "operationId": "v1CloudConfigsGkeMachinePoolUpdate", + "summary": "Updates the specified OpenStack cloud config's machine pool", + "operationId": "v1CloudConfigsOpenStackMachinePoolUpdate", "parameters": [ { "name": "body", @@ -35726,37 +35111,55 @@ "cloudConfig": { "type": "object", "required": [ - "instanceType" + "flavorConfig" ], "properties": { "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" } }, - "instanceType": { - "type": "string" - }, - "rootDeviceSize": { - "description": "Size of root volume in GB. Default is 30GB", + "diskGiB": { + "description": "Root disk size", "type": "integer", - "format": "int64" + "format": "int32" }, - "subnet": { - "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", - "type": "string" + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } }, - "subnets": { - "type": "array", - "items": { - "properties": { - "az": { - "type": "string" - }, - "id": { - "type": "string" - } + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" } } } @@ -35791,7 +35194,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -35835,7 +35238,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -35881,7 +35284,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -35916,7 +35319,7 @@ "v1" ], "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsGkeMachinePoolDelete", + "operationId": "v1CloudConfigsOpenStackMachinePoolDelete", "parameters": [ { "type": "string", @@ -35948,7 +35351,7 @@ } ] }, - "/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}/machines": { "get": { "security": [ { @@ -35961,48 +35364,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of GKE machines", - "operationId": "v1CloudConfigsGkePoolMachinesList", + "summary": "Retrieves a list of OpenStack machines", + "operationId": "v1CloudConfigsOpenStackPoolMachinesList", "parameters": [ - { - "type": "string", - "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", - "name": "fields", - "in": "query" - }, - { - "type": "string", - "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", - "name": "filters", - "in": "query" - }, - { - "type": "string", - "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", - "name": "orderBy", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "default": 50, - "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { - "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -36012,9 +35376,9 @@ ], "responses": { "200": { - "description": "An array of GKE machine items", + "description": "An array of OpenStack machine items", "schema": { - "description": "GCP machine list", + "description": "OpenStack machine list", "type": "object", "required": [ "items" @@ -36024,15 +35388,13 @@ "type": "array", "uniqueItems": true, "items": { - "description": "GCP cloud VM definition", + "description": "OpenStack cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -36040,7 +35402,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -36057,7 +35419,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -36069,37 +35431,36 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "GCP cloud VM definition spec", + "description": "OpenStack cloud VM definition spec", "type": "object", "required": [ - "instanceType" + "instanceType", + "nics" ], "properties": { + "az": { + "type": "string" + }, "image": { "type": "string" }, - "instanceConfig": { + "instanceType": { + "type": "object", "properties": { - "category": { - "type": "string" - }, - "cpuSet": { - "type": "integer", - "format": "int64" - }, "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", "type": "integer", - "format": "int64" + "format": "int32" }, "memoryMiB": { "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", @@ -36116,14 +35477,14 @@ } } }, - "instanceType": { - "type": "string" - }, "nics": { "type": "array", "items": { - "description": "GCP network interface", + "description": "OpenStack network interface", "type": "object", + "required": [ + "networkName" + ], "properties": { "index": { "type": "integer", @@ -36137,24 +35498,20 @@ "items": { "type": "string" } - }, - "publicIp": { - "type": "string" } } } }, - "project": { - "type": "string" - }, - "region": { + "projectId": { "type": "string" }, - "rootDeviceSize": { - "type": "integer", - "format": "int64" + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } }, - "zone": { + "sshKeyName": { "type": "string" } } @@ -36230,32 +35587,6 @@ } } } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } } } } @@ -36274,22 +35605,20 @@ "tags": [ "v1" ], - "summary": "Adds the machine to cloud config's machine pool", - "operationId": "v1CloudConfigsGkePoolMachinesAdd", + "summary": "Adds the OpenStack machine to cloud config's machine pool", + "operationId": "v1CloudConfigsOpenStackPoolMachinesAdd", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "GCP cloud VM definition", + "description": "OpenStack cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -36297,7 +35626,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -36314,7 +35643,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -36326,37 +35655,36 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "GCP cloud VM definition spec", + "description": "OpenStack cloud VM definition spec", "type": "object", "required": [ - "instanceType" + "instanceType", + "nics" ], "properties": { + "az": { + "type": "string" + }, "image": { "type": "string" }, - "instanceConfig": { + "instanceType": { + "type": "object", "properties": { - "category": { - "type": "string" - }, - "cpuSet": { - "type": "integer", - "format": "int64" - }, "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", "type": "integer", - "format": "int64" + "format": "int32" }, "memoryMiB": { "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", @@ -36373,14 +35701,14 @@ } } }, - "instanceType": { - "type": "string" - }, "nics": { "type": "array", "items": { - "description": "GCP network interface", + "description": "OpenStack network interface", "type": "object", + "required": [ + "networkName" + ], "properties": { "index": { "type": "integer", @@ -36394,24 +35722,20 @@ "items": { "type": "string" } - }, - "publicIp": { - "type": "string" } } } }, - "project": { - "type": "string" - }, - "region": { + "projectId": { "type": "string" }, - "rootDeviceSize": { - "type": "integer", - "format": "int64" + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } }, - "zone": { + "sshKeyName": { "type": "string" } } @@ -36535,7 +35859,7 @@ } ] }, - "/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { "get": { "security": [ { @@ -36548,8 +35872,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified GKE machine", - "operationId": "v1CloudConfigsGkePoolMachinesUidGet", + "summary": "Returns the specified OpenStack machine", + "operationId": "v1CloudConfigsOpenStackPoolMachinesUidGet", "parameters": [ { "type": "string", @@ -36562,15 +35886,13 @@ "200": { "description": "OK", "schema": { - "description": "GCP cloud VM definition", + "description": "OpenStack cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -36578,7 +35900,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -36595,7 +35917,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -36607,37 +35929,36 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "GCP cloud VM definition spec", + "description": "OpenStack cloud VM definition spec", "type": "object", "required": [ - "instanceType" + "instanceType", + "nics" ], "properties": { + "az": { + "type": "string" + }, "image": { "type": "string" }, - "instanceConfig": { + "instanceType": { + "type": "object", "properties": { - "category": { - "type": "string" - }, - "cpuSet": { - "type": "integer", - "format": "int64" - }, "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", "type": "integer", - "format": "int64" + "format": "int32" }, "memoryMiB": { "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", @@ -36654,14 +35975,14 @@ } } }, - "instanceType": { - "type": "string" - }, "nics": { "type": "array", "items": { - "description": "GCP network interface", + "description": "OpenStack network interface", "type": "object", + "required": [ + "networkName" + ], "properties": { "index": { "type": "integer", @@ -36675,24 +35996,20 @@ "items": { "type": "string" } - }, - "publicIp": { - "type": "string" } } } }, - "project": { - "type": "string" - }, - "region": { + "projectId": { "type": "string" }, - "rootDeviceSize": { - "type": "integer", - "format": "int64" + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } }, - "zone": { + "sshKeyName": { "type": "string" } } @@ -36783,22 +36100,20 @@ "tags": [ "v1" ], - "summary": "Updates the specified machine to the cloud config's machine pool", - "operationId": "v1CloudConfigsGkePoolMachinesUidUpdate", + "summary": "Updates the specified machine to cloud config's machine pool", + "operationId": "v1CloudConfigsOpenStackPoolMachinesUidUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "GCP cloud VM definition", + "description": "OpenStack cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -36806,7 +36121,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -36823,7 +36138,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -36835,37 +36150,36 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "GCP cloud VM definition spec", + "description": "OpenStack cloud VM definition spec", "type": "object", "required": [ - "instanceType" + "instanceType", + "nics" ], "properties": { + "az": { + "type": "string" + }, "image": { "type": "string" }, - "instanceConfig": { + "instanceType": { + "type": "object", "properties": { - "category": { - "type": "string" - }, - "cpuSet": { - "type": "integer", - "format": "int64" - }, "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", "type": "integer", - "format": "int64" + "format": "int32" }, "memoryMiB": { "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", @@ -36882,14 +36196,14 @@ } } }, - "instanceType": { - "type": "string" - }, "nics": { "type": "array", "items": { - "description": "GCP network interface", + "description": "OpenStack network interface", "type": "object", + "required": [ + "networkName" + ], "properties": { "index": { "type": "integer", @@ -36903,24 +36217,20 @@ "items": { "type": "string" } - }, - "publicIp": { - "type": "string" } } } }, - "project": { - "type": "string" - }, - "region": { + "projectId": { "type": "string" }, - "rootDeviceSize": { - "type": "integer", - "format": "int64" + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } }, - "zone": { + "sshKeyName": { "type": "string" } } @@ -37022,8 +36332,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified Gcp machine", - "operationId": "v1CloudConfigsGkePoolMachinesUidDelete", + "summary": "Deletes the specified OpenStack machine", + "operationId": "v1CloudConfigsOpenStackPoolMachinesUidDelete", "parameters": [ { "type": "string", @@ -37062,7 +36372,7 @@ } ] }, - "/v1/cloudconfigs/libvirt/{configUid}": { + "/v1/cloudconfigs/tke/{configUid}": { "get": { "security": [ { @@ -37075,8 +36385,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified libvirt cloud config", - "operationId": "v1CloudConfigsLibvirtGet", + "summary": "Returns the specified TKE cloud config", + "operationId": "v1CloudConfigsTkeGet", "parameters": [ { "type": "string", @@ -37089,23 +36399,15 @@ "200": { "description": "OK", "schema": { - "description": "LibvirtCloudConfig is the Schema for the libvirtcloudconfigs API", + "description": "TencentCloudConfig is the Schema for the tencentcloudconfigs API", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Cloud type of the cloud config", - "type": "string" - }, "metadata": { "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -37122,7 +36424,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -37134,60 +36436,93 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "LibvirtCloudConfigSpec defines the desired state of LibvirtCloudConfig", + "description": "TencentCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", "type": "object", - "required": [ - "clusterConfig", - "machinePoolConfig" - ], "properties": { + "cloudAccountRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, "clusterConfig": { + "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", "type": "object", + "required": [ + "region" + ], "properties": { - "controlPlaneEndpoint": { + "endpointAccess": { + "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", "type": "object", "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "IsExtranet": { + "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", + "type": "boolean" + }, + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDR": { + "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", "type": "string" }, - "host": { - "description": "Host is FQDN(DDNS) or IP", + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "securityGroup": { + "description": "Tencent security group", "type": "string" }, - "type": { - "description": "Type indicates DDNS or VIP", + "subnetId": { + "description": "Tencent Subnet", "type": "string" } } }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", - "type": "array", - "items": { - "type": "string" - } + "region": { + "type": "string" }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "sshKeyIDs": { "type": "array", "items": { "type": "string" } }, - "staticIp": { - "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", - "type": "boolean" + "vpcID": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" } } }, @@ -37195,14 +36530,9 @@ "type": "array", "items": { "type": "object", - "required": [ - "instanceType", - "placements", - "rootDiskInGB" - ], "properties": { "additionalLabels": { - "description": "additionalLabels", + "description": "AdditionalLabels", "type": "object", "additionalProperties": { "type": "string" @@ -37215,73 +36545,51 @@ "type": "string" } }, - "instanceType": { - "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], + "azs": { + "description": "AZs is only used for dynamic placement", + "type": "array", + "items": { + "type": "string" + } + }, + "instanceConfig": { "properties": { - "cpuPassthroughSpec": { - "type": "object", - "properties": { - "cachePassthrough": { - "type": "boolean" - }, - "isEnabled": { - "description": "Enables the CPU Passthrough for the libvirt domain", - "type": "boolean" - } - } - }, - "cpuset": { - "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "category": { "type": "string" }, - "gpuConfig": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deviceModel": { - "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "numGPUs": { - "description": "NumGPUs is the number of GPUs", - "type": "integer", - "format": "int32" - }, - "vendorName": { - "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } + "cpuSet": { + "type": "integer", + "format": "int64" }, - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", + "diskGiB": { "type": "integer", - "format": "int32" + "format": "int64" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" }, "numCPUs": { - "description": "NumCPUs is the number of CPUs", + "description": "NumCPUs is the number of virtual processors in a virtual machine", "type": "integer", "format": "int32" } } }, + "instanceType": { + "description": "instance type", + "type": "string" + }, "isControlPlane": { "description": "whether this pool is for control plane", "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -37319,160 +36627,26 @@ "type": "integer", "format": "int32" }, - "nonRootDisksInGB": { - "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", - "type": "array", - "items": { - "type": "object", - "required": [ - "sizeInGB" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "managed": { - "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", - "type": "boolean" - }, - "sizeInGB": { - "description": "SizeInGB is the target size in GB of the disk to be added", - "type": "integer", - "format": "int32" - } - } - } - }, - "placements": { - "description": "Placements defines the configurations of the failureDomains(hosts) for the machine pool", - "type": "array", - "items": { - "type": "object", - "required": [ - "hostUid", - "hostAddress", - "networks", - "sourceStoragePool" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "gpuDevices": { - "description": "GPU Devices is the list of LibvirtHost GPU devices, to be used for this placement", - "type": "array", - "items": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "model": { - "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "vendor": { - "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - } - }, - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the LibvirtHost", - "type": "string" - }, - "hostIdentity": { - "type": "object", - "properties": { - "caCert": { - "description": "CACert is the client CA certificate", - "type": "string" - }, - "mode": { - "description": "Mode indicates a system or session connection to the host", - "type": "string" - }, - "socketPath": { - "description": "SocketPath is an optional path to the socket on the host, if not using defaults", - "type": "string" - }, - "sshSecret": { - "type": "object", - "properties": { - "name": { - "description": "SSH secret name", - "type": "string" - }, - "privateKey": { - "description": "Private Key to access the host", - "type": "string" - } - } - } - } - }, - "hostUid": { - "description": "HostUid is the ID of the LibvirtHost", - "type": "string" - }, - "networks": { - "description": "Networks defines the network specifications of the vms in the machine pool", - "type": "array", - "items": { - "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", - "type": "object", - "required": [ - "networkName", - "networkType" - ], - "properties": { - "networkName": { - "description": "NetworkName of the libvirt network where this machine will be connected", - "type": "string" - }, - "networkType": { - "description": "NetworkType specifies the type of network", - "type": "string", - "enum": [ - "default", - "bridge" - ] - } - } - } - }, - "sourceStoragePool": { - "description": "SourceStoragePool is the storage pool for the vm image", - "type": "string" - }, - "targetStoragePool": { - "description": "TargetStoragePool is the optional storage pool from which additional disks are assigned. If not specified, the sourceStoragePool is also used as the targetStoragePool", - "type": "string" - } - } - } - }, - "rootDiskInGB": { - "description": "RootDiskInGB is the size of a vm's root disk, in GB", + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", "type": "integer", - "format": "int32" + "format": "int64" }, "size": { "description": "size of the pool, number of machines", "type": "integer", "format": "int32" }, + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", - "uniqueItems": true, "items": { "description": "Taint", "type": "object", @@ -37516,82 +36690,11 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" - }, - "xslTemplate": { - "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", - "type": "string" - } - } - } - } - } - }, - "status": { - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "nodeImages": { - "description": "NodeImages are the list of images generated on all the LibvirtHosts", - "type": "array", - "items": { - "description": "LibvirtImage is the Image generated on the LibvirtHost", - "type": "object", - "properties": { - "hostID": { - "description": "HostID is the ID of the LibvirtHost", - "type": "string" - }, - "imageName": { - "description": "ImageName is the name of the Libvirt image", - "type": "string" - }, - "storagePool": { - "description": "StoragePool is the name of the storagePool where is image is located", - "type": "string" } } } - }, - "sourceImageId": { - "description": "SourceImageId can be from packref's annotations or from pack.json", - "type": "string" } } } @@ -37610,7 +36713,7 @@ } ] }, - "/v1/cloudconfigs/libvirt/{configUid}/clusterConfig": { + "/v1/cloudconfigs/tke/{configUid}/clusterConfig": { "put": { "security": [ { @@ -37624,52 +36727,71 @@ "v1" ], "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsLibvirtUidClusterConfig", + "operationId": "v1CloudConfigsTkeUidClusterConfig", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Libvirt cloud cluster config entity", + "description": "Tencent cloud cluster config entity", "type": "object", "properties": { "clusterConfig": { + "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", "type": "object", + "required": [ + "region" + ], "properties": { - "controlPlaneEndpoint": { + "endpointAccess": { + "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", "type": "object", "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "IsExtranet": { + "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", + "type": "boolean" + }, + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDR": { + "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", "type": "string" }, - "host": { - "description": "Host is FQDN(DDNS) or IP", + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "securityGroup": { + "description": "Tencent security group", "type": "string" }, - "type": { - "description": "Type indicates DDNS or VIP", + "subnetId": { + "description": "Tencent Subnet", "type": "string" } } }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", - "type": "array", - "items": { - "type": "string" - } + "region": { + "type": "string" }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "sshKeyIDs": { "type": "array", "items": { "type": "string" } }, - "staticIp": { - "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", - "type": "boolean" + "vpcID": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" } } } @@ -37699,7 +36821,7 @@ } ] }, - "/v1/cloudconfigs/libvirt/{configUid}/machinePools": { + "/v1/cloudconfigs/tke/{configUid}/machinePools": { "post": { "security": [ { @@ -37712,191 +36834,44 @@ "tags": [ "v1" ], - "summary": "Creates a libvirt cloud config's machine pool", - "operationId": "v1CloudConfigsLibvirtMachinePoolCreate", + "summary": "Creates an TKE cloud config's machine pool", + "operationId": "v1CloudConfigsTkeMachinePoolCreate", "parameters": [ { "name": "body", "in": "body", "schema": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { - "required": [ - "instanceType", - "placements", - "rootDiskInGB" - ], + "type": "object", "properties": { - "instanceType": { - "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "cpuPassthroughSpec": { - "type": "object", - "properties": { - "cachePassthrough": { - "type": "boolean" - }, - "isEnabled": { - "description": "Enables the CPU Passthrough for the libvirt domain", - "type": "boolean" - } - } - }, - "cpuset": { - "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", - "type": "string" - }, - "gpuConfig": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deviceModel": { - "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "numGPUs": { - "description": "NumGPUs is the number of GPUs", - "type": "integer", - "format": "int32" - }, - "vendorName": { - "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - }, - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } - }, - "nonRootDisksInGB": { - "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "azs": { "type": "array", "items": { - "type": "object", - "required": [ - "sizeInGB" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "managed": { - "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", - "type": "boolean" - }, - "sizeInGB": { - "description": "SizeInGB is the target size in GB of the disk to be added", - "type": "integer", - "format": "int32" - } - } + "type": "string" } }, - "placements": { - "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Libvirt placement config", - "type": "object", - "required": [ - "hostUid" - ], - "properties": { - "dataStoragePool": { - "type": "string" - }, - "gpuDevices": { - "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", - "type": "array", - "items": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "model": { - "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "vendor": { - "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - } - }, - "hostUid": { - "type": "string" - }, - "networks": { - "type": "array", - "items": { - "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", - "type": "object", - "required": [ - "networkName", - "networkType" - ], - "properties": { - "networkName": { - "description": "NetworkName of the libvirt network where this machine will be connected", - "type": "string" - }, - "networkType": { - "description": "NetworkType specifies the type of network", - "type": "string", - "enum": [ - "default", - "bridge" - ] - } - } - } - }, - "sourceStoragePool": { - "type": "string" - }, - "targetStoragePool": { - "type": "string" - } - } - } + "instanceType": { + "description": "instance type", + "type": "string" }, - "rootDiskInGB": { - "description": "RootDiskInGB is the size of a vm's root disk, in GiB", + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", "type": "integer", - "format": "int32" + "format": "int64", + "maximum": 2000, + "minimum": 1 }, - "xslTemplate": { - "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", - "type": "string" + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } } } }, @@ -37929,7 +36904,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -37973,7 +36948,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -38019,7 +36994,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -38068,7 +37043,7 @@ } ] }, - "/v1/cloudconfigs/libvirt/{configUid}/machinePools/{machinePoolName}": { + "/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}": { "put": { "security": [ { @@ -38081,191 +37056,44 @@ "tags": [ "v1" ], - "summary": "Updates the specified Libvirt cloud config's machine pool", - "operationId": "v1CloudConfigsLibvirtMachinePoolUpdate", + "summary": "Updates the specified TKE cloud config's machine pool", + "operationId": "v1CloudConfigsTkeMachinePoolUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { - "required": [ - "instanceType", - "placements", - "rootDiskInGB" - ], + "type": "object", "properties": { - "instanceType": { - "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "cpuPassthroughSpec": { - "type": "object", - "properties": { - "cachePassthrough": { - "type": "boolean" - }, - "isEnabled": { - "description": "Enables the CPU Passthrough for the libvirt domain", - "type": "boolean" - } - } - }, - "cpuset": { - "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", - "type": "string" - }, - "gpuConfig": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deviceModel": { - "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "numGPUs": { - "description": "NumGPUs is the number of GPUs", - "type": "integer", - "format": "int32" - }, - "vendorName": { - "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - }, - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } - }, - "nonRootDisksInGB": { - "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "azs": { "type": "array", "items": { - "type": "object", - "required": [ - "sizeInGB" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "managed": { - "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", - "type": "boolean" - }, - "sizeInGB": { - "description": "SizeInGB is the target size in GB of the disk to be added", - "type": "integer", - "format": "int32" - } - } + "type": "string" } }, - "placements": { - "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Libvirt placement config", - "type": "object", - "required": [ - "hostUid" - ], - "properties": { - "dataStoragePool": { - "type": "string" - }, - "gpuDevices": { - "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", - "type": "array", - "items": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "model": { - "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "vendor": { - "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - } - }, - "hostUid": { - "type": "string" - }, - "networks": { - "type": "array", - "items": { - "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", - "type": "object", - "required": [ - "networkName", - "networkType" - ], - "properties": { - "networkName": { - "description": "NetworkName of the libvirt network where this machine will be connected", - "type": "string" - }, - "networkType": { - "description": "NetworkType specifies the type of network", - "type": "string", - "enum": [ - "default", - "bridge" - ] - } - } - } - }, - "sourceStoragePool": { - "type": "string" - }, - "targetStoragePool": { - "type": "string" - } - } - } + "instanceType": { + "description": "instance type", + "type": "string" }, - "rootDiskInGB": { - "description": "RootDiskInGB is the size of a vm's root disk, in GiB", + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", "type": "integer", - "format": "int32" + "format": "int64", + "maximum": 2000, + "minimum": 1 }, - "xslTemplate": { - "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", - "type": "string" + "subnetIds": { + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object", + "additionalProperties": { + "type": "string" + } } } }, @@ -38298,7 +37126,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -38342,7 +37170,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -38388,7 +37216,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -38423,7 +37251,7 @@ "v1" ], "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsLibvirtMachinePoolDelete", + "operationId": "v1CloudConfigsTkeMachinePoolDelete", "parameters": [ { "type": "string", @@ -38455,7 +37283,7 @@ } ] }, - "/v1/cloudconfigs/libvirt/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}/machines": { "get": { "security": [ { @@ -38468,9 +37296,48 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Libvirt machines", - "operationId": "v1CloudConfigsLibvirtPoolMachinesList", + "summary": "Retrieves a list of TKE machines", + "operationId": "v1CloudConfigsTkePoolMachinesList", "parameters": [ + { + "type": "string", + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "name": "fields", + "in": "query" + }, + { + "type": "string", + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "name": "filters", + "in": "query" + }, + { + "type": "string", + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "name": "orderBy", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -38480,9 +37347,9 @@ ], "responses": { "200": { - "description": "An array of Libvirt machine items", + "description": "An array of TKE machine items", "schema": { - "description": "Libvirt machine list", + "description": "Tencent machine list", "type": "object", "required": [ "items" @@ -38492,14 +37359,13 @@ "type": "array", "uniqueItems": true, "items": { - "description": "Libvirt cloud VM definition", + "description": "Tencent cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -38507,7 +37373,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -38524,7 +37390,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -38536,139 +37402,71 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "libvirt cloud VM definition spec", + "description": "Tencent cloud VM definition spec", "type": "object", + "required": [ + "nics", + "instanceType", + "imageId" + ], "properties": { - "disks": { - "type": "array", - "items": { - "type": "object", - "required": [ - "sizeInGB" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "managed": { - "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", - "type": "boolean" - }, - "sizeInGB": { - "description": "SizeInGB is the target size in GB of the disk to be added", - "type": "integer", - "format": "int32" - } - } - } - }, - "edgeHostUid": { - "type": "string" - }, - "failureDomain": { + "dnsName": { "type": "string" }, - "imageName": { + "imageId": { "type": "string" }, "instanceType": { - "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "cpuPassthroughSpec": { - "type": "object", - "properties": { - "cachePassthrough": { - "type": "boolean" - }, - "isEnabled": { - "description": "Enables the CPU Passthrough for the libvirt domain", - "type": "boolean" - } - } - }, - "cpuset": { - "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", - "type": "string" - }, - "gpuConfig": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deviceModel": { - "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "numGPUs": { - "description": "NumGPUs is the number of GPUs", - "type": "integer", - "format": "int32" - }, - "vendorName": { - "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - }, - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } + "type": "string" }, "nics": { "type": "array", "items": { - "description": "Libvirt network interface", + "description": "Tencent network interface", "type": "object", - "required": [ - "macAddress" - ], "properties": { "index": { "type": "integer", "format": "int8" }, - "macAddress": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { "type": "string" } + }, + "publicIp": { + "type": "string" } } } }, - "targetStoragePool": { + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + }, + "zoneId": { "type": "string" } } @@ -38744,6 +37542,32 @@ } } } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } } } } @@ -38762,21 +37586,20 @@ "tags": [ "v1" ], - "summary": "Adds the Libvirt machine to cloud config's machine pool", - "operationId": "v1CloudConfigsLibvirtPoolMachinesAdd", + "summary": "Adds the machine to cloud config's machine pool", + "operationId": "v1CloudConfigsTkePoolMachinesAdd", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Libvirt cloud VM definition", + "description": "Tencent cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -38784,7 +37607,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -38801,7 +37624,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -38813,139 +37636,71 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "libvirt cloud VM definition spec", + "description": "Tencent cloud VM definition spec", "type": "object", + "required": [ + "nics", + "instanceType", + "imageId" + ], "properties": { - "disks": { - "type": "array", - "items": { - "type": "object", - "required": [ - "sizeInGB" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "managed": { - "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", - "type": "boolean" - }, - "sizeInGB": { - "description": "SizeInGB is the target size in GB of the disk to be added", - "type": "integer", - "format": "int32" - } - } - } - }, - "edgeHostUid": { - "type": "string" - }, - "failureDomain": { + "dnsName": { "type": "string" }, - "imageName": { + "imageId": { "type": "string" }, "instanceType": { - "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "cpuPassthroughSpec": { - "type": "object", - "properties": { - "cachePassthrough": { - "type": "boolean" - }, - "isEnabled": { - "description": "Enables the CPU Passthrough for the libvirt domain", - "type": "boolean" - } - } - }, - "cpuset": { - "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", - "type": "string" - }, - "gpuConfig": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deviceModel": { - "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "numGPUs": { - "description": "NumGPUs is the number of GPUs", - "type": "integer", - "format": "int32" - }, - "vendorName": { - "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - }, - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } + "type": "string" }, "nics": { "type": "array", "items": { - "description": "Libvirt network interface", + "description": "Tencent network interface", "type": "object", - "required": [ - "macAddress" - ], "properties": { "index": { "type": "integer", "format": "int8" }, - "macAddress": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { "type": "string" } + }, + "publicIp": { + "type": "string" } } } }, - "targetStoragePool": { + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + }, + "zoneId": { "type": "string" } } @@ -39069,7 +37824,7 @@ } ] }, - "/v1/cloudconfigs/libvirt/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { "get": { "security": [ { @@ -39082,8 +37837,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified Libvirt machine", - "operationId": "v1CloudConfigsLibvirtPoolMachinesUidGet", + "summary": "Returns the specified Tke machine", + "operationId": "v1CloudConfigsTkePoolMachinesUidGet", "parameters": [ { "type": "string", @@ -39096,14 +37851,13 @@ "200": { "description": "OK", "schema": { - "description": "Libvirt cloud VM definition", + "description": "Tencent cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -39111,7 +37865,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -39128,7 +37882,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -39140,139 +37894,71 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "libvirt cloud VM definition spec", + "description": "Tencent cloud VM definition spec", "type": "object", + "required": [ + "nics", + "instanceType", + "imageId" + ], "properties": { - "disks": { + "dnsName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "string" + }, + "nics": { "type": "array", "items": { + "description": "Tencent network interface", "type": "object", - "required": [ - "sizeInGB" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "managed": { - "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", - "type": "boolean" - }, - "sizeInGB": { - "description": "SizeInGB is the target size in GB of the disk to be added", - "type": "integer", - "format": "int32" - } - } - } - }, - "edgeHostUid": { - "type": "string" - }, - "failureDomain": { - "type": "string" - }, - "imageName": { - "type": "string" - }, - "instanceType": { - "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "cpuPassthroughSpec": { - "type": "object", - "properties": { - "cachePassthrough": { - "type": "boolean" - }, - "isEnabled": { - "description": "Enables the CPU Passthrough for the libvirt domain", - "type": "boolean" - } - } - }, - "cpuset": { - "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", - "type": "string" - }, - "gpuConfig": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deviceModel": { - "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "numGPUs": { - "description": "NumGPUs is the number of GPUs", - "type": "integer", - "format": "int32" - }, - "vendorName": { - "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - }, - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } - }, - "nics": { - "type": "array", - "items": { - "description": "Libvirt network interface", - "type": "object", - "required": [ - "macAddress" - ], "properties": { "index": { "type": "integer", "format": "int8" }, - "macAddress": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { "type": "string" } + }, + "publicIp": { + "type": "string" } } } }, - "targetStoragePool": { + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + }, + "zoneId": { "type": "string" } } @@ -39363,21 +38049,20 @@ "tags": [ "v1" ], - "summary": "Updates the specified machine to cloud config's machine pool", - "operationId": "v1CloudConfigsLibvirtPoolMachinesUidUpdate", + "summary": "Updates the specified machine to the cloud config's machine pool", + "operationId": "v1CloudConfigsTkePoolMachinesUidUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Libvirt cloud VM definition", + "description": "Tencent cloud VM definition", + "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -39385,7 +38070,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -39402,7 +38087,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -39414,139 +38099,71 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "libvirt cloud VM definition spec", + "description": "Tencent cloud VM definition spec", "type": "object", + "required": [ + "nics", + "instanceType", + "imageId" + ], "properties": { - "disks": { - "type": "array", - "items": { - "type": "object", - "required": [ - "sizeInGB" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "managed": { - "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", - "type": "boolean" - }, - "sizeInGB": { - "description": "SizeInGB is the target size in GB of the disk to be added", - "type": "integer", - "format": "int32" - } - } - } - }, - "edgeHostUid": { - "type": "string" - }, - "failureDomain": { + "dnsName": { "type": "string" }, - "imageName": { + "imageId": { "type": "string" }, "instanceType": { - "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "cpuPassthroughSpec": { - "type": "object", - "properties": { - "cachePassthrough": { - "type": "boolean" - }, - "isEnabled": { - "description": "Enables the CPU Passthrough for the libvirt domain", - "type": "boolean" - } - } - }, - "cpuset": { - "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", - "type": "string" - }, - "gpuConfig": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deviceModel": { - "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "numGPUs": { - "description": "NumGPUs is the number of GPUs", - "type": "integer", - "format": "int32" - }, - "vendorName": { - "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - }, - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } + "type": "string" }, "nics": { "type": "array", "items": { - "description": "Libvirt network interface", + "description": "Tencent network interface", "type": "object", - "required": [ - "macAddress" - ], "properties": { "index": { "type": "integer", "format": "int8" }, - "macAddress": { - "type": "string" - }, "privateIPs": { "type": "array", "items": { "type": "string" } + }, + "publicIp": { + "type": "string" } } } }, - "targetStoragePool": { + "securityGroups": { + "type": "array", + "items": { + "type": "string" + } + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + }, + "zoneId": { "type": "string" } } @@ -39648,8 +38265,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified Libvirt machine", - "operationId": "v1CloudConfigsLibvirtPoolMachinesUidDelete", + "summary": "Deletes the specified Tencent machine", + "operationId": "v1CloudConfigsTkePoolMachinesUidDelete", "parameters": [ { "type": "string", @@ -39688,7 +38305,7 @@ } ] }, - "/v1/cloudconfigs/maas/{configUid}": { + "/v1/cloudconfigs/virtual/{configUid}": { "get": { "security": [ { @@ -39701,8 +38318,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified Maas cloud config", - "operationId": "v1CloudConfigsMaasGet", + "summary": "Returns the specified Virtual cloud config", + "operationId": "v1CloudConfigsVirtualGet", "parameters": [ { "type": "string", @@ -39715,15 +38332,15 @@ "200": { "description": "OK", "schema": { - "description": "MaasCloudConfig is the Schema for the maascloudconfigs API", + "description": "VirtualCloudConfig is the Schema for the virtual cloudconfigs API", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -39731,7 +38348,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -39748,7 +38365,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -39760,57 +38377,82 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "MaasCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "description": "VirtualCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec for cluster-api.", "type": "object", + "required": [ + "clusterConfig", + "hostClusterUid", + "machinePoolConfig" + ], "properties": { - "cloudAccountRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, "clusterConfig": { - "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", + "description": "Cluster level configuration for virtual cluster", "type": "object", - "required": [ - "domain" - ], "properties": { - "domain": { - "description": "Domain name of the cluster to be provisioned", - "type": "string" + "controlPlaneEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } }, - "sshKeys": { - "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", - "type": "array", - "items": { - "type": "string" + "helmRelease": { + "type": "object", + "properties": { + "chart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "values": { + "type": "string", + "default": "" + } } + }, + "kubernetesVersion": { + "type": "string", + "default": "" } } }, + "hostClusterUid": { + "type": "string" + }, "machinePoolConfig": { "type": "array", "items": { @@ -39842,15 +38484,35 @@ "instanceType": { "type": "object", "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, "minCPU": { "description": "Minimum CPU cores", "type": "integer", "format": "int32" }, - "minMemInMB": { + "minMemInMiB": { "description": "Minimum memory in MiB", "type": "integer", "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" } } }, @@ -39859,7 +38521,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -39892,11 +38554,6 @@ "name": { "type": "string" }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, "resourcePool": { "type": "string" }, @@ -39905,15 +38562,8 @@ "type": "integer", "format": "int32" }, - "tags": { - "description": "Tags in maas environment", - "type": "array", - "items": { - "type": "string" - } - }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -39959,7 +38609,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -39968,13 +38618,9 @@ } }, "status": { - "description": "MaasCloudConfigStatus defines the observed state of MaasCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "description": "Defines the status of virtual cloud config", "type": "object", "properties": { - "ansibleRoleDigest": { - "description": "For mold controller to identify if is there any changes in Pack", - "type": "string" - }, "conditions": { "type": "array", "items": { @@ -40009,39 +38655,13 @@ "type": "string" } } - } + }, + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" }, "isAddonLayer": { "description": "addon layers present in spc", "type": "boolean" - }, - "nodeImage": { - "description": "Name of the image", - "type": "object", - "properties": { - "name": { - "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", - "type": "string" - }, - "state": { - "type": "string" - } - } - }, - "roleDigest": { - "description": "this map will be for ansible roles present in eack pack", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "sourceImageId": { - "description": "sourceImageId, it can be from packref's annotations or from pack.json", - "type": "string" - }, - "useCapiImage": { - "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", - "type": "boolean" } } } @@ -40060,7 +38680,7 @@ } ] }, - "/v1/cloudconfigs/maas/{configUid}/clusterConfig": { + "/v1/cloudconfigs/virtual/{configUid}/clusterConfig": { "put": { "security": [ { @@ -40074,32 +38694,67 @@ "v1" ], "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsMaasUidClusterConfig", + "operationId": "v1CloudConfigsVirtualUidClusterConfig", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Maas cloud cluster config entity", + "description": "Virtual cloud cluster config entity", "type": "object", "properties": { "clusterConfig": { - "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", + "description": "Cluster level configuration for virtual cluster", "type": "object", - "required": [ - "domain" - ], "properties": { - "domain": { - "description": "Domain name of the cluster to be provisioned", - "type": "string" + "controlPlaneEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } }, - "sshKeys": { - "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", - "type": "array", - "items": { - "type": "string" + "helmRelease": { + "type": "object", + "properties": { + "chart": { + "type": "object", + "properties": { + "name": { + "type": "string", + "default": "" + }, + "repo": { + "type": "string", + "default": "" + }, + "version": { + "type": "string", + "default": "" + } + } + }, + "values": { + "type": "string", + "default": "" + } } + }, + "kubernetesVersion": { + "type": "string", + "default": "" } } } @@ -40129,7 +38784,7 @@ } ] }, - "/v1/cloudconfigs/maas/{configUid}/machinePools": { + "/v1/cloudconfigs/virtual/{configUid}/machinePools": { "post": { "security": [ { @@ -40142,8 +38797,8 @@ "tags": [ "v1" ], - "summary": "Creates an Maas cloud config's machine pool", - "operationId": "v1CloudConfigsMaasMachinePoolCreate", + "summary": "Creates a virtual cloud config's machine pool", + "operationId": "v1CloudConfigsVirtualMachinePoolCreate", "parameters": [ { "name": "body", @@ -40157,166 +38812,43 @@ "cloudConfig": { "type": "object", "required": [ - "instanceType", - "resourcePool" + "instanceType" ], "properties": { - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, "instanceType": { "type": "object", "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, "minCPU": { "description": "Minimum CPU cores", "type": "integer", "format": "int32" }, - "minMemInMB": { + "minMemInMiB": { "description": "Minimum memory in MiB", "type": "integer", "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" } } - }, - "resourcePool": { - "description": "the resource pool", - "type": "string" - }, - "tags": { - "description": "Tags in maas environment", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false } } } @@ -40363,7 +38895,7 @@ } ] }, - "/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}": { + "/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}": { "put": { "security": [ { @@ -40376,8 +38908,8 @@ "tags": [ "v1" ], - "summary": "Updates the specified Maas cloud config's machine pool", - "operationId": "v1CloudConfigsMaasMachinePoolUpdate", + "summary": "Updates the specified virtual cloud config's machine pool", + "operationId": "v1CloudConfigsVirtualMachinePoolUpdate", "parameters": [ { "name": "body", @@ -40391,166 +38923,43 @@ "cloudConfig": { "type": "object", "required": [ - "instanceType", - "resourcePool" + "instanceType" ], "properties": { - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, "instanceType": { "type": "object", "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, "minCPU": { "description": "Minimum CPU cores", "type": "integer", "format": "int32" }, - "minMemInMB": { + "minMemInMiB": { "description": "Minimum memory in MiB", "type": "integer", "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" } } - }, - "resourcePool": { - "description": "the resource pool", - "type": "string" - }, - "tags": { - "description": "Tags in maas environment", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false } } } @@ -40583,7 +38992,7 @@ "v1" ], "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsMaasMachinePoolDelete", + "operationId": "v1CloudConfigsVirtualMachinePoolDelete", "parameters": [ { "type": "string", @@ -40615,7 +39024,7 @@ } ] }, - "/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}/machines": { "get": { "security": [ { @@ -40628,8 +39037,8 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Maas machines", - "operationId": "v1CloudConfigsMaasPoolMachinesList", + "summary": "Retrieves a list of virtual machines", + "operationId": "v1CloudConfigsVirtualPoolMachinesList", "parameters": [ { "type": "string", @@ -40679,9 +39088,9 @@ ], "responses": { "200": { - "description": "An array of Maas machine items", + "description": "An array of virtual machine items", "schema": { - "description": "List of MAAS machines", + "description": "List of virtual machines", "type": "object", "required": [ "items" @@ -40691,15 +39100,10 @@ "type": "array", "uniqueItems": true, "items": { - "description": "Maas cloud VM definition", + "description": "Virtual cloud machine definition", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -40707,7 +39111,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -40724,7 +39128,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -40736,46 +39140,21 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Maas cloud VM definition spec", + "description": "Virtual cloud machine definition spec", "type": "object", "properties": { - "az": { - "type": "string" - }, "hostname": { "type": "string" - }, - "nics": { - "type": "array", - "items": { - "description": "Maas network interface", - "type": "object", - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "publicIp": { - "type": "string" - } - } - } } } }, @@ -40895,21 +39274,16 @@ "v1" ], "summary": "Adds the machine to cloud config's machine pool", - "operationId": "v1CloudConfigsMaasPoolMachinesAdd", + "operationId": "v1CloudConfigsVirtualPoolMachinesAdd", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Maas cloud VM definition", + "description": "Virtual cloud machine definition", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -40917,7 +39291,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -40934,7 +39308,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -40946,46 +39320,21 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Maas cloud VM definition spec", + "description": "Virtual cloud machine definition spec", "type": "object", "properties": { - "az": { - "type": "string" - }, "hostname": { "type": "string" - }, - "nics": { - "type": "array", - "items": { - "description": "Maas network interface", - "type": "object", - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "publicIp": { - "type": "string" - } - } - } } } }, @@ -41108,7 +39457,7 @@ } ] }, - "/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { "get": { "security": [ { @@ -41121,8 +39470,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified Maas machine", - "operationId": "v1CloudConfigsMaasPoolMachinesUidGet", + "summary": "Returns the specified virtual machine", + "operationId": "v1CloudConfigsVirtualPoolMachinesUidGet", "parameters": [ { "type": "string", @@ -41135,15 +39484,10 @@ "200": { "description": "OK", "schema": { - "description": "Maas cloud VM definition", + "description": "Virtual cloud machine definition", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -41151,7 +39495,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -41168,7 +39512,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -41180,46 +39524,21 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Maas cloud VM definition spec", + "description": "Virtual cloud machine definition spec", "type": "object", "properties": { - "az": { - "type": "string" - }, "hostname": { "type": "string" - }, - "nics": { - "type": "array", - "items": { - "description": "Maas network interface", - "type": "object", - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "publicIp": { - "type": "string" - } - } - } } } }, @@ -41310,21 +39629,16 @@ "v1" ], "summary": "Updates the specified machine to the cloud config's machine pool", - "operationId": "v1CloudConfigsMaasPoolMachinesUidUpdate", + "operationId": "v1CloudConfigsVirtualPoolMachinesUidUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Maas cloud VM definition", + "description": "Virtual cloud machine definition", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -41332,7 +39646,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -41349,7 +39663,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -41361,46 +39675,21 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Maas cloud VM definition spec", + "description": "Virtual cloud machine definition spec", "type": "object", "properties": { - "az": { - "type": "string" - }, "hostname": { "type": "string" - }, - "nics": { - "type": "array", - "items": { - "description": "Maas network interface", - "type": "object", - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "publicIp": { - "type": "string" - } - } - } } } }, @@ -41501,8 +39790,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified Maas machine", - "operationId": "v1CloudConfigsMaasPoolMachinesUidDelete", + "summary": "Deletes the specified virtual machine", + "operationId": "v1CloudConfigsVirtualPoolMachinesUidDelete", "parameters": [ { "type": "string", @@ -41541,7 +39830,93 @@ } ] }, - "/v1/cloudconfigs/openstack/{configUid}": { + "/v1/cloudconfigs/virtual/{configUid}/resize": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates and resizes the virtual cluster", + "operationId": "v1CloudConfigsVirtualUidUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "required": [ + "instanceType" + ], + "properties": { + "instanceType": { + "type": "object", + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "type": "integer", + "format": "int32" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "type": "integer", + "format": "int32" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "type": "integer", + "format": "int32" + }, + "minCPU": { + "description": "Minimum CPU cores", + "type": "integer", + "format": "int32" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "type": "integer", + "format": "int32" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "type": "integer", + "format": "int32" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify virtual cloud config uid", + "name": "configUid", + "in": "path", + "required": true + } + ] + }, + "/v1/cloudconfigs/vsphere/{configUid}": { "get": { "security": [ { @@ -41554,8 +39929,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified OpenStack cloud config", - "operationId": "v1CloudConfigsOpenStackGet", + "summary": "Returns the specified vSphere cloud config", + "operationId": "v1CloudConfigsVsphereGet", "parameters": [ { "type": "string", @@ -41568,15 +39943,15 @@ "200": { "description": "OK", "schema": { - "description": "OpenStackCloudConfig is the Schema for the OpenStackcloudconfigs API", + "description": "VsphereCloudConfig is the Schema for the vspherecloudconfigs API", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -41584,7 +39959,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -41601,7 +39976,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -41613,18 +39988,22 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "OpenStackCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "description": "VsphereCloudConfigSpec defines the desired state of VsphereCloudConfig", "type": "object", + "required": [ + "clusterConfig", + "machinePoolConfig" + ], "properties": { "cloudAccountRef": { "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", @@ -41635,83 +40014,236 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } }, "clusterConfig": { - "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", "type": "object", + "required": [ + "placement" + ], "properties": { - "bastionDisabled": { - "description": "Create bastion node option we have earlier supported creation of bastion by default", - "type": "boolean" + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } }, - "dnsNameservers": { - "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", "type": "array", "items": { "type": "string" } }, - "domain": { + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", "type": "object", "properties": { - "id": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", "type": "string" }, - "name": { + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", "type": "string" - } - } - }, - "network": { - "type": "object", - "properties": { - "id": { + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", "type": "string" }, - "name": { + "folder": { + "description": "Folder is the folder in which VMs are created/located.", "type": "string" - } - } - }, - "nodeCidr": { - "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", - "type": "string" - }, - "project": { - "type": "object", - "properties": { - "id": { + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", "type": "string" }, - "name": { + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", "type": "string" } } }, - "region": { + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + } + }, + "edgeHostRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", "type": "string" }, - "sshKeyName": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, - "subnet": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" } } }, @@ -41720,7 +40252,8 @@ "items": { "type": "object", "required": [ - "flavorConfig" + "isControlPlane", + "instanceType" ], "properties": { "additionalLabels": { @@ -41737,57 +40270,38 @@ "type": "string" } }, - "azs": { - "description": "for master pool, this will be the failure domains for kcp", - "type": "array", - "items": { - "type": "string" - } - }, - "diskGiB": { - "description": "DiskGiB is used to configure rootVolume, the volume metadata to boot from", - "type": "integer", - "format": "int32" - }, - "flavor": { - "description": "Openstack flavor name, only return argument", - "type": "string" - }, - "flavorConfig": { + "instanceType": { + "type": "object", "required": [ - "name" + "numCPUs", + "memoryMiB", + "diskGiB" ], "properties": { "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" }, "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int64" }, - "name": { - "description": "Openstack flavor name", - "type": "string" - }, "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" } } }, - "image": { - "type": "string" - }, "isControlPlane": { "description": "whether this pool is for control plane", - "type": "boolean" + "type": "boolean", + "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -41825,43 +40339,194 @@ "type": "integer", "format": "int32" }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32" - }, - "subnet": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "taints": { - "description": "master or worker taints", + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", "type": "array", - "uniqueItems": true, "items": { - "description": "Taint", + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", "type": "object", "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" }, - "key": { - "description": "The taint key to be applied to a node", + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", "type": "string" }, - "timeAdded": { + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + } + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" @@ -41888,8 +40553,9 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean" + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false } } } @@ -41897,9 +40563,12 @@ } }, "status": { - "description": "OpenStackCloudConfigStatus defines the observed state of OpenStackCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "description": "VsphereCloudConfigStatus defines the observed state of VsphereCloudConfig", "type": "object", "properties": { + "ansibleDigest": { + "type": "string" + }, "conditions": { "type": "array", "items": { @@ -41936,14 +40605,46 @@ } } }, - "nodeImage": { + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "lastOVACreated": { + "type": "string" + }, + "lastVMExported": { "type": "string" }, + "nodeImage": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "roleDigest": { + "description": "this map will be for ansible roles present in eack pack", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "sourceImageId": { "description": "sourceImageId, it can be from packref's annotations or from pack.json", "type": "string" }, + "uploadOvaS3": { + "description": "UploadOVAS3 will hold last image name which uploaded to S3", + "type": "string" + }, "useCapiImage": { + "description": "If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", "type": "boolean" } } @@ -41963,7 +40664,7 @@ } ] }, - "/v1/cloudconfigs/openstack/{configUid}/clusterConfig": { + "/v1/cloudconfigs/vsphere/{configUid}/clusterConfig": { "put": { "security": [ { @@ -41977,83 +40678,118 @@ "v1" ], "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsOpenStackUidClusterConfig", + "operationId": "v1CloudConfigsVsphereUidClusterConfig", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Openstack cloud cluster config entity", + "description": "vSphere cloud cluster config entity", "type": "object", "properties": { "clusterConfig": { - "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", "type": "object", + "required": [ + "placement" + ], "properties": { - "bastionDisabled": { - "description": "Create bastion node option we have earlier supported creation of bastion by default", - "type": "boolean" + "controlPlaneEndpoint": { + "type": "object", + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "type": "string", + "enum": [ + "VIP", + "External", + "DDNS" + ] + } + } }, - "dnsNameservers": { - "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", "type": "array", "items": { "type": "string" } }, - "domain": { + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", "type": "object", "properties": { - "id": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", "type": "string" }, - "name": { + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", "type": "string" - } - } - }, - "network": { - "type": "object", - "properties": { - "id": { + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", "type": "string" }, - "name": { + "folder": { + "description": "Folder is the folder in which VMs are created/located.", "type": "string" - } - } - }, - "nodeCidr": { - "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", - "type": "string" - }, - "project": { - "type": "object", - "properties": { - "id": { + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", "type": "string" }, - "name": { + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", "type": "string" - } - } - }, - "region": { - "type": "string" - }, - "sshKeyName": { - "type": "string" - }, - "subnet": { - "type": "object", - "properties": { - "id": { + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", "type": "string" }, - "name": { + "uid": { + "description": "UID for this placement", "type": "string" } } + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "type": "array", + "items": { + "type": "string" + } + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" } } } @@ -42083,7 +40819,7 @@ } ] }, - "/v1/cloudconfigs/openstack/{configUid}/machinePools": { + "/v1/cloudconfigs/vsphere/{configUid}/machinePools": { "post": { "security": [ { @@ -42096,8 +40832,8 @@ "tags": [ "v1" ], - "summary": "Creates a OpenStack cloud config's machine pool", - "operationId": "v1CloudConfigsOpenStackMachinePoolCreate", + "summary": "Creates a vSphere cloud config's machine pool", + "operationId": "v1CloudConfigsVsphereMachinePoolCreate", "parameters": [ { "name": "body", @@ -42109,57 +40845,91 @@ ], "properties": { "cloudConfig": { - "type": "object", - "required": [ - "flavorConfig" - ], "properties": { - "azs": { - "description": "for master pool, this will be the failure domains for kcp", - "type": "array", - "items": { - "type": "string" - } - }, - "diskGiB": { - "description": "Root disk size", - "type": "integer", - "format": "int32" - }, - "flavorConfig": { + "instanceType": { + "type": "object", "required": [ - "name" + "numCPUs", + "memoryMiB", + "diskGiB" ], "properties": { "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" }, "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int64" }, - "name": { - "description": "Openstack flavor name", - "type": "string" - }, "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" } } }, - "subnet": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } } } } @@ -42194,7 +40964,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -42238,7 +41008,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -42284,7 +41054,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -42333,7 +41103,7 @@ } ] }, - "/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}": { + "/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}": { "put": { "security": [ { @@ -42346,8 +41116,8 @@ "tags": [ "v1" ], - "summary": "Updates the specified OpenStack cloud config's machine pool", - "operationId": "v1CloudConfigsOpenStackMachinePoolUpdate", + "summary": "Updates the specified vSphere cloud config's machine pool", + "operationId": "v1CloudConfigsVsphereMachinePoolUpdate", "parameters": [ { "name": "body", @@ -42359,57 +41129,91 @@ ], "properties": { "cloudConfig": { - "type": "object", - "required": [ - "flavorConfig" - ], "properties": { - "azs": { - "description": "for master pool, this will be the failure domains for kcp", - "type": "array", - "items": { - "type": "string" - } - }, - "diskGiB": { - "description": "Root disk size", - "type": "integer", - "format": "int32" - }, - "flavorConfig": { + "instanceType": { + "type": "object", "required": [ - "name" + "numCPUs", + "memoryMiB", + "diskGiB" ], "properties": { "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" }, "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int64" }, - "name": { - "description": "Openstack flavor name", - "type": "string" - }, "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" } } }, - "subnet": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "type": "array", + "items": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } } } } @@ -42444,7 +41248,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -42488,7 +41292,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -42534,7 +41338,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -42569,7 +41373,7 @@ "v1" ], "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsOpenStackMachinePoolDelete", + "operationId": "v1CloudConfigsVsphereMachinePoolDelete", "parameters": [ { "type": "string", @@ -42601,7 +41405,7 @@ } ] }, - "/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}/machines": { "get": { "security": [ { @@ -42614,9 +41418,48 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of OpenStack machines", - "operationId": "v1CloudConfigsOpenStackPoolMachinesList", + "summary": "Retrieves a list of vSphere machines", + "operationId": "v1CloudConfigsVspherePoolMachinesList", "parameters": [ + { + "type": "string", + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "name": "fields", + "in": "query" + }, + { + "type": "string", + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "name": "filters", + "in": "query" + }, + { + "type": "string", + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "name": "orderBy", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -42626,9 +41469,9 @@ ], "responses": { "200": { - "description": "An array of OpenStack machine items", + "description": "An array of vSphere machine items", "schema": { - "description": "OpenStack machine list", + "description": "vSphere machine list", "type": "object", "required": [ "items" @@ -42638,15 +41481,13 @@ "type": "array", "uniqueItems": true, "items": { - "description": "OpenStack cloud VM definition", + "description": "vSphere cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -42654,7 +41495,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -42671,7 +41512,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -42683,47 +41524,60 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "OpenStack cloud VM definition spec", + "description": "vSphere cloud VM definition spec", "type": "object", "required": [ - "instanceType", - "nics" + "vcenterServer", + "nics", + "placement" ], "properties": { - "az": { - "type": "string" - }, - "image": { - "type": "string" + "images": { + "type": "array", + "items": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + } }, "instanceType": { "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], "properties": { "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" }, "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int64" }, - "name": { - "type": "string" - }, "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" } @@ -42732,7 +41586,7 @@ "nics": { "type": "array", "items": { - "description": "OpenStack network interface", + "description": "vSphere network interface", "type": "object", "required": [ "networkName" @@ -42742,6 +41596,9 @@ "type": "integer", "format": "int8" }, + "macAddress": { + "type": "string" + }, "networkName": { "type": "string" }, @@ -42754,16 +41611,173 @@ } } }, - "projectId": { - "type": "string" - }, - "securityGroups": { + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", "type": "array", "items": { "type": "string" } }, - "sshKeyName": { + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", "type": "string" } } @@ -42839,6 +41853,32 @@ } } } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } } } } @@ -42857,22 +41897,20 @@ "tags": [ "v1" ], - "summary": "Adds the OpenStack machine to cloud config's machine pool", - "operationId": "v1CloudConfigsOpenStackPoolMachinesAdd", + "summary": "Adds the vSphere machine to cloud config's machine pool", + "operationId": "v1CloudConfigsVspherePoolMachinesAdd", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "OpenStack cloud VM definition", + "description": "vSphere cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -42880,7 +41918,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -42897,7 +41935,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -42909,47 +41947,60 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "OpenStack cloud VM definition spec", + "description": "vSphere cloud VM definition spec", "type": "object", "required": [ - "instanceType", - "nics" + "vcenterServer", + "nics", + "placement" ], "properties": { - "az": { - "type": "string" - }, - "image": { - "type": "string" + "images": { + "type": "array", + "items": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + } }, "instanceType": { "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], "properties": { "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" }, "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int64" }, - "name": { - "type": "string" - }, "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" } @@ -42958,7 +42009,7 @@ "nics": { "type": "array", "items": { - "description": "OpenStack network interface", + "description": "vSphere network interface", "type": "object", "required": [ "networkName" @@ -42968,6 +42019,9 @@ "type": "integer", "format": "int8" }, + "macAddress": { + "type": "string" + }, "networkName": { "type": "string" }, @@ -42980,129 +42034,286 @@ } } }, - "projectId": { - "type": "string" - }, - "securityGroups": { + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", "type": "array", "items": { "type": "string" } }, - "sshKeyName": { - "type": "string" - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", "type": "object", "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" }, - "state": { + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", "type": "string" }, - "message": { + "folder": { + "description": "Folder is the folder in which VMs are created/located.", "type": "string" }, - "state": { + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", "type": "string" - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + }, + "status": { + "description": "cloud machine status", + "type": "object", + "properties": { + "health": { + "description": "Machine health state", + "type": "object", + "properties": { + "conditions": { + "type": "array", + "items": { + "description": "Machine health condition", + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "instanceState": { + "type": "string", + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ] + }, + "maintenanceStatus": { + "description": "Machine maintenance status", + "type": "object", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster's cloud config uid", + "name": "configUid", + "in": "path", + "required": true }, { "type": "string", @@ -43113,7 +42324,7 @@ } ] }, - "/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { "get": { "security": [ { @@ -43126,8 +42337,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified OpenStack machine", - "operationId": "v1CloudConfigsOpenStackPoolMachinesUidGet", + "summary": "Returns the specified vSphere machine", + "operationId": "v1CloudConfigsVspherePoolMachinesUidGet", "parameters": [ { "type": "string", @@ -43140,15 +42351,13 @@ "200": { "description": "OK", "schema": { - "description": "OpenStack cloud VM definition", + "description": "vSphere cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -43156,7 +42365,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -43173,7 +42382,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -43185,47 +42394,60 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "OpenStack cloud VM definition spec", + "description": "vSphere cloud VM definition spec", "type": "object", "required": [ - "instanceType", - "nics" + "vcenterServer", + "nics", + "placement" ], "properties": { - "az": { - "type": "string" - }, - "image": { - "type": "string" + "images": { + "type": "array", + "items": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + } }, "instanceType": { "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], "properties": { "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" }, "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int64" }, - "name": { - "type": "string" - }, "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" } @@ -43234,7 +42456,7 @@ "nics": { "type": "array", "items": { - "description": "OpenStack network interface", + "description": "vSphere network interface", "type": "object", "required": [ "networkName" @@ -43244,6 +42466,9 @@ "type": "integer", "format": "int8" }, + "macAddress": { + "type": "string" + }, "networkName": { "type": "string" }, @@ -43256,16 +42481,173 @@ } } }, - "projectId": { - "type": "string" - }, - "securityGroups": { + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", "type": "array", "items": { "type": "string" } }, - "sshKeyName": { + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", "type": "string" } } @@ -43357,21 +42739,19 @@ "v1" ], "summary": "Updates the specified machine to cloud config's machine pool", - "operationId": "v1CloudConfigsOpenStackPoolMachinesUidUpdate", + "operationId": "v1CloudConfigsVspherePoolMachinesUidUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "OpenStack cloud VM definition", + "description": "vSphere cloud VM definition", "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -43379,7 +42759,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -43396,7 +42776,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -43408,47 +42788,60 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "OpenStack cloud VM definition spec", + "description": "vSphere cloud VM definition spec", "type": "object", "required": [ - "instanceType", - "nics" + "vcenterServer", + "nics", + "placement" ], "properties": { - "az": { - "type": "string" - }, - "image": { - "type": "string" + "images": { + "type": "array", + "items": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "type": "object", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + } + } }, "instanceType": { "type": "object", + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], "properties": { "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" }, "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int64" }, - "name": { - "type": "string" - }, "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", "type": "integer", "format": "int32" } @@ -43457,7 +42850,7 @@ "nics": { "type": "array", "items": { - "description": "OpenStack network interface", + "description": "vSphere network interface", "type": "object", "required": [ "networkName" @@ -43467,6 +42860,9 @@ "type": "integer", "format": "int8" }, + "macAddress": { + "type": "string" + }, "networkName": { "type": "string" }, @@ -43479,16 +42875,173 @@ } } }, - "projectId": { - "type": "string" - }, - "securityGroups": { + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", "type": "array", "items": { "type": "string" } }, - "sshKeyName": { + "placement": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "type": "object", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "type": "object", + "required": [ + "networkName" + ], + "properties": { + "ipPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "type": "object", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "type": "array", + "items": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "type": "object", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { + "type": "string" + } + }, + "search": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + } + } + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + } + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + } + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + } + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", "type": "string" } } @@ -43590,8 +43143,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified OpenStack machine", - "operationId": "v1CloudConfigsOpenStackPoolMachinesUidDelete", + "summary": "Deletes the specified vSphere machine", + "operationId": "v1CloudConfigsVspherePoolMachinesUidDelete", "parameters": [ { "type": "string", @@ -43630,8 +43183,8 @@ } ] }, - "/v1/cloudconfigs/tke/{configUid}": { - "get": { + "/v1/cloudconfigs/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}/maintenance": { + "put": { "security": [ { "ApiKey": [] @@ -43643,9 +43196,26 @@ "tags": [ "v1" ], - "summary": "Returns the specified TKE cloud config", - "operationId": "v1CloudConfigsTkeGet", + "summary": "Updates the specified machine maintenance", + "operationId": "v1CloudConfigsMachinePoolsMachineUidMaintenanceUpdate", "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "action": { + "description": "Machine maintenance mode action", + "type": "string", + "enum": [ + "cordon", + "uncordon" + ] + } + } + } + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -43654,310 +43224,8 @@ } ], "responses": { - "200": { - "description": "OK", - "schema": { - "description": "TencentCloudConfig is the Schema for the tencentcloudconfigs API", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "TencentCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", - "type": "object", - "properties": { - "cloudAccountRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "clusterConfig": { - "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "region" - ], - "properties": { - "endpointAccess": { - "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", - "type": "object", - "properties": { - "IsExtranet": { - "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", - "type": "boolean" - }, - "private": { - "description": "Private points VPC-internal control plane access to the private endpoint", - "type": "boolean" - }, - "privateCIDR": { - "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", - "type": "string" - }, - "public": { - "description": "Public controls whether control plane endpoints are publicly accessible", - "type": "boolean" - }, - "publicCIDRs": { - "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", - "type": "array", - "items": { - "type": "string" - } - }, - "securityGroup": { - "description": "Tencent security group", - "type": "string" - }, - "subnetId": { - "description": "Tencent Subnet", - "type": "string" - } - } - }, - "region": { - "type": "string" - }, - "sshKeyIDs": { - "type": "array", - "items": { - "type": "string" - } - }, - "vpcID": { - "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", - "type": "string" - } - } - }, - "machinePoolConfig": { - "type": "array", - "items": { - "type": "object", - "properties": { - "additionalLabels": { - "description": "AdditionalLabels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "azs": { - "description": "AZs is only used for dynamic placement", - "type": "array", - "items": { - "type": "string" - } - }, - "instanceConfig": { - "properties": { - "category": { - "type": "string" - }, - "cpuSet": { - "type": "integer", - "format": "int64" - }, - "diskGiB": { - "type": "integer", - "format": "int64" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, - "instanceType": { - "description": "instance type", - "type": "string" - }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean" - }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64" - }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32" - }, - "subnetIds": { - "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "taints": { - "description": "master or worker taints", - "type": "array", - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean" - } - } - } - } - } - } - } - } + "204": { + "description": "The resource was updated successfully" } } }, @@ -43968,90 +43236,61 @@ "name": "configUid", "in": "path", "required": true - } - ] - }, - "/v1/cloudconfigs/tke/{configUid}/clusterConfig": { - "put": { - "security": [ - { - "ApiKey": [] - }, - { + }, + { + "type": "string", + "description": "Machine pool name", + "name": "machinePoolName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Machine uid", + "name": "machineUid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Cloud type", + "name": "cloudType", + "in": "path", + "required": true + } + ] + }, + "/v1/cloudconfigs/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}/maintenance/status": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { "Authorization": [] } ], "tags": [ "v1" ], - "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsTkeUidClusterConfig", + "summary": "Updates the specified machine maintenance", + "operationId": "v1CloudConfigsMachinePoolsMachineUidMaintenanceStatusUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Tencent cloud cluster config entity", + "description": "Machine maintenance status", "type": "object", "properties": { - "clusterConfig": { - "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "region" - ], - "properties": { - "endpointAccess": { - "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", - "type": "object", - "properties": { - "IsExtranet": { - "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", - "type": "boolean" - }, - "private": { - "description": "Private points VPC-internal control plane access to the private endpoint", - "type": "boolean" - }, - "privateCIDR": { - "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", - "type": "string" - }, - "public": { - "description": "Public controls whether control plane endpoints are publicly accessible", - "type": "boolean" - }, - "publicCIDRs": { - "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", - "type": "array", - "items": { - "type": "string" - } - }, - "securityGroup": { - "description": "Tencent security group", - "type": "string" - }, - "subnetId": { - "description": "Tencent Subnet", - "type": "string" - } - } - }, - "region": { - "type": "string" - }, - "sshKeyIDs": { - "type": "array", - "items": { - "type": "string" - } - }, - "vpcID": { - "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", - "type": "string" - } - } + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" } } } @@ -44076,10 +43315,151 @@ "name": "configUid", "in": "path", "required": true + }, + { + "type": "string", + "description": "Machine pool name", + "name": "machinePoolName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Machine uid", + "name": "machineUid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Cloud type", + "name": "cloudType", + "in": "path", + "required": true } ] }, - "/v1/cloudconfigs/tke/{configUid}/machinePools": { + "/v1/cloudconfigs/{configUid}/machinePools/machineUids": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cloud config's machine pools and machine uid", + "operationId": "v1CloudConfigsMachinePoolsMachineUidsGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "properties": { + "machinePools": { + "type": "object", + "additionalProperties": { + "properties": { + "machineUids": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster's cloud config uid", + "name": "configUid", + "in": "path", + "required": true + } + ] + }, + "/v1/clouds/aws/account/sts": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves AWS external id and account id", + "operationId": "V1AwsAccountStsGet", + "parameters": [ + { + "enum": [ + "aws", + "aws-us-gov" + ], + "type": "string", + "default": "aws", + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "name": "partition", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "AWS cloud account sts", + "type": "object", + "properties": { + "accountId": { + "description": "A 12-digit number, such as 123456789012, that uniquely identifies an AWS account", + "type": "string" + }, + "externalId": { + "description": "It can be passed to the AssumeRole API of the STS. It can be used in the condition element in a role's trust policy, allowing the role to be assumed only when a certain value is present in the external ID", + "type": "string" + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + } + } + } + } + } + } + }, + "/v1/clouds/aws/account/validate": { "post": { "security": [ { @@ -44092,171 +43472,178 @@ "tags": [ "v1" ], - "summary": "Creates an TKE cloud config's machine pool", - "operationId": "v1CloudConfigsTkeMachinePoolCreate", + "summary": "Validate the specified AWS account credentials", + "operationId": "V1AwsAccountValidate", "parameters": [ { - "name": "body", + "description": "Request payload to validate AWS cloud account", + "name": "awsCloudAccount", "in": "body", + "required": true, "schema": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", "type": "object", - "required": [ - "cloudConfig" - ], "properties": { - "cloudConfig": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", "type": "object", "properties": { - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "instanceType": { - "description": "instance type", + "arn": { + "description": "Arn for the aws sts credentials in cloud account", "type": "string" }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64", - "maximum": 2000, - "minimum": 1 - }, - "subnetIds": { - "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", - "type": "object", - "additionalProperties": { - "type": "string" - } + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" } } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/clouds/aws/cloudwatch/validate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Validates aws cloud watch credentials", + "tags": [ + "v1" + ], + "summary": "validates aws cloud watch credentials", + "operationId": "V1CloudsAwsCloudWatchValidate", + "parameters": [ + { + "description": "Request payload for cloud watch config", + "name": "cloudWatchConfig", + "in": "body", + "required": true, + "schema": { + "description": "Cloud watch config entity", + "type": "object", + "properties": { + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", "type": "object", - "required": [ - "name", - "size", - "labels" - ], "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } + "accessKey": { + "description": "AWS account access key", + "type": "string" }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", "type": "array", "items": { "type": "string" } }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { + "secretKey": { + "description": "AWS account secret key", "type": "string" }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "sts": { + "description": "Aws sts credentials", "type": "object", "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" } } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false } } + }, + "group": { + "description": "Name of the group", + "type": "string" + }, + "region": { + "description": "Name of the region", + "type": "string" + }, + "stream": { + "description": "Name of the stream", + "type": "string" } } } @@ -44269,19 +43656,8 @@ } ], "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, + "204": { + "description": "Ok response without content", "headers": { "AuditUid": { "type": "string", @@ -44290,19 +43666,10 @@ } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}": { - "put": { + "/v1/clouds/aws/cost": { + "post": { "security": [ { "ApiKey": [] @@ -44314,189 +43681,157 @@ "tags": [ "v1" ], - "summary": "Updates the specified TKE cloud config's machine pool", - "operationId": "v1CloudConfigsTkeMachinePoolUpdate", + "summary": "Retrieves AWS cloud account usage cost from cost explorer.", + "operationId": "v1AwsCloudCost", "parameters": [ { + "description": "Request payload for AWS cloud cost", "name": "body", "in": "body", + "required": true, "schema": { + "description": "Aws cloud account usage cost payload spec", "type": "object", "required": [ - "cloudConfig" + "credentials" ], "properties": { - "cloudConfig": { + "accountId": { + "description": "AccountId of AWS cloud cost", + "type": "string" + }, + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", "type": "object", "properties": { - "azs": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", "type": "array", "items": { "type": "string" } }, - "instanceType": { - "description": "instance type", + "secretKey": { + "description": "AWS account secret key", "type": "string" }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64", - "maximum": 2000, - "minimum": 1 - }, - "subnetIds": { - "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "sts": { + "description": "Aws sts credentials", "type": "object", - "additionalProperties": { - "type": "string" + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } } } } }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", + "filter": { + "description": "Aws cloud account usage cost payload filter. startTime and endTime should be within 12 months range from now.", "type": "object", "required": [ - "name", - "size", - "labels" + "startTime" ], "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "name": { + "iamUserId": { + "description": "IAM UserId of AWS account", "type": "string" }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "AWS cloud account usage cost summary response data", + "type": "object", + "properties": { + "cost": { + "description": "AWS cloud account usage cost summary of monthlyCosts and totalCost", + "type": "object", + "properties": { + "monthlyCosts": { + "description": "Monthly cost of AWS cost", "type": "array", - "uniqueItems": true, "items": { - "description": "Taint", "type": "object", "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" + "amount": { + "description": "Amount for aws cloud cost", + "type": "number", + "format": "float64", + "x-omitempty": false }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" + "timestamp": { + "description": "Time duration for aws cloud cost", + "type": "integer" } } } }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", + "total": { + "description": "Total cost of AWS cost", + "type": "number", + "format": "float64", "x-omitempty": false } } } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" } } - }, - "delete": { + } + }, + "/v1/clouds/aws/imageIds/{imageId}/volumeSize": { + "get": { "security": [ { "ApiKey": [] @@ -44505,12 +43840,34 @@ "Authorization": [] } ], + "description": "Get AWS Volume Size", "tags": [ "v1" ], - "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsTkeMachinePoolDelete", + "summary": "Get AWS Volume Size", + "operationId": "V1AwsVolumeSizeGet", "parameters": [ + { + "type": "string", + "description": "Specific AWS Region", + "name": "region", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "AWS image id", + "name": "imageId", + "in": "path", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -44519,30 +43876,24 @@ } ], "responses": { - "204": { - "description": "The resource was deleted successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "AWS Volume Size entity", + "type": "object", + "properties": { + "sizeGB": { + "description": "AWS volume size", + "type": "integer" + } + } + } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}/machines": { - "get": { + "/v1/clouds/aws/policies": { + "post": { "security": [ { "ApiKey": [] @@ -44554,46 +43905,72 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of TKE machines", - "operationId": "v1CloudConfigsTkePoolMachinesList", + "summary": "Retrieves a list of AWS policies for the specified account", + "operationId": "V1AwsIamPolicies", "parameters": [ { - "type": "string", - "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", - "name": "fields", - "in": "query" - }, - { - "type": "string", - "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", - "name": "filters", - "in": "query" - }, - { - "type": "string", - "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", - "name": "orderBy", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "default": 50, - "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" + "description": "Request payload for AWS Cloud Account", + "name": "account", + "in": "body", + "required": true, + "schema": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "type": "object", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } + } + } }, { "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", "in": "query" }, { @@ -44605,235 +43982,38 @@ ], "responses": { "200": { - "description": "An array of TKE machine items", + "description": "(empty)", "schema": { - "description": "Tencent machine list", "type": "object", "required": [ - "items" + "policies" ], "properties": { - "items": { + "policies": { "type": "array", - "uniqueItems": true, "items": { - "description": "Tencent cloud VM definition", + "description": "Aws policy", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "arn": { "type": "string" }, - "kind": { - "description": "Deprecated. Cloud type of the machine.", + "policyId": { "type": "string" }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Tencent cloud VM definition spec", - "type": "object", - "required": [ - "nics", - "instanceType", - "imageId" - ], - "properties": { - "dnsName": { - "type": "string" - }, - "imageId": { - "type": "string" - }, - "instanceType": { - "type": "string" - }, - "nics": { - "type": "array", - "items": { - "description": "Tencent network interface", - "type": "object", - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "publicIp": { - "type": "string" - } - } - } - }, - "securityGroups": { - "type": "array", - "items": { - "type": "string" - } - }, - "subnetId": { - "type": "string" - }, - "type": { - "type": "string" - }, - "vpcId": { - "type": "string" - }, - "zoneId": { - "type": "string" - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } - } - } - } + "policyName": { + "type": "string" } } } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } } } } } } - }, + } + }, + "/v1/clouds/aws/policyArns/validate": { "post": { "security": [ { @@ -44846,199 +44026,90 @@ "tags": [ "v1" ], - "summary": "Adds the machine to cloud config's machine pool", - "operationId": "v1CloudConfigsTkePoolMachinesAdd", + "summary": "Validate the aws policy arns validate", + "operationId": "V1AwsPolicyArnsValidate", "parameters": [ { - "name": "body", + "description": "Request payload to validate AWS policy ARN", + "name": "spec", "in": "body", + "required": true, "schema": { - "description": "Tencent cloud VM definition", + "description": "Aws policy ARNs spec", "type": "object", + "required": [ + "policyArns", + "account" + ], "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the machine.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "account": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" + "accessKey": { + "description": "AWS account access key", + "type": "string" }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } + "default": "secret", + "enum": [ + "secret", + "sts" + ] }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Tencent cloud VM definition spec", - "type": "object", - "required": [ - "nics", - "instanceType", - "imageId" - ], - "properties": { - "dnsName": { - "type": "string" - }, - "imageId": { - "type": "string" - }, - "instanceType": { - "type": "string" - }, - "nics": { - "type": "array", - "items": { - "description": "Tencent network interface", - "type": "object", - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "publicIp": { - "type": "string" - } - } - } + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] }, - "securityGroups": { + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", "type": "array", "items": { "type": "string" } }, - "subnetId": { - "type": "string" - }, - "type": { - "type": "string" - }, - "vpcId": { - "type": "string" - }, - "zoneId": { + "secretKey": { + "description": "AWS account secret key", "type": "string" - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] }, - "maintenanceStatus": { - "description": "Machine maintenance status", + "sts": { + "description": "Aws sts credentials", "type": "object", "properties": { - "action": { - "type": "string" - }, - "message": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", "type": "string" }, - "state": { + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", "type": "string" } } } } + }, + "policyArns": { + "type": "array", + "items": { + "type": "string" + } } } } }, + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query" + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -45047,19 +44118,62 @@ } ], "responses": { - "201": { - "description": "Created successfully", + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/clouds/aws/properties/validate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Validate AWS properties", + "operationId": "V1AwsPropertiesValidate", + "parameters": [ + { + "description": "Request payload for AWS properties validate spec", + "name": "properties", + "in": "body", + "required": true, "schema": { + "description": "AWS properties validate spec", "type": "object", - "required": [ - "uid" - ], "properties": { - "uid": { + "region": { + "type": "string" + }, + "sshKeyName": { "type": "string" } } - }, + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", "headers": { "AuditUid": { "type": "string", @@ -45068,25 +44182,9 @@ } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/clouds/aws/regions": { "get": { "security": [ { @@ -45099,9 +44197,16 @@ "tags": [ "v1" ], - "summary": "Returns the specified Tke machine", - "operationId": "v1CloudConfigsTkePoolMachinesUidGet", + "summary": "Retrieves a list of AWS regions for the specified account", + "operationId": "V1AwsRegions", "parameters": [ + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -45111,187 +44216,105 @@ ], "responses": { "200": { - "description": "OK", + "description": "(empty)", "schema": { - "description": "Tencent cloud VM definition", "type": "object", + "required": [ + "regions" + ], "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the machine.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { + "regions": { + "description": "List of AWS regions", + "type": "array", + "items": { + "description": "AWS region which represents separate geographic area.", + "type": "object", + "properties": { + "endpoint": { + "description": "AWS offer a regional endpoint that can used to make requests", "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + }, + "name": { + "description": "Name of the AWS region", "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Tencent cloud VM definition spec", - "type": "object", - "required": [ - "nics", - "instanceType", - "imageId" - ], - "properties": { - "dnsName": { - "type": "string" - }, - "imageId": { - "type": "string" - }, - "instanceType": { - "type": "string" - }, - "nics": { - "type": "array", - "items": { - "description": "Tencent network interface", - "type": "object", - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "publicIp": { - "type": "string" - } - } - } - }, - "securityGroups": { - "type": "array", - "items": { + }, + "optInStatus": { + "description": "Enable your account to operate in the particular regions", "type": "string" } - }, - "subnetId": { - "type": "string" - }, - "type": { - "type": "string" - }, - "vpcId": { - "type": "string" - }, - "zoneId": { - "type": "string" } } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } + } + } + } + } + } + } + }, + "/v1/clouds/aws/regions/{region}/availabilityzones": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of AWS availability zones for the specified region", + "operationId": "V1AwsZones", + "parameters": [ + { + "type": "string", + "description": "Region for which zones are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "type": "object", + "required": [ + "zones" + ], + "properties": { + "zones": { + "description": "List of AWS Zones", + "type": "array", + "items": { + "description": "Distinct locations within an AWS Region that are engineered to be isolated from failures in other Zones", + "type": "object", + "properties": { + "name": { + "description": "AWS availability zone name", + "type": "string" + }, + "state": { + "description": "AWS availability zone state", + "type": "string" + }, + "zoneId": { + "description": "AWS availability zone id", + "type": "string" } } } @@ -45300,8 +44323,10 @@ } } } - }, - "put": { + } + }, + "/v1/clouds/aws/regions/{region}/copydefaultimages": { + "post": { "security": [ { "ApiKey": [] @@ -45313,190 +44338,75 @@ "tags": [ "v1" ], - "summary": "Updates the specified machine to the cloud config's machine pool", - "operationId": "v1CloudConfigsTkePoolMachinesUidUpdate", + "summary": "Copies the specified image from one region to another region", + "operationId": "V1AwsCopyImageFromDefaultRegion", "parameters": [ { - "name": "body", + "type": "string", + "description": "Region to copy AWS image from", + "name": "region", + "in": "path", + "required": true + }, + { + "description": "Request payload to copy the AWS image", + "name": "spectroClusterAwsImageTag", "in": "body", "schema": { - "description": "Tencent cloud VM definition", + "description": "AWS image name and credentials", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the machine.", + "amiName": { + "description": "AWS image ami name", "type": "string" }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "awsAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" + "accessKey": { + "description": "AWS account access key", + "type": "string" }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } + "default": "secret", + "enum": [ + "secret", + "sts" + ] }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Tencent cloud VM definition spec", - "type": "object", - "required": [ - "nics", - "instanceType", - "imageId" - ], - "properties": { - "dnsName": { - "type": "string" - }, - "imageId": { - "type": "string" - }, - "instanceType": { - "type": "string" - }, - "nics": { - "type": "array", - "items": { - "description": "Tencent network interface", - "type": "object", - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "publicIp": { - "type": "string" - } - } - } + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] }, - "securityGroups": { + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", "type": "array", "items": { "type": "string" } }, - "subnetId": { - "type": "string" - }, - "type": { - "type": "string" - }, - "vpcId": { - "type": "string" - }, - "zoneId": { + "secretKey": { + "description": "AWS account secret key", "type": "string" - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] }, - "maintenanceStatus": { - "description": "Machine maintenance status", + "sts": { + "description": "Aws sts credentials", "type": "object", "properties": { - "action": { - "type": "string" - }, - "message": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", "type": "string" }, - "state": { + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", "type": "string" } } @@ -45514,12 +44424,24 @@ } ], "responses": { - "204": { - "description": "The resource was updated successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "Async operation id", + "type": "object", + "properties": { + "operationId": { + "description": "OperationId for a particular sync operation id", + "type": "string" + } + } + } } } - }, - "delete": { + } + }, + "/v1/clouds/aws/regions/{region}/eksClusters/name/validate": { + "get": { "security": [ { "ApiKey": [] @@ -45528,12 +44450,34 @@ "Authorization": [] } ], + "description": "Returns no contents if aws cluster name is valid else error.", "tags": [ "v1" ], - "summary": "Deletes the specified Tencent machine", - "operationId": "v1CloudConfigsTkePoolMachinesUidDelete", + "summary": "Check if Aws cluster name is valid", + "operationId": "V1AwsClusterNameValidate", "parameters": [ + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "cluster name to be validated", + "name": "name", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Region for which cluster name is validated", + "name": "region", + "in": "path", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -45543,36 +44487,19 @@ ], "responses": { "204": { - "description": "The resource was deleted successfully" + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine uid", - "name": "machineUid", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/virtual/{configUid}": { - "get": { + "/v1/clouds/aws/regions/{region}/images": { + "post": { "security": [ { "ApiKey": [] @@ -45584,350 +44511,268 @@ "tags": [ "v1" ], - "summary": "Returns the specified Virtual cloud config", - "operationId": "v1CloudConfigsVirtualGet", + "summary": "Returns AWS image for the specified AMI name", + "operationId": "V1AwsFindImage", "parameters": [ { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", + "description": "Region to find AWS image", + "name": "region", + "in": "path", + "required": true + }, + { + "description": "Request payload to find the AWS image", + "name": "awsImageRequest", + "in": "body", "schema": { - "description": "VirtualCloudConfig is the Schema for the virtual cloudconfigs API", + "description": "AWS image name and credentials", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Cloud type of the cloud config", + "amiName": { + "description": "AWS image ami name", "type": "string" }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "awsAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } + "accessKey": { + "description": "AWS account access key", + "type": "string" }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", "type": "string", - "format": "date-time" + "default": "secret", + "enum": [ + "secret", + "sts" + ] }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { "type": "string" } }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", + "secretKey": { + "description": "AWS account secret key", "type": "string" }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "VirtualCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec for cluster-api.", - "type": "object", - "required": [ - "clusterConfig", - "hostClusterUid", - "machinePoolConfig" - ], - "properties": { - "clusterConfig": { - "description": "Cluster level configuration for virtual cluster", + "sts": { + "description": "Aws sts credentials", "type": "object", "properties": { - "controlPlaneEndpoint": { - "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", - "type": "object", - "required": [ - "host", - "port" - ], - "properties": { - "host": { - "description": "The hostname on which the API server is serving.", - "type": "string" - }, - "port": { - "description": "The port on which the API server is serving.", - "type": "integer", - "format": "int32" - } - } - }, - "helmRelease": { - "type": "object", - "properties": { - "chart": { - "type": "object", - "properties": { - "name": { - "type": "string", - "default": "" - }, - "repo": { - "type": "string", - "default": "" - }, - "version": { - "type": "string", - "default": "" - } - } - }, - "values": { - "type": "string", - "default": "" - } - } + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" }, - "kubernetesVersion": { - "type": "string", - "default": "" + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" } } - }, - "hostClusterUid": { - "type": "string" - }, - "machinePoolConfig": { - "type": "array", - "items": { + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "AWS image name and ami", + "type": "object", + "properties": { + "id": { + "description": "AWS image id", + "type": "string" + }, + "name": { + "description": "AWS image name", + "type": "string" + }, + "owner": { + "description": "AWS image owner id", + "type": "string" + } + } + } + } + } + } + }, + "/v1/clouds/aws/regions/{region}/instancetypes": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of AWS instance types", + "operationId": "V1AwsInstanceTypes", + "parameters": [ + { + "type": "string", + "description": "Region for which AWS instances are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "number", + "format": "double", + "description": "Filter for instances having cpu greater than or equal", + "name": "cpuGtEq", + "in": "query" + }, + { + "type": "number", + "format": "double", + "description": "Filter for instances having memory greater than or equal", + "name": "memoryGtEq", + "in": "query" + }, + { + "type": "number", + "format": "double", + "description": "Filter for instances having gpu greater than or equal", + "name": "gpuGtEq", + "in": "query" + }, + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "List of AWS instance types", + "type": "object", + "properties": { + "instanceTypes": { + "type": "array", + "items": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", "type": "object", - "required": [ - "instanceType" - ], "properties": { - "additionalLabels": { - "description": "additionalLabels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "instanceType": { - "type": "object", - "properties": { - "maxCPU": { - "description": "Maximum CPU cores", - "type": "integer", - "format": "int32" - }, - "maxMemInMiB": { - "description": "Maximum memory in MiB", - "type": "integer", - "format": "int32" - }, - "maxStorageGiB": { - "description": "Maximum storage in GiB", - "type": "integer", - "format": "int32" - }, - "minCPU": { - "description": "Minimum CPU cores", - "type": "integer", - "format": "int32" - }, - "minMemInMiB": { - "description": "Minimum memory in MiB", - "type": "integer", - "format": "int32" - }, - "minStorageGiB": { - "description": "Minimum storage in GiB", - "type": "integer", - "format": "int32" - } - } - }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean" - }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "resourcePool": { - "type": "string" - }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "master or worker taints", + "price": { + "description": "Array of cloud instance price", "type": "array", - "uniqueItems": true, "items": { - "description": "Taint", + "description": "Cloud instance price", "type": "object", "properties": { - "effect": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", "type": "string", "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" + "linux", + "windows" ] }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" } } } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean" } } - } - } - } - }, - "status": { - "description": "Defines the status of virtual cloud config", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" } }, - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge" - }, - "isAddonLayer": { - "description": "addon layers present in spc", - "type": "boolean" + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } } } } @@ -45935,19 +44780,10 @@ } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/virtual/{configUid}/clusterConfig": { - "put": { + "/v1/clouds/aws/regions/{region}/keypairs": { + "get": { "security": [ { "ApiKey": [] @@ -45959,73 +44795,22 @@ "tags": [ "v1" ], - "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsVirtualUidClusterConfig", + "summary": "Retrieves a list of AWS keypairs", + "operationId": "V1AwsKeyPairs", "parameters": [ { - "name": "body", - "in": "body", - "schema": { - "description": "Virtual cloud cluster config entity", - "type": "object", - "properties": { - "clusterConfig": { - "description": "Cluster level configuration for virtual cluster", - "type": "object", - "properties": { - "controlPlaneEndpoint": { - "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", - "type": "object", - "required": [ - "host", - "port" - ], - "properties": { - "host": { - "description": "The hostname on which the API server is serving.", - "type": "string" - }, - "port": { - "description": "The port on which the API server is serving.", - "type": "integer", - "format": "int32" - } - } - }, - "helmRelease": { - "type": "object", - "properties": { - "chart": { - "type": "object", - "properties": { - "name": { - "type": "string", - "default": "" - }, - "repo": { - "type": "string", - "default": "" - }, - "version": { - "type": "string", - "default": "" - } - } - }, - "values": { - "type": "string", - "default": "" - } - } - }, - "kubernetesVersion": { - "type": "string", - "default": "" - } - } - } - } - } + "type": "string", + "description": "Region for which AWS key pairs are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true }, { "type": "string", @@ -46035,22 +44820,26 @@ } ], "responses": { - "204": { - "description": "The resource was updated successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "List of AWS keypairs", + "type": "object", + "properties": { + "keyNames": { + "description": "Array of Aws Keypair names", + "type": "array", + "items": { + "type": "string" + } + } + } + } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/virtual/{configUid}/machinePools": { + "/v1/clouds/aws/regions/{region}/keypairs/{keypair}/validate": { "post": { "security": [ { @@ -46063,63 +44852,29 @@ "tags": [ "v1" ], - "summary": "Creates a virtual cloud config's machine pool", - "operationId": "v1CloudConfigsVirtualMachinePoolCreate", + "summary": "Validate the specified AWS keypair", + "operationId": "V1AwsKeyPairValidate", "parameters": [ { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "required": [ - "instanceType" - ], - "properties": { - "instanceType": { - "type": "object", - "properties": { - "maxCPU": { - "description": "Maximum CPU cores", - "type": "integer", - "format": "int32" - }, - "maxMemInMiB": { - "description": "Maximum memory in MiB", - "type": "integer", - "format": "int32" - }, - "maxStorageGiB": { - "description": "Maximum storage in GiB", - "type": "integer", - "format": "int32" - }, - "minCPU": { - "description": "Minimum CPU cores", - "type": "integer", - "format": "int32" - }, - "minMemInMiB": { - "description": "Minimum memory in MiB", - "type": "integer", - "format": "int32" - }, - "minStorageGiB": { - "description": "Minimum storage in GiB", - "type": "integer", - "format": "int32" - } - } - } - } - } - } - } + "type": "string", + "description": "Region for which AWS key pairs is validated", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "AWS Key pair which is to be validated", + "name": "keypair", + "in": "path", + "required": true }, { "type": "string", @@ -46129,19 +44884,8 @@ } ], "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, + "204": { + "description": "Ok response without content", "headers": { "AuditUid": { "type": "string", @@ -46150,19 +44894,10 @@ } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}": { - "put": { + "/v1/clouds/aws/regions/{region}/kms/{keyId}": { + "get": { "security": [ { "ApiKey": [] @@ -46174,63 +44909,29 @@ "tags": [ "v1" ], - "summary": "Updates the specified virtual cloud config's machine pool", - "operationId": "v1CloudConfigsVirtualMachinePoolUpdate", + "summary": "Get AWS KMS key by Id", + "operationId": "V1AwsKmsKeyGet", "parameters": [ { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "required": [ - "instanceType" - ], - "properties": { - "instanceType": { - "type": "object", - "properties": { - "maxCPU": { - "description": "Maximum CPU cores", - "type": "integer", - "format": "int32" - }, - "maxMemInMiB": { - "description": "Maximum memory in MiB", - "type": "integer", - "format": "int32" - }, - "maxStorageGiB": { - "description": "Maximum storage in GiB", - "type": "integer", - "format": "int32" - }, - "minCPU": { - "description": "Minimum CPU cores", - "type": "integer", - "format": "int32" - }, - "minMemInMiB": { - "description": "Minimum memory in MiB", - "type": "integer", - "format": "int32" - }, - "minStorageGiB": { - "description": "Minimum storage in GiB", - "type": "integer", - "format": "int32" - } - } - } - } - } - } - } + "type": "string", + "description": "Region for which AWS KMS key belongs", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The globally unique identifier for the KMS key", + "name": "keyId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true }, { "type": "string", @@ -46240,12 +44941,32 @@ } ], "responses": { - "204": { - "description": "The resource was updated successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "List of AWS Keys", + "type": "object", + "properties": { + "awsAccountId": { + "description": "The twelve-digit account ID of the Amazon Web Services account that owns the KMS key", + "type": "string" + }, + "enabled": { + "description": "Specifies whether the KMS key is enabled.", + "type": "boolean" + }, + "keyId": { + "description": "The globally unique identifier for the KMS key", + "type": "string" + } + } + } } } - }, - "delete": { + } + }, + "/v1/clouds/aws/regions/{region}/kmskeys": { + "get": { "security": [ { "ApiKey": [] @@ -46257,9 +44978,23 @@ "tags": [ "v1" ], - "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsVirtualMachinePoolDelete", + "summary": "Retrieves a list of AWS KMS keys for the specified account", + "operationId": "V1AwsKmsKeys", "parameters": [ + { + "type": "string", + "description": "Region for which AWS KMS key are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -46268,29 +45003,47 @@ } ], "responses": { - "204": { - "description": "The resource was deleted successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "List of AWS Keys", + "type": "object", + "required": [ + "kmsKeys" + ], + "properties": { + "kmsKeys": { + "type": "array", + "items": { + "description": "AWS KMS Key - gives you centralized control over the cryptographic keys used to protect your data.", + "type": "object", + "required": [ + "keyId", + "keyArn" + ], + "properties": { + "keyAlias": { + "description": "AWS KMS alias", + "type": "string" + }, + "keyArn": { + "description": "AWS KMS arn", + "type": "string" + }, + "keyId": { + "description": "AWS KMS keyid", + "type": "string" + } + } + } + } + } + } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/clouds/aws/regions/{region}/kmskeys/validate": { "get": { "security": [ { @@ -46303,47 +45056,72 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of virtual machines", - "operationId": "v1CloudConfigsVirtualPoolMachinesList", + "summary": "Validate an Aws KMS key for the specified account", + "operationId": "V1AwsKmsKeyValidate", "parameters": [ { "type": "string", - "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", - "name": "fields", - "in": "query" + "description": "Region for which AWS KMS key is validated", + "name": "region", + "in": "path", + "required": true }, { "type": "string", - "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", - "name": "filters", - "in": "query" + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true }, { "type": "string", - "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", - "name": "orderBy", - "in": "query" + "description": "AWS KEY ARN for validation", + "name": "keyArn", + "in": "query", + "required": true }, { - "type": "integer", - "format": "int64", - "default": 50, - "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/clouds/aws/regions/{region}/storagetypes": { + "get": { + "security": [ { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" + "ApiKey": [] }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of AWS storage types", + "operationId": "V1AwsStorageTypes", + "parameters": [ { "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" + "description": "Region for which AWS storage types are requested", + "name": "region", + "in": "path", + "required": true }, { "type": "string", @@ -46354,140 +45132,104 @@ ], "responses": { "200": { - "description": "An array of virtual machine items", + "description": "(empty)", "schema": { - "description": "List of virtual machines", "type": "object", - "required": [ - "items" - ], "properties": { - "items": { + "storageTypes": { + "description": "List of AWS storage types", "type": "array", - "uniqueItems": true, "items": { - "description": "Virtual cloud machine definition", + "description": "Cloud cloud Storage type details", "type": "object", "properties": { - "kind": { - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "cost": { + "description": "Cloud storage cost", "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", "type": "string" }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } } } }, - "spec": { - "description": "Virtual cloud machine definition spec", + "iopsCost": { + "description": "Cloud storage cost", "type": "object", "properties": { - "hostname": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", "type": "string" - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" } } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } } } } @@ -46495,30 +45237,110 @@ } } } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false + } + } + } + } + } + } + }, + "/v1/clouds/aws/regions/{region}/vpcs": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of VPCs for the specified account", + "operationId": "V1AwsVpcs", + "parameters": [ + { + "type": "string", + "description": "Region for which VPCs are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "List of AWS VPCs", + "type": "object", + "required": [ + "vpcs" + ], + "properties": { + "vpcs": { + "type": "array", + "items": { + "description": "A virtual network dedicated to a AWS account", + "type": "object", + "required": [ + "vpcId" + ], + "properties": { + "cidrBlock": { + "type": "string" + }, + "name": { + "description": "Name of the virtual network", + "type": "string" + }, + "subnets": { + "description": "List of subnets associated to a AWS VPC", + "type": "array", + "items": { + "description": "A subnet is a range of IP addresses in a AWS VPC", + "properties": { + "az": { + "description": "Every subnet can only be associated with only one Availability Zone", + "type": "string" + }, + "isPrivate": { + "description": "Is this subnet private", + "type": "boolean" + }, + "mapPublicIpOnLaunch": { + "description": "Indicates whether instances launched in this subnet receive a public IPv4 address.", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Name of the subnet", + "type": "string" + }, + "subnetId": { + "description": "Id of the subnet", + "type": "string" + } + } + } + }, + "vpcId": { + "description": "Id of the virtual network", + "type": "string" + } } } } @@ -46526,7 +45348,9 @@ } } } - }, + } + }, + "/v1/clouds/aws/s3/validate": { "post": { "security": [ { @@ -46539,139 +45363,87 @@ "tags": [ "v1" ], - "summary": "Adds the machine to cloud config's machine pool", - "operationId": "v1CloudConfigsVirtualPoolMachinesAdd", + "summary": "Validate the AWS S3 bucket", + "operationId": "V1AwsS3Validate", "parameters": [ { - "name": "body", + "description": "AWS S3 bucket credentials", + "name": "awsS3Credential", "in": "body", + "required": true, "schema": { - "description": "Virtual cloud machine definition", + "description": "AWS S3 Bucket credentials", "type": "object", + "required": [ + "credentials", + "bucket", + "region" + ], "properties": { - "kind": { + "bucket": { + "description": "Name of AWS S3 bucket", "type": "string" }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } + "accessKey": { + "description": "AWS account access key", + "type": "string" }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", "type": "string", - "format": "date-time" + "default": "secret", + "enum": [ + "secret", + "sts" + ] }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", "type": "string", - "format": "date-time" + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { "type": "string" } }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Virtual cloud machine definition spec", - "type": "object", - "properties": { - "hostname": { + "secretKey": { + "description": "AWS account secret key", "type": "string" - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] }, - "maintenanceStatus": { - "description": "Machine maintenance status", + "sts": { + "description": "Aws sts credentials", "type": "object", "properties": { - "action": { - "type": "string" - }, - "message": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", "type": "string" }, - "state": { + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", "type": "string" } } } } + }, + "folder": { + "description": "Name of the folder in the specified AWS S3 bucket.", + "type": "string" + }, + "region": { + "description": "Name of the available AWS region.", + "type": "string" } } } @@ -46684,19 +45456,8 @@ } ], "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, + "204": { + "description": "Ok response without content", "headers": { "AuditUid": { "type": "string", @@ -46705,25 +45466,9 @@ } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/clouds/aws/securitygroups": { "get": { "security": [ { @@ -46736,9 +45481,29 @@ "tags": [ "v1" ], - "summary": "Returns the specified virtual machine", - "operationId": "v1CloudConfigsVirtualPoolMachinesUidGet", + "summary": "Retrieves a list of AWS security groups for the specified account", + "operationId": "V1AwsSecurityGroups", "parameters": [ + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query" + }, + { + "type": "string", + "description": "Region for which security groups are requested", + "name": "region", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Vpc Id for which security groups are requested", + "name": "vpcId", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -46748,131 +45513,96 @@ ], "responses": { "200": { - "description": "OK", + "description": "(empty)", "schema": { - "description": "Virtual cloud machine definition", "type": "object", + "required": [ + "groups" + ], "properties": { - "kind": { - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { + "groups": { + "type": "array", + "items": { + "description": "Aws security group", + "type": "object", + "properties": { + "groupId": { "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + }, + "groupName": { + "type": "string" + }, + "ownerId": { "type": "string" } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Virtual cloud machine definition spec", - "type": "object", - "properties": { - "hostname": { - "type": "string" } } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } + } + } + } + } + } + } + }, + "/v1/clouds/aws/volumeTypes": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "List all AWS Volume Types", + "tags": [ + "v1" + ], + "summary": "Get all AWS Volume Types", + "operationId": "V1AwsVolumeTypesGet", + "parameters": [ + { + "type": "string", + "description": "Specific AWS Region", + "name": "region", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "AWS Volume Types", + "type": "object", + "properties": { + "volumeTypes": { + "type": "array", + "items": { + "description": "AWS Volume Type entity", + "type": "object", + "properties": { + "id": { + "description": "AWS volume type id", + "type": "string" + }, + "maxIops": { + "description": "Iops through put of volume type", + "type": "string" + }, + "maxThroughPut": { + "description": "Max through put of volume type", + "type": "string" + }, + "name": { + "description": "AWS Volume Type Name", + "type": "string" } } } @@ -46881,8 +45611,10 @@ } } } - }, - "put": { + } + }, + "/v1/clouds/azure/account/validate": { + "post": { "security": [ { "ApiKey": [] @@ -46891,142 +45623,63 @@ "Authorization": [] } ], + "description": "Returns no contents if account is valid else error.", "tags": [ "v1" ], - "summary": "Updates the specified machine to the cloud config's machine pool", - "operationId": "v1CloudConfigsVirtualPoolMachinesUidUpdate", + "summary": "Check if Azure account is valid", + "operationId": "V1AzureAccountValidate", "parameters": [ { - "name": "body", + "description": "Request payload for Azure cloud account", + "name": "azureCloudAccount", "in": "body", + "required": true, "schema": { - "description": "Virtual cloud machine definition", "type": "object", + "required": [ + "tenantId", + "clientId", + "clientSecret" + ], "properties": { - "kind": { + "azureEnvironment": { + "description": "Contains configuration for Azure cloud", + "type": "string", + "default": "AzurePublicCloud", + "enum": [ + "AzureChinaCloud", + "AzurePublicCloud", + "AzureUSGovernment", + "AzureUSGovernmentCloud" + ] + }, + "clientId": { + "description": "Client ID(Directory ID) is a unique identifier generated by Azure AD that is tied to an application", "type": "string" }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } + "clientSecret": { + "description": "ClientSecret is the secret associated with Client", + "type": "string" }, - "spec": { - "description": "Virtual cloud machine definition spec", + "settings": { + "description": "Cloud account settings", "type": "object", "properties": { - "hostname": { - "type": "string" + "disablePropertiesRequest": { + "description": "Will disable certain properties request to cloud and the input is collected directly from the user", + "type": "boolean", + "x-omitempty": false } } }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } - } - } - } + "tenantId": { + "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "type": "string" + }, + "tenantName": { + "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "type": "string" } } } @@ -47040,11 +45693,19 @@ ], "responses": { "204": { - "description": "The resource was updated successfully" + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } } } - }, - "delete": { + } + }, + "/v1/clouds/azure/groups": { + "get": { "security": [ { "ApiKey": [] @@ -47056,9 +45717,15 @@ "tags": [ "v1" ], - "summary": "Deletes the specified virtual machine", - "operationId": "v1CloudConfigsVirtualPoolMachinesUidDelete", + "summary": "Retrieves a list of Azure groups", + "operationId": "V1AzureGroups", "parameters": [ + { + "type": "string", + "description": "Uid for the specific Azure cloud account", + "name": "cloudAccountUid", + "in": "query" + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -47067,37 +45734,40 @@ } ], "responses": { - "204": { - "description": "The resource was deleted successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "List of Azure groups", + "type": "object", + "required": [ + "groups" + ], + "properties": { + "groups": { + "type": "array", + "items": { + "description": "Azure group entity", + "type": "object", + "properties": { + "id": { + "description": "Azure group id", + "type": "string" + }, + "name": { + "description": "Azure group name", + "type": "string" + } + } + } + } + } + } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine uid", - "name": "machineUid", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/virtual/{configUid}/resize": { - "put": { + "/v1/clouds/azure/regions": { + "get": { "security": [ { "ApiKey": [] @@ -47109,80 +45779,76 @@ "tags": [ "v1" ], - "summary": "Updates and resizes the virtual cluster", - "operationId": "v1CloudConfigsVirtualUidUpdate", + "summary": "Retrieves a list of Azure regions", + "operationId": "V1AzureRegions", "parameters": [ { - "name": "body", - "in": "body", + "type": "string", + "description": "Uid for the specific Azure cloud account", + "name": "cloudAccountUid", + "in": "query" + }, + { + "type": "string", + "description": "SubscriptionId for which resources is requested", + "name": "subscriptionId", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", "schema": { + "description": "List of Azure regions", "type": "object", "required": [ - "instanceType" + "regions" ], "properties": { - "instanceType": { - "type": "object", - "properties": { - "maxCPU": { - "description": "Maximum CPU cores", - "type": "integer", - "format": "int32" - }, - "maxMemInMiB": { - "description": "Maximum memory in MiB", - "type": "integer", - "format": "int32" - }, - "maxStorageGiB": { - "description": "Maximum storage in GiB", - "type": "integer", - "format": "int32" - }, - "minCPU": { - "description": "Minimum CPU cores", - "type": "integer", - "format": "int32" - }, - "minMemInMiB": { - "description": "Minimum memory in MiB", - "type": "integer", - "format": "int32" - }, - "minStorageGiB": { - "description": "Minimum storage in GiB", - "type": "integer", - "format": "int32" + "regions": { + "type": "array", + "items": { + "description": "Azure region entity", + "type": "object", + "properties": { + "displayName": { + "description": "Azure region displayname", + "type": "string" + }, + "name": { + "description": "Azure region name", + "type": "string" + }, + "zones": { + "description": "List of zones associated to a particular Azure region", + "type": "array", + "items": { + "description": "Azure availability zone", + "type": "object", + "properties": { + "name": { + "description": "Azure availability zone name", + "type": "string" + } + } + } + } } } } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" } } - }, - "parameters": [ - { - "type": "string", - "description": "Specify virtual cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/vsphere/{configUid}": { + "/v1/clouds/azure/regions/{region}/instancetypes": { "get": { "security": [ { @@ -47195,723 +45861,283 @@ "tags": [ "v1" ], - "summary": "Returns the specified vSphere cloud config", - "operationId": "v1CloudConfigsVsphereGet", + "summary": "Retrieves a list of Azure instance types", + "operationId": "V1AzureInstanceTypes", "parameters": [ { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "VsphereCloudConfig is the Schema for the vspherecloudconfigs API", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Cloud type of the cloud config", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "VsphereCloudConfigSpec defines the desired state of VsphereCloudConfig", - "type": "object", - "required": [ - "clusterConfig", - "machinePoolConfig" - ], - "properties": { - "cloudAccountRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "clusterConfig": { - "type": "object", - "required": [ - "placement" - ], - "properties": { - "controlPlaneEndpoint": { - "type": "object", - "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", - "type": "string" - }, - "host": { - "description": "IP or FQDN(External/DDNS)", - "type": "string" - }, - "type": { - "description": "VIP or External", - "type": "string", - "enum": [ - "VIP", - "External", - "DDNS" - ] - } - } - }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", - "type": "array", - "items": { - "type": "string" - } - }, - "placement": { - "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", - "type": "object", - "properties": { - "cluster": { - "description": "Cluster is the computecluster in vsphere", - "type": "string" - }, - "datacenter": { - "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", - "type": "string" - }, - "datastore": { - "description": "Datastore is the datastore in which VMs are created/located.", - "type": "string" - }, - "folder": { - "description": "Folder is the folder in which VMs are created/located.", - "type": "string" - }, - "imageTemplateFolder": { - "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", - "type": "string" - }, - "network": { + "description": "Region for which Azure instance types are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "number", + "format": "double", + "description": "Filter for instances having cpu greater than or equal", + "name": "cpuGtEq", + "in": "query" + }, + { + "type": "number", + "format": "double", + "description": "Filter for instances having memory greater than or equal", + "name": "memoryGtEq", + "in": "query" + }, + { + "type": "number", + "format": "double", + "description": "Filter for instances having gpu greater than or equal", + "name": "gpuGtEq", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "List of Azure instance types", + "type": "object", + "properties": { + "instanceTypes": { + "type": "array", + "items": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", "type": "object", - "required": [ - "networkName" - ], "properties": { - "ipPool": { - "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", - "type": "object", - "properties": { - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "pools": { - "description": "Pools contains the list of IP addresses pools", - "type": "array", - "items": { - "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", - "type": "object", - "properties": { - "end": { - "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", - "type": "string" - }, - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "start": { - "description": "Start is the first ip address that can be rendered", - "type": "string" - }, - "subnet": { - "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "uid": { - "description": "UID is the UID of this IPPool, used by Hubble", - "type": "string" - } - } - }, - "networkName": { - "description": "NetworkName is the name of the network in which VMs are created/located.", - "type": "string" + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" }, - "parentPoolRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] }, - "staticIp": { - "description": "support dhcp or static IP, if false, use DHCP", - "type": "boolean" + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" } } - }, - "resourcePool": { - "description": "ResourcePool is the resource pool within the above computecluster Cluster", - "type": "string" - }, - "storagePolicyName": { - "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", - "type": "string" - }, - "uid": { - "description": "UID for this placement", - "type": "string" } } - }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", - "type": "array", - "items": { - "type": "string" - } - }, - "staticIp": { - "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", - "type": "boolean" } - } - }, - "edgeHostRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { "type": "string" - }, - "uid": { - "description": "UID of the referent.", + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { "type": "string" } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" } - }, - "machinePoolConfig": { - "type": "array", - "items": { + } + } + } + } + } + } + } + } + }, + "/v1/clouds/azure/regions/{region}/storagetypes": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of Azure storage types", + "operationId": "V1AzureStorageTypes", + "parameters": [ + { + "type": "string", + "description": "Region for which Azure storage types are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "List of Azure storage types", + "type": "object", + "properties": { + "storageTypes": { + "type": "array", + "items": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", "type": "object", - "required": [ - "isControlPlane", - "instanceType" - ], "properties": { - "additionalLabels": { - "description": "additionalLabels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "instanceType": { - "type": "object", - "required": [ - "numCPUs", - "memoryMiB", - "diskGiB" - ], - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int64" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - } - } - }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", "type": "string" }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "placements": { - "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "price": { + "description": "Array of cloud storage range prices", "type": "array", "items": { - "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "description": "Cloud storage price within an upper limit.", "type": "object", "properties": { - "cluster": { - "description": "Cluster is the computecluster in vsphere", - "type": "string" - }, - "datacenter": { - "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", - "type": "string" - }, - "datastore": { - "description": "Datastore is the datastore in which VMs are created/located.", - "type": "string" - }, - "folder": { - "description": "Folder is the folder in which VMs are created/located.", - "type": "string" - }, - "imageTemplateFolder": { - "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", - "type": "string" - }, - "network": { - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "ipPool": { - "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", - "type": "object", - "properties": { - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "pools": { - "description": "Pools contains the list of IP addresses pools", - "type": "array", - "items": { - "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", - "type": "object", - "properties": { - "end": { - "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", - "type": "string" - }, - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "start": { - "description": "Start is the first ip address that can be rendered", - "type": "string" - }, - "subnet": { - "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "uid": { - "description": "UID is the UID of this IPPool, used by Hubble", - "type": "string" - } - } - }, - "networkName": { - "description": "NetworkName is the name of the network in which VMs are created/located.", - "type": "string" - }, - "parentPoolRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "staticIp": { - "description": "support dhcp or static IP, if false, use DHCP", - "type": "boolean" - } - } - }, - "resourcePool": { - "description": "ResourcePool is the resource pool within the above computecluster Cluster", - "type": "string" - }, - "storagePolicyName": { - "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "limit": { + "description": "Upper limit of cloud storage usage", "type": "string" }, - "uid": { - "description": "UID for this placement", + "price": { + "description": "Price of cloud storage type", "type": "string" } } } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "master or worker taints", + "price": { + "description": "Array of cloud storage range prices", "type": "array", - "uniqueItems": true, "items": { - "description": "Taint", + "description": "Cloud storage price within an upper limit.", "type": "object", "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", + "limit": { + "description": "Upper limit of cloud storage usage", "type": "string" }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", + "price": { + "description": "Price of cloud storage type", "type": "string" } } } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false } } - } - } - } - }, - "status": { - "description": "VsphereCloudConfigStatus defines the observed state of VsphereCloudConfig", - "type": "object", - "properties": { - "ansibleDigest": { - "type": "string" - }, - "conditions": { - "type": "array", - "items": { + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", "type": "object", - "required": [ - "type", - "status" - ], "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", "type": "string" }, - "type": { - "type": "string" + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } } } } - }, - "isAddonLayer": { - "description": "addon layers present in spc", - "type": "boolean" - }, - "lastOVACreated": { - "type": "string" - }, - "lastVMExported": { - "type": "string" - }, - "nodeImage": { - "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", - "type": "object", - "properties": { - "fullPath": { - "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", - "type": "string" - }, - "state": { - "type": "string" - } - } - }, - "roleDigest": { - "description": "this map will be for ansible roles present in eack pack", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "sourceImageId": { - "description": "sourceImageId, it can be from packref's annotations or from pack.json", - "type": "string" - }, - "uploadOvaS3": { - "description": "UploadOVAS3 will hold last image name which uploaded to S3", - "type": "string" - }, - "useCapiImage": { - "description": "If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", - "type": "boolean" } } } @@ -47919,19 +46145,10 @@ } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/vsphere/{configUid}/clusterConfig": { - "put": { + "/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/aksClusters/name/validate": { + "get": { "security": [ { "ApiKey": [] @@ -47940,127 +46157,47 @@ "Authorization": [] } ], + "description": "Returns no contents if Azure cluster name is valid else error.", "tags": [ "v1" ], - "summary": "Updates the cluster configuration information", - "operationId": "v1CloudConfigsVsphereUidClusterConfig", + "summary": "Check if Azure cluster name is valid", + "operationId": "V1AzureClusterNameValidate", "parameters": [ { - "name": "body", - "in": "body", - "schema": { - "description": "vSphere cloud cluster config entity", - "type": "object", - "properties": { - "clusterConfig": { - "type": "object", - "required": [ - "placement" - ], - "properties": { - "controlPlaneEndpoint": { - "type": "object", - "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", - "type": "string" - }, - "host": { - "description": "IP or FQDN(External/DDNS)", - "type": "string" - }, - "type": { - "description": "VIP or External", - "type": "string", - "enum": [ - "VIP", - "External", - "DDNS" - ] - } - } - }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", - "type": "array", - "items": { - "type": "string" - } - }, - "placement": { - "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", - "type": "object", - "properties": { - "cluster": { - "description": "Cluster is the computecluster in vsphere", - "type": "string" - }, - "datacenter": { - "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", - "type": "string" - }, - "datastore": { - "description": "Datastore is the datastore in which VMs are created/located.", - "type": "string" - }, - "folder": { - "description": "Folder is the folder in which VMs are created/located.", - "type": "string" - }, - "imageTemplateFolder": { - "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", - "type": "string" - }, - "network": { - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "networkName": { - "description": "NetworkName is the name of the network in which VMs are created/located.", - "type": "string" - }, - "parentPoolUid": { - "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", - "type": "string" - }, - "staticIp": { - "description": "support dhcp or static IP, if false, use DHCP", - "type": "boolean" - } - } - }, - "resourcePool": { - "description": "ResourcePool is the resource pool within the above computecluster Cluster", - "type": "string" - }, - "storagePolicyName": { - "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", - "type": "string" - }, - "uid": { - "description": "UID for this placement", - "type": "string" - } - } - }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", - "type": "array", - "items": { - "type": "string" - } - }, - "staticIp": { - "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", - "type": "boolean" - } - } - } - } - } + "type": "string", + "description": "Uid for the specific Azure cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "cluster name to be validated", + "name": "name", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "region in which cluster name is to be validated", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "subscriptionId in which cluster name is to be validated", + "name": "subscriptionId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "resourceGroup in which cluster name is to be validated", + "name": "resourceGroup", + "in": "query", + "required": true }, { "type": "string", @@ -48071,22 +46208,19 @@ ], "responses": { "204": { - "description": "The resource was updated successfully" + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/vsphere/{configUid}/machinePools": { - "post": { + "/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/networks": { + "get": { "security": [ { "ApiKey": [] @@ -48098,236 +46232,145 @@ "tags": [ "v1" ], - "summary": "Creates a vSphere cloud config's machine pool", - "operationId": "v1CloudConfigsVsphereMachinePoolCreate", + "summary": "Retrieves a list of Azure virtual network list for the sepcified account", + "operationId": "V1AzureVirtualNetworkList", "parameters": [ { - "name": "body", - "in": "body", + "type": "string", + "description": "Uid for the specific Azure cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Region for which Azure virtual networks are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for which Azure virtual networks are requested", + "name": "subscriptionId", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Resource group for which Azure virtual networks are requested", + "name": "resourceGroup", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", "schema": { + "description": "List of Azure virtual network", "type": "object", - "required": [ - "cloudConfig" - ], "properties": { - "cloudConfig": { - "properties": { - "instanceType": { - "type": "object", - "required": [ - "numCPUs", - "memoryMiB", - "diskGiB" - ], - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int64" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - } - } - }, - "placements": { - "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", - "type": "array", - "items": { - "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", - "type": "object", - "properties": { - "cluster": { - "description": "Cluster is the computecluster in vsphere", - "type": "string" - }, - "datacenter": { - "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", - "type": "string" - }, - "datastore": { - "description": "Datastore is the datastore in which VMs are created/located.", - "type": "string" - }, - "folder": { - "description": "Folder is the folder in which VMs are created/located.", - "type": "string" - }, - "imageTemplateFolder": { - "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", - "type": "string" - }, - "network": { - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "networkName": { - "description": "NetworkName is the name of the network in which VMs are created/located.", - "type": "string" - }, - "parentPoolUid": { - "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", - "type": "string" - }, - "staticIp": { - "description": "support dhcp or static IP, if false, use DHCP", - "type": "boolean" - } - } - }, - "resourcePool": { - "description": "ResourcePool is the resource pool within the above computecluster Cluster", - "type": "string" - }, - "storagePolicyName": { - "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", - "type": "string" - }, - "uid": { - "description": "UID for this placement", - "type": "string" - } + "virtualNetworkList": { + "type": "array", + "items": { + "description": "Azure virtual network is the fundamental building block for your private network in Azure.", + "type": "object", + "properties": { + "addressSpaces": { + "description": "Location of the virtual network", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" } - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { + }, + "id": { + "description": "The ID of the resource group", "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { + }, + "location": { + "description": "Location of the virtual network", "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { + }, + "name": { + "description": "Name of the virtual network", "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" + }, + "subnets": { + "description": "List of subnets associated with Azure VPC", + "type": "array", + "items": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } } } + }, + "type": { + "description": "Type of the virtual network", + "type": "string" } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false } } } } } + } + } + } + }, + "/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/resourceGroups": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of Azure resource group for the specified account", + "operationId": "V1AzureResourceGroupList", + "parameters": [ + { + "type": "string", + "description": "Uid for the specific Azure cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Region for which Azure resource group are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for which Azure resource group are requested", + "name": "subscriptionId", + "in": "path", + "required": true }, { "type": "string", @@ -48337,40 +46380,41 @@ } ], "responses": { - "201": { - "description": "Created successfully", + "200": { + "description": "(empty)", "schema": { + "description": "List of Azure resource group", "type": "object", - "required": [ - "uid" - ], "properties": { - "uid": { - "type": "string" + "resourceGroupList": { + "type": "array", + "items": { + "description": "Azure resource Group is a container that holds related resources for an Azure solution", + "type": "object", + "properties": { + "id": { + "description": "The ID of the resource group", + "type": "string" + }, + "location": { + "description": "The location of the resource group. It cannot be changed after the resource group has been created", + "type": "string" + }, + "name": { + "description": "The type of the resource group", + "type": "string" + } + } + } } } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}": { - "put": { + "/v1/clouds/azure/regions/{region}/zones": { + "get": { "security": [ { "ApiKey": [] @@ -48382,236 +46426,98 @@ "tags": [ "v1" ], - "summary": "Updates the specified vSphere cloud config's machine pool", - "operationId": "v1CloudConfigsVsphereMachinePoolUpdate", + "summary": "Retrieves a list of Azure zones for the specified region", + "operationId": "V1AzureZones", "parameters": [ { - "name": "body", - "in": "body", + "type": "string", + "description": "Region for which Azure zones are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific Azure cloud account", + "name": "cloudAccountUid", + "in": "query" + }, + { + "type": "string", + "description": "subscriptionId of azure account", + "name": "subscriptionId", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", "schema": { + "description": "List of Azure zone", "type": "object", - "required": [ - "cloudConfig" - ], "properties": { - "cloudConfig": { - "properties": { - "instanceType": { - "type": "object", - "required": [ - "numCPUs", - "memoryMiB", - "diskGiB" - ], - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int64" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - } - } - }, - "placements": { - "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", - "type": "array", - "items": { - "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", - "type": "object", - "properties": { - "cluster": { - "description": "Cluster is the computecluster in vsphere", - "type": "string" - }, - "datacenter": { - "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", - "type": "string" - }, - "datastore": { - "description": "Datastore is the datastore in which VMs are created/located.", - "type": "string" - }, - "folder": { - "description": "Folder is the folder in which VMs are created/located.", - "type": "string" - }, - "imageTemplateFolder": { - "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", - "type": "string" - }, - "network": { - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "networkName": { - "description": "NetworkName is the name of the network in which VMs are created/located.", - "type": "string" - }, - "parentPoolUid": { - "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", - "type": "string" - }, - "staticIp": { - "description": "support dhcp or static IP, if false, use DHCP", - "type": "boolean" - } - } - }, - "resourcePool": { - "description": "ResourcePool is the resource pool within the above computecluster Cluster", - "type": "string" - }, - "storagePolicyName": { - "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", - "type": "string" - }, - "uid": { - "description": "UID for this placement", - "type": "string" - } - } - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { + "zoneList": { + "type": "array", + "items": { + "description": "Azure availability zone entity", + "type": "object", + "properties": { + "id": { + "description": "Azure availability zone id", "type": "string" } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false } } } } } + } + } + } + }, + "/v1/clouds/azure/resourceGroups/{resourceGroup}/privateDnsZones": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns Azure private DNS zones", + "tags": [ + "v1" + ], + "summary": "Get Azure private DNS zones for the given resource group", + "operationId": "V1AzurePrivateDnsZones", + "parameters": [ + { + "type": "string", + "description": "resourceGroup for which Azure private dns zones are requested", + "name": "resourceGroup", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific Azure cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "subscriptionId for which Azure private dns zones are requested", + "name": "subscriptionId", + "in": "query", + "required": true }, { "type": "string", @@ -48621,12 +46527,41 @@ } ], "responses": { - "204": { - "description": "The resource was updated successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "List of Azure storage accounts", + "type": "object", + "properties": { + "privateDnsZones": { + "type": "array", + "items": { + "description": "Azure Private DNS zone entity", + "type": "object", + "properties": { + "id": { + "description": "Fully qualified resource Id for the resource", + "type": "string" + }, + "location": { + "description": "The Azure Region where the resource lives", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + } + } + } + } + } + } } } - }, - "delete": { + } + }, + "/v1/clouds/azure/resourceGroups/{resourceGroup}/storageAccounts": { + "get": { "security": [ { "ApiKey": [] @@ -48635,12 +46570,33 @@ "Authorization": [] } ], + "description": "Returns Azure storage accounts.", "tags": [ "v1" ], - "summary": "Deletes the specified machine pool", - "operationId": "v1CloudConfigsVsphereMachinePoolDelete", + "summary": "Get Azure storage accounts", + "operationId": "V1AzureStorageAccounts", "parameters": [ + { + "type": "string", + "description": "resourceGroup for which Azure storage accounts are requested", + "name": "resourceGroup", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific Azure cloud account", + "name": "cloudAccountUid", + "in": "query" + }, + { + "type": "string", + "description": "subscriptionId for which Azure storage accounts are requested", + "name": "subscriptionId", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -48649,29 +46605,44 @@ } ], "responses": { - "204": { - "description": "The resource was deleted successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "List of Azure storage accounts", + "type": "object", + "properties": { + "accounts": { + "type": "array", + "items": { + "description": "Azure storage account provides a unique namespace for your Azure resources", + "type": "object", + "properties": { + "id": { + "description": "Fully qualified resource ID for the resource", + "type": "string" + }, + "kind": { + "description": "The kind of the resource", + "type": "string" + }, + "location": { + "description": "The geo-location where the resource lives", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + } + } + } + } + } + } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", - "in": "path", - "required": true - } - ] + } }, - "/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}/machines": { + "/v1/clouds/azure/resourceGroups/{resourceGroup}/storageAccounts/{storageAccountName}/containers": { "get": { "security": [ { @@ -48681,49 +46652,102 @@ "Authorization": [] } ], + "description": "Returns Azure storage containers for the given account.", "tags": [ "v1" ], - "summary": "Retrieves a list of vSphere machines", - "operationId": "v1CloudConfigsVspherePoolMachinesList", + "summary": "Get Azure storage containers", + "operationId": "V1AzureStorageContainers", "parameters": [ { "type": "string", - "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", - "name": "fields", - "in": "query" + "description": "resourceGroup for which Azure storage accounts are requested", + "name": "resourceGroup", + "in": "path", + "required": true }, { "type": "string", - "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", - "name": "filters", + "description": "Uid for the specific Azure cloud account", + "name": "cloudAccountUid", "in": "query" }, { "type": "string", - "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", - "name": "orderBy", - "in": "query" + "description": "subscriptionId for which Azure storage accounts are requested", + "name": "subscriptionId", + "in": "query", + "required": true }, { - "type": "integer", - "format": "int64", - "default": 50, - "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" + "type": "string", + "description": "resourceGroup for which Azure storage accounts are requested", + "name": "storageAccountName", + "in": "path", + "required": true }, { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "List of Azure storage containers", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Azure storage container organizes a set of blobs, similar to a directory in a file system", + "type": "object", + "properties": { + "id": { + "description": "Fully qualified resource ID for the resource.", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + }, + "type": { + "description": "The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\"", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "/v1/clouds/azure/storageaccounttypes": { + "get": { + "security": [ + { + "ApiKey": [] }, + { + "Authorization": [] + } + ], + "description": "Returns Azure storage account types.", + "tags": [ + "v1" + ], + "summary": "Get Azure storage account types", + "operationId": "V1AzureStorageAccountTypes", + "parameters": [ { "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", + "description": "Region for which Azure storage account types are requested", + "name": "region", "in": "query" }, { @@ -48735,416 +46759,231 @@ ], "responses": { "200": { - "description": "An array of vSphere machine items", + "description": "(empty)", "schema": { - "description": "vSphere machine list", + "description": "Azure Storage Account Entity", "type": "object", - "required": [ - "items" - ], "properties": { - "items": { + "storageAccountTypes": { "type": "array", - "uniqueItems": true, "items": { - "description": "vSphere cloud VM definition", + "description": "Azure storage account entity", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "id": { + "description": "Azure storage account id", "type": "string" }, - "kind": { - "description": "Deprecated. Cloud type of the machine.", + "name": { + "description": "Azure storage account name", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "/v1/clouds/azure/subscriptions": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "Returns list of Azure subscription list.", + "tags": [ + "v1" + ], + "summary": "Retrieves a list of Azure subscription list for the specified account", + "operationId": "V1AzureSubscriptionList", + "parameters": [ + { + "type": "string", + "description": "Uid for the specific Azure cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "List of Azure subscription", + "type": "object", + "properties": { + "subscriptionList": { + "type": "array", + "items": { + "description": "Azure Subscription Type", + "type": "object", + "properties": { + "authorizationSource": { + "description": "The authorization source of the request. Valid values are one or more combinations of Legacy, RoleBased, Bypassed, Direct and Management", "type": "string" }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } + "displayName": { + "description": "The subscription display name", + "type": "string" }, - "spec": { - "description": "vSphere cloud VM definition spec", - "type": "object", - "required": [ - "vcenterServer", - "nics", - "placement" - ], - "properties": { - "images": { - "type": "array", - "items": { - "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", - "type": "object", - "properties": { - "fullPath": { - "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", - "type": "string" - }, - "state": { - "type": "string" - } - } - } - }, - "instanceType": { - "type": "object", - "required": [ - "numCPUs", - "memoryMiB", - "diskGiB" - ], - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int64" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - } - } - }, - "nics": { - "type": "array", - "items": { - "description": "vSphere network interface", - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "macAddress": { - "type": "string" - }, - "networkName": { - "type": "string" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", - "type": "array", - "items": { - "type": "string" - } - }, - "placement": { - "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", - "type": "object", - "properties": { - "cluster": { - "description": "Cluster is the computecluster in vsphere", - "type": "string" - }, - "datacenter": { - "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", - "type": "string" - }, - "datastore": { - "description": "Datastore is the datastore in which VMs are created/located.", - "type": "string" - }, - "folder": { - "description": "Folder is the folder in which VMs are created/located.", - "type": "string" - }, - "imageTemplateFolder": { - "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", - "type": "string" - }, - "network": { - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "ipPool": { - "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", - "type": "object", - "properties": { - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "pools": { - "description": "Pools contains the list of IP addresses pools", - "type": "array", - "items": { - "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", - "type": "object", - "properties": { - "end": { - "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", - "type": "string" - }, - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "start": { - "description": "Start is the first ip address that can be rendered", - "type": "string" - }, - "subnet": { - "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "uid": { - "description": "UID is the UID of this IPPool, used by Hubble", - "type": "string" - } - } - }, - "networkName": { - "description": "NetworkName is the name of the network in which VMs are created/located.", - "type": "string" - }, - "parentPoolRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "staticIp": { - "description": "support dhcp or static IP, if false, use DHCP", - "type": "boolean" - } - } - }, - "resourcePool": { - "description": "ResourcePool is the resource pool within the above computecluster Cluster", - "type": "string" - }, - "storagePolicyName": { - "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", - "type": "string" - }, - "uid": { - "description": "UID for this placement", - "type": "string" - } - } - }, - "vcenterServer": { - "description": "VcenterServer is the address of the vSphere endpoint", - "type": "string" - } - } + "state": { + "description": "The subscription state. Possible values are Enabled, Warned, PastDue, Disabled, and Deleted.", + "type": "string" }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } - } - } - } + "subscriptionId": { + "description": "The subscription ID", + "type": "string" } } } + } + } + } + } + } + } + }, + "/v1/clouds/azure/vhds/{vhd}/url": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the Azure vhd url for the specified vhd location", + "operationId": "V1AzureVhdUrl", + "parameters": [ + { + "type": "string", + "description": "vhd location for which Azure vhd url is requested", + "name": "vhd", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Azure vhd url entity", + "type": "object", + "properties": { + "name": { + "description": "The name of the resource", + "type": "string" }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false + "url": { + "description": "The url of the Azure Vhd", + "type": "string" + } + } + } + } + } + } + }, + "/v1/clouds/cloudTypes": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the custom cloud types", + "operationId": "V1CustomCloudTypesGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Custom cloudType content response", + "type": "object", + "properties": { + "cloudTypes": { + "description": "Array of custom cloud types", + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudCategory": { + "description": "Cloud category description", + "type": "string", + "default": "cloud", + "enum": [ + "datacenter", + "cloud", + "edge" + ] + }, + "cloudFamily": { + "description": "Cloud grouping as family", + "type": "string" + }, + "displayName": { + "description": "Custom cloudtype displayName", + "type": "string" + }, + "isCustom": { + "description": "If it is a custom cloudtype", + "type": "boolean", + "x-omitempty": false + }, + "isManaged": { + "description": "If custom cloudtype is managed", + "type": "boolean", + "x-omitempty": false + }, + "isVertex": { + "description": "If cloud is support for Vertex env", + "type": "boolean", + "x-omitempty": false + }, + "logo": { + "description": "Custom cloudtype logo", + "type": "string" + }, + "name": { + "description": "Custom cloudtype name", + "type": "string" + } } } } @@ -49152,7 +46991,9 @@ } } } - }, + } + }, + "/v1/clouds/cloudTypes/register": { "post": { "security": [ { @@ -49165,382 +47006,66 @@ "tags": [ "v1" ], - "summary": "Adds the vSphere machine to cloud config's machine pool", - "operationId": "v1CloudConfigsVspherePoolMachinesAdd", + "summary": "Registers the custom cloud type", + "operationId": "V1CustomCloudTypeRegister", "parameters": [ { + "description": "Request payload to register custom cloud type", "name": "body", "in": "body", "schema": { - "description": "vSphere cloud VM definition", + "description": "Custom cloud request entity", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the machine.", - "type": "string" - }, "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "description": "ObjectMeta input entity for object creation", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } }, "spec": { - "description": "vSphere cloud VM definition spec", - "type": "object", - "required": [ - "vcenterServer", - "nics", - "placement" - ], - "properties": { - "images": { - "type": "array", - "items": { - "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", - "type": "object", - "properties": { - "fullPath": { - "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", - "type": "string" - }, - "state": { - "type": "string" - } - } - } - }, - "instanceType": { - "type": "object", - "required": [ - "numCPUs", - "memoryMiB", - "diskGiB" - ], - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int64" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - } - } - }, - "nics": { - "type": "array", - "items": { - "description": "vSphere network interface", - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "macAddress": { - "type": "string" - }, - "networkName": { - "type": "string" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", - "type": "array", - "items": { - "type": "string" - } - }, - "placement": { - "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", - "type": "object", - "properties": { - "cluster": { - "description": "Cluster is the computecluster in vsphere", - "type": "string" - }, - "datacenter": { - "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", - "type": "string" - }, - "datastore": { - "description": "Datastore is the datastore in which VMs are created/located.", - "type": "string" - }, - "folder": { - "description": "Folder is the folder in which VMs are created/located.", - "type": "string" - }, - "imageTemplateFolder": { - "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", - "type": "string" - }, - "network": { - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "ipPool": { - "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", - "type": "object", - "properties": { - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "pools": { - "description": "Pools contains the list of IP addresses pools", - "type": "array", - "items": { - "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", - "type": "object", - "properties": { - "end": { - "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", - "type": "string" - }, - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "start": { - "description": "Start is the first ip address that can be rendered", - "type": "string" - }, - "subnet": { - "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "uid": { - "description": "UID is the UID of this IPPool, used by Hubble", - "type": "string" - } - } - }, - "networkName": { - "description": "NetworkName is the name of the network in which VMs are created/located.", - "type": "string" - }, - "parentPoolRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "staticIp": { - "description": "support dhcp or static IP, if false, use DHCP", - "type": "boolean" - } - } - }, - "resourcePool": { - "description": "ResourcePool is the resource pool within the above computecluster Cluster", - "type": "string" - }, - "storagePolicyName": { - "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", - "type": "string" - }, - "uid": { - "description": "UID for this placement", - "type": "string" - } - } - }, - "vcenterServer": { - "description": "VcenterServer is the address of the vSphere endpoint", - "type": "string" - } - } - }, - "status": { - "description": "cloud machine status", + "description": "Custom cloud request entity spec", "type": "object", "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { + "cloudCategory": { + "description": "Cloud category description", "type": "string", + "default": "cloud", "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" + "datacenter", + "cloud", + "edge" ] }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } - } + "displayName": { + "description": "Custom cloud displayName", + "type": "string" + }, + "isControlPlaneManaged": { + "description": "If the custom cloud is a managed cluster", + "type": "boolean" + }, + "logo": { + "description": "Custom cloud logo", + "type": "string" } } } @@ -49576,25 +47101,151 @@ } } } + } + }, + "/v1/clouds/cloudTypes/{cloudType}": { + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the custom cloud type", + "operationId": "V1CustomCloudTypesDelete", + "parameters": [ + { + "type": "string", + "description": "Unique cloud type", + "name": "cloudType", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + } + }, + "/v1/clouds/cloudTypes/{cloudType}/cloudAccountKeys": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns valid keys for the cloud account used for custom cloud type", + "operationId": "V1CustomCloudTypeCloudAccountKeysGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Custom cloudType custom cloud account keys", + "type": "object", + "properties": { + "keys": { + "description": "Array of custom cloud type cloud account keys", + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the custom cloud type cloud account keys", + "operationId": "V1CustomCloudTypeCloudAccountKeysUpdate", + "parameters": [ + { + "description": "Request payload for custom cloud meta entity", + "name": "body", + "in": "body", + "required": true, + "schema": { + "description": "Custom cloudType custom cloud account keys", + "type": "object", + "properties": { + "keys": { + "description": "Array of custom cloud type cloud account keys", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } }, "parameters": [ { "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", + "description": "Unique cloud type", + "name": "cloudType", "in": "path", "required": true } ] }, - "/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "/v1/clouds/cloudTypes/{cloudType}/content/bootstrap": { "get": { "security": [ { @@ -49607,8 +47258,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified vSphere machine", - "operationId": "v1CloudConfigsVspherePoolMachinesUidGet", + "summary": "Returns the custom cloud type bootstrap", + "operationId": "V1CustomCloudTypeBootstrapGet", "parameters": [ { "type": "string", @@ -49619,379 +47270,14 @@ ], "responses": { "200": { - "description": "OK", + "description": "(empty)", "schema": { - "description": "vSphere cloud VM definition", + "description": "Custom cloudType content response", "type": "object", "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the machine.", + "yaml": { + "description": "custom cloud type content", "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "vSphere cloud VM definition spec", - "type": "object", - "required": [ - "vcenterServer", - "nics", - "placement" - ], - "properties": { - "images": { - "type": "array", - "items": { - "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", - "type": "object", - "properties": { - "fullPath": { - "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", - "type": "string" - }, - "state": { - "type": "string" - } - } - } - }, - "instanceType": { - "type": "object", - "required": [ - "numCPUs", - "memoryMiB", - "diskGiB" - ], - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int64" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - } - } - }, - "nics": { - "type": "array", - "items": { - "description": "vSphere network interface", - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "macAddress": { - "type": "string" - }, - "networkName": { - "type": "string" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", - "type": "array", - "items": { - "type": "string" - } - }, - "placement": { - "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", - "type": "object", - "properties": { - "cluster": { - "description": "Cluster is the computecluster in vsphere", - "type": "string" - }, - "datacenter": { - "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", - "type": "string" - }, - "datastore": { - "description": "Datastore is the datastore in which VMs are created/located.", - "type": "string" - }, - "folder": { - "description": "Folder is the folder in which VMs are created/located.", - "type": "string" - }, - "imageTemplateFolder": { - "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", - "type": "string" - }, - "network": { - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "ipPool": { - "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", - "type": "object", - "properties": { - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "pools": { - "description": "Pools contains the list of IP addresses pools", - "type": "array", - "items": { - "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", - "type": "object", - "properties": { - "end": { - "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", - "type": "string" - }, - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "start": { - "description": "Start is the first ip address that can be rendered", - "type": "string" - }, - "subnet": { - "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "uid": { - "description": "UID is the UID of this IPPool, used by Hubble", - "type": "string" - } - } - }, - "networkName": { - "description": "NetworkName is the name of the network in which VMs are created/located.", - "type": "string" - }, - "parentPoolRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "staticIp": { - "description": "support dhcp or static IP, if false, use DHCP", - "type": "boolean" - } - } - }, - "resourcePool": { - "description": "ResourcePool is the resource pool within the above computecluster Cluster", - "type": "string" - }, - "storagePolicyName": { - "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", - "type": "string" - }, - "uid": { - "description": "UID for this placement", - "type": "string" - } - } - }, - "vcenterServer": { - "description": "VcenterServer is the address of the vSphere endpoint", - "type": "string" - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } - } - } - } } } } @@ -50007,390 +47293,19 @@ "Authorization": [] } ], + "consumes": [ + "multipart/form-data" + ], "tags": [ "v1" ], - "summary": "Updates the specified machine to cloud config's machine pool", - "operationId": "v1CloudConfigsVspherePoolMachinesUidUpdate", + "summary": "Update the custom cloud type bootstrap", + "operationId": "V1CustomCloudTypeBootstrapUpdate", "parameters": [ { - "name": "body", - "in": "body", - "schema": { - "description": "vSphere cloud VM definition", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the machine.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "vSphere cloud VM definition spec", - "type": "object", - "required": [ - "vcenterServer", - "nics", - "placement" - ], - "properties": { - "images": { - "type": "array", - "items": { - "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", - "type": "object", - "properties": { - "fullPath": { - "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", - "type": "string" - }, - "state": { - "type": "string" - } - } - } - }, - "instanceType": { - "type": "object", - "required": [ - "numCPUs", - "memoryMiB", - "diskGiB" - ], - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int64" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", - "type": "integer", - "format": "int32" - } - } - }, - "nics": { - "type": "array", - "items": { - "description": "vSphere network interface", - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "index": { - "type": "integer", - "format": "int8" - }, - "macAddress": { - "type": "string" - }, - "networkName": { - "type": "string" - }, - "privateIPs": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", - "type": "array", - "items": { - "type": "string" - } - }, - "placement": { - "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", - "type": "object", - "properties": { - "cluster": { - "description": "Cluster is the computecluster in vsphere", - "type": "string" - }, - "datacenter": { - "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", - "type": "string" - }, - "datastore": { - "description": "Datastore is the datastore in which VMs are created/located.", - "type": "string" - }, - "folder": { - "description": "Folder is the folder in which VMs are created/located.", - "type": "string" - }, - "imageTemplateFolder": { - "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", - "type": "string" - }, - "network": { - "type": "object", - "required": [ - "networkName" - ], - "properties": { - "ipPool": { - "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", - "type": "object", - "properties": { - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "pools": { - "description": "Pools contains the list of IP addresses pools", - "type": "array", - "items": { - "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", - "type": "object", - "properties": { - "end": { - "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", - "type": "string" - }, - "gateway": { - "description": "Gateway is the gateway ip address", - "type": "string" - }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { - "type": "string" - } - }, - "search": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "start": { - "description": "Start is the first ip address that can be rendered", - "type": "string" - }, - "subnet": { - "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", - "type": "string" - } - } - } - }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" - }, - "uid": { - "description": "UID is the UID of this IPPool, used by Hubble", - "type": "string" - } - } - }, - "networkName": { - "description": "NetworkName is the name of the network in which VMs are created/located.", - "type": "string" - }, - "parentPoolRef": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "staticIp": { - "description": "support dhcp or static IP, if false, use DHCP", - "type": "boolean" - } - } - }, - "resourcePool": { - "description": "ResourcePool is the resource pool within the above computecluster Cluster", - "type": "string" - }, - "storagePolicyName": { - "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", - "type": "string" - }, - "uid": { - "description": "UID for this placement", - "type": "string" - } - } - }, - "vcenterServer": { - "description": "VcenterServer is the address of the vSphere endpoint", - "type": "string" - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } - } - } - } - } - } - } + "type": "file", + "name": "fileName", + "in": "formData" }, { "type": "string", @@ -50401,7 +47316,13 @@ ], "responses": { "204": { - "description": "The resource was updated successfully" + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } } } }, @@ -50417,8 +47338,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified vSphere machine", - "operationId": "v1CloudConfigsVspherePoolMachinesUidDelete", + "summary": "Delete the custom cloud type bootstrap", + "operationId": "V1CustomCloudTypeBootstrapDelete", "parameters": [ { "type": "string", @@ -50436,29 +47357,15 @@ "parameters": [ { "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine uid", - "name": "machineUid", + "description": "Unique cloud type", + "name": "cloudType", "in": "path", "required": true } ] }, - "/v1/cloudconfigs/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}/maintenance": { - "put": { + "/v1/clouds/cloudTypes/{cloudType}/content/cloudProvider": { + "get": { "security": [ { "ApiKey": [] @@ -50470,25 +47377,54 @@ "tags": [ "v1" ], - "summary": "Updates the specified machine maintenance", - "operationId": "v1CloudConfigsMachinePoolsMachineUidMaintenanceUpdate", + "summary": "Returns the custom cloud type cloud provider", + "operationId": "V1CustomCloudTypeCloudProviderGet", "parameters": [ { - "name": "body", - "in": "body", + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", "schema": { + "description": "Custom cloudType content response", "type": "object", "properties": { - "action": { - "description": "Machine maintenance mode action", - "type": "string", - "enum": [ - "cordon", - "uncordon" - ] + "yaml": { + "description": "custom cloud type content", + "type": "string" } } } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "consumes": [ + "multipart/form-data" + ], + "tags": [ + "v1" + ], + "summary": "Update the custom cloud type cloud provider", + "operationId": "V1CustomCloudTypeCloudProviderUpdate", + "parameters": [ + { + "type": "file", + "name": "fileName", + "in": "formData" }, { "type": "string", @@ -50499,43 +47435,17 @@ ], "responses": { "204": { - "description": "The resource was updated successfully" + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } } } }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine uid", - "name": "machineUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] - }, - "/v1/cloudconfigs/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}/maintenance/status": { - "put": { + "delete": { "security": [ { "ApiKey": [] @@ -50547,28 +47457,9 @@ "tags": [ "v1" ], - "summary": "Updates the specified machine maintenance", - "operationId": "v1CloudConfigsMachinePoolsMachineUidMaintenanceStatusUpdate", + "summary": "Delete the custom cloud type cloud provider", + "operationId": "V1CustomCloudTypeCloudProviderDelete", "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } - } - } - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -50578,42 +47469,21 @@ ], "responses": { "204": { - "description": "The resource was updated successfully" + "description": "The resource was deleted successfully" } } }, "parameters": [ { "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine pool name", - "name": "machinePoolName", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Machine uid", - "name": "machineUid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Cloud type", + "description": "Unique cloud type", "name": "cloudType", "in": "path", "required": true } ] }, - "/v1/cloudconfigs/{configUid}/machinePools/machineUids": { + "/v1/clouds/cloudTypes/{cloudType}/content/controlPlane": { "get": { "security": [ { @@ -50626,8 +47496,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified cloud config's machine pools and machine uid", - "operationId": "v1CloudConfigsMachinePoolsMachineUidsGet", + "summary": "Returns the custom cloud type control plane", + "operationId": "V1CustomCloudTypeControlPlaneGet", "parameters": [ { "type": "string", @@ -50638,39 +47508,21 @@ ], "responses": { "200": { - "description": "OK", + "description": "(empty)", "schema": { + "description": "Custom cloudType content response", + "type": "object", "properties": { - "machinePools": { - "type": "object", - "additionalProperties": { - "properties": { - "machineUids": { - "type": "array", - "items": { - "type": "string" - } - } - } - } + "yaml": { + "description": "custom cloud type content", + "type": "string" } } } } } }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud config uid", - "name": "configUid", - "in": "path", - "required": true - } - ] - }, - "/v1/clouds/aws/account/sts": { - "get": { + "put": { "security": [ { "ApiKey": [] @@ -50679,22 +47531,19 @@ "Authorization": [] } ], + "consumes": [ + "multipart/form-data" + ], "tags": [ "v1" ], - "summary": "Retrieves AWS external id and account id", - "operationId": "V1AwsAccountStsGet", + "summary": "Update the custom cloud type control plane", + "operationId": "V1CustomCloudTypeControlPlaneUpdate", "parameters": [ { - "enum": [ - "aws", - "aws-us-gov" - ], - "type": "string", - "default": "aws", - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", - "name": "partition", - "in": "query" + "type": "file", + "name": "fileName", + "in": "formData" }, { "type": "string", @@ -50704,37 +47553,18 @@ } ], "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "AWS cloud account sts", - "type": "object", - "properties": { - "accountId": { - "description": "A 12-digit number, such as 123456789012, that uniquely identifies an AWS account", - "type": "string" - }, - "externalId": { - "description": "It can be passed to the AssumeRole API of the STS. It can be used in the condition element in a role's trust policy, allowing the role to be assumed only when a certain value is present in the external ID", - "type": "string" - }, - "partition": { - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", - "type": "string", - "default": "aws", - "enum": [ - "aws", - "aws-us-gov" - ] - } + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" } } } } - } - }, - "/v1/clouds/aws/account/validate": { - "post": { + }, + "delete": { "security": [ { "ApiKey": [] @@ -50746,67 +47576,93 @@ "tags": [ "v1" ], - "summary": "Validate the specified AWS account credentials", - "operationId": "V1AwsAccountValidate", + "summary": "Delete the custom cloud type control plane", + "operationId": "V1CustomCloudTypeControlPlaneDelete", "parameters": [ { - "description": "Request payload to validate AWS cloud account", - "name": "awsCloudAccount", - "in": "body", - "required": true, - "schema": { - "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", - "type": "object", - "properties": { - "accessKey": { - "description": "AWS account access key", - "type": "string" - }, - "credentialType": { - "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", - "type": "string", - "default": "secret", - "enum": [ - "secret", - "sts" - ] - }, - "partition": { - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", - "type": "string", - "default": "aws", - "enum": [ - "aws", - "aws-us-gov" - ] - }, - "policyARNs": { - "description": "List of policy ARNs required in case of credentialType sts.", - "type": "array", - "items": { - "type": "string" - } - }, - "secretKey": { - "description": "AWS account secret key", + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Unique cloud type", + "name": "cloudType", + "in": "path", + "required": true + } + ] + }, + "/v1/clouds/cloudTypes/{cloudType}/content/templates/clusterTemplate": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the custom cloud type cluster template", + "operationId": "V1CustomCloudTypeClusterTemplateGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Custom cloudType content response", + "type": "object", + "properties": { + "yaml": { + "description": "custom cloud type content", "type": "string" - }, - "sts": { - "description": "Aws sts credentials", - "type": "object", - "properties": { - "arn": { - "description": "Arn for the aws sts credentials in cloud account", - "type": "string" - }, - "externalId": { - "description": "ExternalId for the aws sts credentials in cloud account", - "type": "string" - } - } } } } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "consumes": [ + "multipart/form-data" + ], + "tags": [ + "v1" + ], + "summary": "Update the custom cloud type cluster template", + "operationId": "V1CustomCloudTypeClusterTemplateUpdate", + "parameters": [ + { + "type": "file", + "name": "fileName", + "in": "formData" }, { "type": "string", @@ -50826,10 +47682,47 @@ } } } - } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Delete the custom cloud type cluster template", + "operationId": "V1CustomCloudTypeClusterTemplateDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Unique cloud type", + "name": "cloudType", + "in": "path", + "required": true + } + ] }, - "/v1/clouds/aws/cloudwatch/validate": { - "post": { + "/v1/clouds/cloudTypes/{cloudType}/content/templates/controlPlanePoolTemplate": { + "get": { "security": [ { "ApiKey": [] @@ -50838,89 +47731,57 @@ "Authorization": [] } ], - "description": "Validates aws cloud watch credentials", "tags": [ "v1" ], - "summary": "validates aws cloud watch credentials", - "operationId": "V1CloudsAwsCloudWatchValidate", + "summary": "Returns the custom cloud type controlPlane pool template", + "operationId": "V1CustomCloudTypeControlPlanePoolTemplateGet", "parameters": [ { - "description": "Request payload for cloud watch config", - "name": "cloudWatchConfig", - "in": "body", - "required": true, + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", "schema": { - "description": "Cloud watch config entity", + "description": "Custom cloudType content response", "type": "object", "properties": { - "credentials": { - "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", - "type": "object", - "properties": { - "accessKey": { - "description": "AWS account access key", - "type": "string" - }, - "credentialType": { - "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", - "type": "string", - "default": "secret", - "enum": [ - "secret", - "sts" - ] - }, - "partition": { - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", - "type": "string", - "default": "aws", - "enum": [ - "aws", - "aws-us-gov" - ] - }, - "policyARNs": { - "description": "List of policy ARNs required in case of credentialType sts.", - "type": "array", - "items": { - "type": "string" - } - }, - "secretKey": { - "description": "AWS account secret key", - "type": "string" - }, - "sts": { - "description": "Aws sts credentials", - "type": "object", - "properties": { - "arn": { - "description": "Arn for the aws sts credentials in cloud account", - "type": "string" - }, - "externalId": { - "description": "ExternalId for the aws sts credentials in cloud account", - "type": "string" - } - } - } - } - }, - "group": { - "description": "Name of the group", - "type": "string" - }, - "region": { - "description": "Name of the region", - "type": "string" - }, - "stream": { - "description": "Name of the stream", + "yaml": { + "description": "custom cloud type content", "type": "string" } } } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "consumes": [ + "multipart/form-data" + ], + "tags": [ + "v1" + ], + "summary": "Update the custom cloud type controlPlane pool template", + "operationId": "V1CustomCloudTypeControlPlanePoolTemplateUpdate", + "parameters": [ + { + "type": "file", + "name": "fileName", + "in": "formData" }, { "type": "string", @@ -50940,10 +47801,8 @@ } } } - } - }, - "/v1/clouds/aws/cost": { - "post": { + }, + "delete": { "security": [ { "ApiKey": [] @@ -50955,104 +47814,48 @@ "tags": [ "v1" ], - "summary": "Retrieves AWS cloud account usage cost from cost explorer.", - "operationId": "v1AwsCloudCost", + "summary": "Delete the custom cloud type controlPlane pool template", + "operationId": "V1CustomCloudTypeControlPlanePoolTemplateDelete", "parameters": [ { - "description": "Request payload for AWS cloud cost", - "name": "body", - "in": "body", - "required": true, - "schema": { - "description": "Aws cloud account usage cost payload spec", - "type": "object", - "required": [ - "credentials" - ], - "properties": { - "accountId": { - "description": "AccountId of AWS cloud cost", - "type": "string" - }, - "credentials": { - "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", - "type": "object", - "properties": { - "accessKey": { - "description": "AWS account access key", - "type": "string" - }, - "credentialType": { - "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", - "type": "string", - "default": "secret", - "enum": [ - "secret", - "sts" - ] - }, - "partition": { - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", - "type": "string", - "default": "aws", - "enum": [ - "aws", - "aws-us-gov" - ] - }, - "policyARNs": { - "description": "List of policy ARNs required in case of credentialType sts.", - "type": "array", - "items": { - "type": "string" - } - }, - "secretKey": { - "description": "AWS account secret key", - "type": "string" - }, - "sts": { - "description": "Aws sts credentials", - "type": "object", - "properties": { - "arn": { - "description": "Arn for the aws sts credentials in cloud account", - "type": "string" - }, - "externalId": { - "description": "ExternalId for the aws sts credentials in cloud account", - "type": "string" - } - } - } - } - }, - "filter": { - "description": "Aws cloud account usage cost payload filter. startTime and endTime should be within 12 months range from now.", - "type": "object", - "required": [ - "startTime" - ], - "properties": { - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "iamUserId": { - "description": "IAM UserId of AWS account", - "type": "string" - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } - } - } - } - } + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Unique cloud type", + "name": "cloudType", + "in": "path", + "required": true + } + ] + }, + "/v1/clouds/cloudTypes/{cloudType}/content/templates/workerPoolTemplate": { + "get": { + "security": [ + { + "ApiKey": [] }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the custom cloud type worker pool template", + "operationId": "V1CustomCloudTypeWorkerPoolTemplateGet", + "parameters": [ { "type": "string", "description": "Scope the request to the specified project uid", @@ -51064,48 +47867,19 @@ "200": { "description": "(empty)", "schema": { - "description": "AWS cloud account usage cost summary response data", + "description": "Custom cloudType content response", "type": "object", "properties": { - "cost": { - "description": "AWS cloud account usage cost summary of monthlyCosts and totalCost", - "type": "object", - "properties": { - "monthlyCosts": { - "description": "Monthly cost of AWS cost", - "type": "array", - "items": { - "type": "object", - "properties": { - "amount": { - "description": "Amount for aws cloud cost", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "timestamp": { - "description": "Time duration for aws cloud cost", - "type": "integer" - } - } - } - }, - "total": { - "description": "Total cost of AWS cost", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } + "yaml": { + "description": "custom cloud type content", + "type": "string" } } } } } - } - }, - "/v1/clouds/aws/imageIds/{imageId}/volumeSize": { - "get": { + }, + "put": { "security": [ { "ApiKey": [] @@ -51114,34 +47888,96 @@ "Authorization": [] } ], - "description": "Get AWS Volume Size", + "consumes": [ + "multipart/form-data" + ], "tags": [ "v1" ], - "summary": "Get AWS Volume Size", - "operationId": "V1AwsVolumeSizeGet", + "summary": "Update the custom cloud type worker pool template", + "operationId": "V1CustomCloudTypeWorkerPoolTemplateUpdate", "parameters": [ { - "type": "string", - "description": "Specific AWS Region", - "name": "region", - "in": "query", - "required": true + "type": "file", + "name": "fileName", + "in": "formData" }, { "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Delete the custom cloud type worker pool template", + "operationId": "V1CustomCloudTypeWorkerPoolTemplateDelete", + "parameters": [ { "type": "string", - "description": "AWS image id", - "name": "imageId", - "in": "path", - "required": true + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Unique cloud type", + "name": "cloudType", + "in": "path", + "required": true + } + ] + }, + "/v1/clouds/cloudTypes/{cloudType}/logo": { + "get": { + "security": [ + { + "ApiKey": [] }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Returns the custom cloud type logo", + "operationId": "V1CustomCloudTypeLogoGet", + "parameters": [ { "type": "string", "description": "Scope the request to the specified project uid", @@ -51151,23 +47987,20 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "Download the logo", "schema": { - "description": "AWS Volume Size entity", - "type": "object", - "properties": { - "sizeGB": { - "description": "AWS volume size", - "type": "integer" - } + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" } } } } - } - }, - "/v1/clouds/aws/policies": { - "post": { + }, + "put": { "security": [ { "ApiKey": [] @@ -51176,77 +48009,65 @@ "Authorization": [] } ], + "consumes": [ + "multipart/form-data" + ], "tags": [ "v1" ], - "summary": "Retrieves a list of AWS policies for the specified account", - "operationId": "V1AwsIamPolicies", + "summary": "Update the custom cloud type logo", + "operationId": "V1CustomCloudTypeLogoUpdate", "parameters": [ { - "description": "Request payload for AWS Cloud Account", - "name": "account", - "in": "body", - "required": true, - "schema": { - "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", - "type": "object", - "properties": { - "accessKey": { - "description": "AWS account access key", - "type": "string" - }, - "credentialType": { - "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", - "type": "string", - "default": "secret", - "enum": [ - "secret", - "sts" - ] - }, - "partition": { - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", - "type": "string", - "default": "aws", - "enum": [ - "aws", - "aws-us-gov" - ] - }, - "policyARNs": { - "description": "List of policy ARNs required in case of credentialType sts.", - "type": "array", - "items": { - "type": "string" - } - }, - "secretKey": { - "description": "AWS account secret key", - "type": "string" - }, - "sts": { - "description": "Aws sts credentials", - "type": "object", - "properties": { - "arn": { - "description": "Arn for the aws sts credentials in cloud account", - "type": "string" - }, - "externalId": { - "description": "ExternalId for the aws sts credentials in cloud account", - "type": "string" - } - } - } - } - } + "type": "file", + "name": "fileName", + "in": "formData" }, { "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query" + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Unique cloud type", + "name": "cloudType", + "in": "path", + "required": true + } + ] + }, + "/v1/clouds/cloudTypes/{cloudType}/meta": { + "get": { + "security": [ + { + "ApiKey": [] }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the custom cloud type meta", + "operationId": "V1CustomCloudTypeMetaGet", + "parameters": [ { "type": "string", "description": "Scope the request to the specified project uid", @@ -51258,26 +48079,77 @@ "200": { "description": "(empty)", "schema": { + "description": "Custom cloud meta entity", "type": "object", - "required": [ - "policies" - ], "properties": { - "policies": { - "type": "array", - "items": { - "description": "Aws policy", - "type": "object", - "properties": { - "arn": { - "type": "string" - }, - "policyId": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { "type": "string" - }, - "policyName": { + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { "type": "string" } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Custom cloud spec response entity", + "type": "object", + "properties": { + "cloudCategory": { + "description": "Cloud category description", + "type": "string", + "default": "cloud", + "enum": [ + "datacenter", + "cloud", + "edge" + ] + }, + "displayName": { + "description": "Custom cloud displayName", + "type": "string" + }, + "isManaged": { + "description": "If the custom cloud is a managed cluster", + "type": "boolean" + }, + "logo": { + "description": "Custom cloud logo", + "type": "string" } } } @@ -51285,10 +48157,8 @@ } } } - } - }, - "/v1/clouds/aws/policyArns/validate": { - "post": { + }, + "put": { "security": [ { "ApiKey": [] @@ -51300,90 +48170,73 @@ "tags": [ "v1" ], - "summary": "Validate the aws policy arns validate", - "operationId": "V1AwsPolicyArnsValidate", + "summary": "Update the custom cloud type meta", + "operationId": "V1CustomCloudTypeMetaUpdate", "parameters": [ { - "description": "Request payload to validate AWS policy ARN", - "name": "spec", + "description": "Request payload for custom cloud meta entity", + "name": "body", "in": "body", "required": true, "schema": { - "description": "Aws policy ARNs spec", + "description": "Custom cloud request entity", "type": "object", - "required": [ - "policyArns", - "account" - ], "properties": { - "account": { - "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "metadata": { + "description": "ObjectMeta input entity for object creation", "type": "object", "properties": { - "accessKey": { - "description": "AWS account access key", - "type": "string" + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "credentialType": { - "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", - "type": "string", - "default": "secret", - "enum": [ - "secret", - "sts" - ] + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "partition": { - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Custom cloud request entity spec", + "type": "object", + "properties": { + "cloudCategory": { + "description": "Cloud category description", "type": "string", - "default": "aws", + "default": "cloud", "enum": [ - "aws", - "aws-us-gov" + "datacenter", + "cloud", + "edge" ] }, - "policyARNs": { - "description": "List of policy ARNs required in case of credentialType sts.", - "type": "array", - "items": { - "type": "string" - } - }, - "secretKey": { - "description": "AWS account secret key", + "displayName": { + "description": "Custom cloud displayName", "type": "string" }, - "sts": { - "description": "Aws sts credentials", - "type": "object", - "properties": { - "arn": { - "description": "Arn for the aws sts credentials in cloud account", - "type": "string" - }, - "externalId": { - "description": "ExternalId for the aws sts credentials in cloud account", - "type": "string" - } - } + "isControlPlaneManaged": { + "description": "If the custom cloud is a managed cluster", + "type": "boolean" + }, + "logo": { + "description": "Custom cloud logo", + "type": "string" } } - }, - "policyArns": { - "type": "array", - "items": { - "type": "string" - } } } } }, - { - "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -51393,18 +48246,21 @@ ], "responses": { "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } + "description": "The resource was updated successfully" } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Unique cloud type", + "name": "cloudType", + "in": "path", + "required": true + } + ] }, - "/v1/clouds/aws/properties/validate": { + "/v1/clouds/coxedge/account/validate": { "post": { "security": [ { @@ -51417,25 +48273,40 @@ "tags": [ "v1" ], - "summary": "Validate AWS properties", - "operationId": "V1AwsPropertiesValidate", + "summary": "Validate the specified CoxEdge account credentials", + "operationId": "V1CoxEdgeAccountValidate", "parameters": [ { - "description": "Request payload for AWS properties validate spec", - "name": "properties", + "description": "Request payload to validate CoxEdge cloud account", + "name": "account", "in": "body", "required": true, "schema": { - "description": "AWS properties validate spec", + "description": "CoxEdge cloud account", "type": "object", + "required": [ + "apiBaseUrl", + "apiKey" + ], "properties": { - "cloudAccountUid": { + "apiBaseUrl": { + "description": "The base url - used to make api calls", "type": "string" }, - "region": { + "apiKey": { + "description": "CoxEdge cloud account ApiKey", "type": "string" }, - "sshKeyName": { + "environment": { + "description": "The environment belonging to the organization", + "type": "string" + }, + "organizationId": { + "description": "The Id of organization", + "type": "string" + }, + "service": { + "description": "The service for which the organization is allowed to provision resources", "type": "string" } } @@ -51461,7 +48332,7 @@ } } }, - "/v1/clouds/aws/regions": { + "/v1/clouds/coxedge/default/baseurls": { "get": { "security": [ { @@ -51474,16 +48345,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of AWS regions for the specified account", - "operationId": "V1AwsRegions", + "summary": "Retrieves a list of default base urls", + "operationId": "V1CoxEdgeBaseUrls", "parameters": [ - { - "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -51495,31 +48359,16 @@ "200": { "description": "(empty)", "schema": { + "description": "List of CoxEdge base urls", "type": "object", "required": [ - "regions" + "baseUrls" ], "properties": { - "regions": { - "description": "List of AWS regions", + "baseUrls": { "type": "array", "items": { - "description": "AWS region which represents separate geographic area.", - "type": "object", - "properties": { - "endpoint": { - "description": "AWS offer a regional endpoint that can used to make requests", - "type": "string" - }, - "name": { - "description": "Name of the AWS region", - "type": "string" - }, - "optInStatus": { - "description": "Enable your account to operate in the particular regions", - "type": "string" - } - } + "type": "string" } } } @@ -51528,7 +48377,7 @@ } } }, - "/v1/clouds/aws/regions/{region}/availabilityzones": { + "/v1/clouds/coxedge/environments": { "get": { "security": [ { @@ -51541,22 +48390,21 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of AWS availability zones for the specified region", - "operationId": "V1AwsZones", + "summary": "Retrieves a list of environments for the specified account", + "operationId": "V1CoxEdgeEnvironmentsGet", "parameters": [ { "type": "string", - "description": "Region for which zones are requested", - "name": "region", - "in": "path", + "description": "Uid for the specific CoxEdge cloud account", + "name": "cloudAccountUid", + "in": "query", "required": true }, { "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true + "description": "OrganizationId for the specific CoxEdge account", + "name": "organizationId", + "in": "query" }, { "type": "string", @@ -51567,30 +48415,30 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "List of CoxEdge environments", "schema": { + "description": "List of CoxEdge environments", "type": "object", "required": [ - "zones" + "environments" ], "properties": { - "zones": { - "description": "List of AWS Zones", + "environments": { "type": "array", "items": { - "description": "Distinct locations within an AWS Region that are engineered to be isolated from failures in other Zones", + "description": "CoxEdge environment entity", "type": "object", "properties": { - "name": { - "description": "AWS availability zone name", + "id": { + "description": "CoxEdge environment id", "type": "string" }, - "state": { - "description": "AWS availability zone state", - "type": "string" + "isDeleted": { + "description": "CoxEdge environment state", + "type": "boolean" }, - "zoneId": { - "description": "AWS availability zone id", + "name": { + "description": "CoxEdge environment name", "type": "string" } } @@ -51600,9 +48448,7 @@ } } } - } - }, - "/v1/clouds/aws/regions/{region}/copydefaultimages": { + }, "post": { "security": [ { @@ -51615,80 +48461,35 @@ "tags": [ "v1" ], - "summary": "Copies the specified image from one region to another region", - "operationId": "V1AwsCopyImageFromDefaultRegion", + "summary": "Retrieves a list of environments for baseUrl and apiKey", + "operationId": "V1CoxEdgeEnvironments", "parameters": [ { - "type": "string", - "description": "Region to copy AWS image from", - "name": "region", - "in": "path", - "required": true - }, - { - "description": "Request payload to copy the AWS image", - "name": "spectroClusterAwsImageTag", + "description": "Request payload to get CoxEdge environments", + "name": "spec", "in": "body", + "required": true, "schema": { - "description": "AWS image name and credentials", + "description": "Request payload to get CoxEdge environments", "type": "object", "properties": { - "amiName": { - "description": "AWS image ami name", - "type": "string" - }, - "awsAccount": { - "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "credentials": { + "description": "CoxEdge credentials to get organizations", "type": "object", "properties": { - "accessKey": { - "description": "AWS account access key", + "apiBaseUrl": { + "description": "CoxEdge baseUrl - for api calls", "type": "string" }, - "credentialType": { - "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", - "type": "string", - "default": "secret", - "enum": [ - "secret", - "sts" - ] - }, - "partition": { - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", - "type": "string", - "default": "aws", - "enum": [ - "aws", - "aws-us-gov" - ] - }, - "policyARNs": { - "description": "List of policy ARNs required in case of credentialType sts.", - "type": "array", - "items": { - "type": "string" - } - }, - "secretKey": { - "description": "AWS account secret key", + "apiKey": { + "description": "CoxEdge ApiKey - secret for api calls", "type": "string" - }, - "sts": { - "description": "Aws sts credentials", - "type": "object", - "properties": { - "arn": { - "description": "Arn for the aws sts credentials in cloud account", - "type": "string" - }, - "externalId": { - "description": "ExternalId for the aws sts credentials in cloud account", - "type": "string" - } - } } } + }, + "organizationId": { + "description": "CoxEdge organizationId", + "type": "string" } } } @@ -51702,14 +48503,34 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "List of CoxEdge environments", "schema": { - "description": "Async operation id", + "description": "List of CoxEdge environments", "type": "object", + "required": [ + "environments" + ], "properties": { - "operationId": { - "description": "OperationId for a particular sync operation id", - "type": "string" + "environments": { + "type": "array", + "items": { + "description": "CoxEdge environment entity", + "type": "object", + "properties": { + "id": { + "description": "CoxEdge environment id", + "type": "string" + }, + "isDeleted": { + "description": "CoxEdge environment state", + "type": "boolean" + }, + "name": { + "description": "CoxEdge environment name", + "type": "string" + } + } + } } } } @@ -51717,7 +48538,7 @@ } } }, - "/v1/clouds/aws/regions/{region}/eksClusters/name/validate": { + "/v1/clouds/coxedge/organizations": { "get": { "security": [ { @@ -51727,34 +48548,19 @@ "Authorization": [] } ], - "description": "Returns no contents if aws cluster name is valid else error.", "tags": [ "v1" ], - "summary": "Check if Aws cluster name is valid", - "operationId": "V1AwsClusterNameValidate", + "summary": "Retrieves a list of organizations for the specified account", + "operationId": "V1CoxEdgeOrganizationsGet", "parameters": [ { "type": "string", - "description": "Uid for the specific AWS cloud account", + "description": "Uid for the specific CoxEdge cloud account", "name": "cloudAccountUid", "in": "query", "required": true }, - { - "type": "string", - "description": "cluster name to be validated", - "name": "name", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Region for which cluster name is validated", - "name": "region", - "in": "path", - "required": true - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -51763,19 +48569,41 @@ } ], "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" + "200": { + "description": "List of CoxEdge organizations", + "schema": { + "description": "List of CoxEdge organizations", + "type": "object", + "required": [ + "organizations" + ], + "properties": { + "organizations": { + "type": "array", + "items": { + "description": "CoxEdge Organization entity", + "type": "object", + "properties": { + "id": { + "description": "CoxEdge organization id", + "type": "string" + }, + "isDeleted": { + "description": "CoxEdge organization state", + "type": "boolean" + }, + "name": { + "description": "CoxEdge organization name", + "type": "string" + } + } + } + } } } } } - } - }, - "/v1/clouds/aws/regions/{region}/images": { + }, "post": { "security": [ { @@ -51788,83 +48616,112 @@ "tags": [ "v1" ], - "summary": "Returns AWS image for the specified AMI name", - "operationId": "V1AwsFindImage", + "summary": "Retrieves a list of organizations for baseUrl and apiKey", + "operationId": "V1CoxEdgeOrganizations", "parameters": [ { - "type": "string", - "description": "Region to find AWS image", - "name": "region", - "in": "path", - "required": true - }, - { - "description": "Request payload to find the AWS image", - "name": "awsImageRequest", + "description": "Request payload to get CoxEdge organizations", + "name": "spec", "in": "body", + "required": true, "schema": { - "description": "AWS image name and credentials", + "description": "CoxEdge credentials to get organizations", "type": "object", "properties": { - "amiName": { - "description": "AWS image ami name", + "apiBaseUrl": { + "description": "CoxEdge baseUrl - for api calls", "type": "string" }, - "awsAccount": { - "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", - "type": "object", - "properties": { - "accessKey": { - "description": "AWS account access key", - "type": "string" - }, - "credentialType": { - "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", - "type": "string", - "default": "secret", - "enum": [ - "secret", - "sts" - ] - }, - "partition": { - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", - "type": "string", - "default": "aws", - "enum": [ - "aws", - "aws-us-gov" - ] - }, - "policyARNs": { - "description": "List of policy ARNs required in case of credentialType sts.", - "type": "array", - "items": { + "apiKey": { + "description": "CoxEdge ApiKey - secret for api calls", + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "List of CoxEdge organizations", + "schema": { + "description": "List of CoxEdge organizations", + "type": "object", + "required": [ + "organizations" + ], + "properties": { + "organizations": { + "type": "array", + "items": { + "description": "CoxEdge Organization entity", + "type": "object", + "properties": { + "id": { + "description": "CoxEdge organization id", + "type": "string" + }, + "isDeleted": { + "description": "CoxEdge organization state", + "type": "boolean" + }, + "name": { + "description": "CoxEdge organization name", "type": "string" - } - }, - "secretKey": { - "description": "AWS account secret key", - "type": "string" - }, - "sts": { - "description": "Aws sts credentials", - "type": "object", - "properties": { - "arn": { - "description": "Arn for the aws sts credentials in cloud account", - "type": "string" - }, - "externalId": { - "description": "ExternalId for the aws sts credentials in cloud account", - "type": "string" - } } } } } } } + } + } + } + }, + "/v1/clouds/coxedge/regions": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of CoxEdge regions for the specified account", + "operationId": "V1CoxEdgeRegions", + "parameters": [ + { + "type": "string", + "description": "Uid for the specific AWS cloud account", + "name": "cloudAccountUid", + "in": "query" + }, + { + "type": "string", + "description": "CoxEdge organization id", + "name": "organizationId", + "in": "query" + }, + { + "type": "string", + "description": "CoxEdge service name", + "name": "service", + "in": "query" + }, + { + "type": "string", + "description": "CoxEdge environment name", + "name": "environment", + "in": "query" }, { "type": "string", @@ -51877,20 +48734,68 @@ "200": { "description": "(empty)", "schema": { - "description": "AWS image name and ami", + "description": "List of CoxEdge regions", "type": "object", + "required": [ + "regions" + ], "properties": { - "id": { - "description": "AWS image id", - "type": "string" - }, - "name": { - "description": "AWS image name", - "type": "string" - }, - "owner": { - "description": "AWS image owner id", - "type": "string" + "regions": { + "type": "array", + "items": { + "description": "CoxEdge region entity", + "type": "object", + "properties": { + "code": { + "description": "Code of the CoxEdge region", + "type": "string" + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "name": { + "description": "Name of the CoxEdge region", + "type": "string" + } + } + } } } } @@ -51898,7 +48803,7 @@ } } }, - "/v1/clouds/aws/regions/{region}/instancetypes": { + "/v1/clouds/coxedge/regions/{region}/instancetypes": { "get": { "security": [ { @@ -51911,12 +48816,12 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of AWS instance types", - "operationId": "V1AwsInstanceTypes", + "summary": "Retrieves a list of CoxEdge instance types", + "operationId": "V1CoxEdgeInstanceTypes", "parameters": [ { "type": "string", - "description": "Region for which AWS instances are requested", + "description": "Region for which CoxEdge instances are listed", "name": "region", "in": "path", "required": true @@ -51935,19 +48840,6 @@ "name": "memoryGtEq", "in": "query" }, - { - "type": "number", - "format": "double", - "description": "Filter for instances having gpu greater than or equal", - "name": "gpuGtEq", - "in": "query" - }, - { - "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -51959,7 +48851,7 @@ "200": { "description": "(empty)", "schema": { - "description": "List of AWS instance types", + "description": "List of CoxEdge instance types", "type": "object", "properties": { "instanceTypes": { @@ -52059,7 +48951,7 @@ } } }, - "/v1/clouds/aws/regions/{region}/keypairs": { + "/v1/clouds/coxedge/services": { "get": { "security": [ { @@ -52072,22 +48964,21 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of AWS keypairs", - "operationId": "V1AwsKeyPairs", + "summary": "Retrieves a list of services for the specified account", + "operationId": "V1CoxEdgeServicesGet", "parameters": [ { "type": "string", - "description": "Region for which AWS key pairs are requested", - "name": "region", - "in": "path", + "description": "Uid for the specific CoxEdge cloud account", + "name": "cloudAccountUid", + "in": "query", "required": true }, { "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true + "description": "OrganizationId for the specific CoxEdge account", + "name": "organizationId", + "in": "query" }, { "type": "string", @@ -52098,25 +48989,40 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "List of CoxEdge services", "schema": { - "description": "List of AWS keypairs", + "description": "List of CoxEdge services", "type": "object", + "required": [ + "services" + ], "properties": { - "keyNames": { - "description": "Array of Aws Keypair names", + "services": { "type": "array", "items": { - "type": "string" + "description": "CoxEdge service entity", + "type": "object", + "properties": { + "code": { + "description": "CoxEdge service code", + "type": "string" + }, + "id": { + "description": "CoxEdge service id", + "type": "string" + }, + "name": { + "description": "CoxEdge service name", + "type": "string" + } + } } } } } } } - } - }, - "/v1/clouds/aws/regions/{region}/keypairs/{keypair}/validate": { + }, "post": { "security": [ { @@ -52129,29 +49035,121 @@ "tags": [ "v1" ], - "summary": "Validate the specified AWS keypair", - "operationId": "V1AwsKeyPairValidate", + "summary": "Retrieves a list of services for baseUrl and apiKey", + "operationId": "V1CoxEdgeServices", "parameters": [ { - "type": "string", - "description": "Region for which AWS key pairs is validated", - "name": "region", - "in": "path", - "required": true + "description": "Request payload to get CoxEdge services", + "name": "spec", + "in": "body", + "required": true, + "schema": { + "description": "CoxEdge credentials to get organizations", + "type": "object", + "properties": { + "apiBaseUrl": { + "description": "CoxEdge baseUrl - for api calls", + "type": "string" + }, + "apiKey": { + "description": "CoxEdge ApiKey - secret for api calls", + "type": "string" + } + } + } }, { "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "List of CoxEdge services", + "type": "object", + "required": [ + "services" + ], + "properties": { + "services": { + "type": "array", + "items": { + "description": "CoxEdge service entity", + "type": "object", + "properties": { + "code": { + "description": "CoxEdge service code", + "type": "string" + }, + "id": { + "description": "CoxEdge service id", + "type": "string" + }, + "name": { + "description": "CoxEdge service name", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "/v1/clouds/eks/properties/validate": { + "post": { + "security": [ + { + "ApiKey": [] }, { - "type": "string", - "description": "AWS Key pair which is to be validated", - "name": "keypair", - "in": "path", - "required": true + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Validate EKS properties", + "operationId": "V1EksPropertiesValidate", + "parameters": [ + { + "description": "Request payload for EKS properties validate spec", + "name": "properties", + "in": "body", + "required": true, + "schema": { + "description": "Eks properties validate spec", + "type": "object", + "properties": { + "cloudAccountUid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnets": { + "type": "array", + "items": { + "type": "string" + } + }, + "vpcId": { + "type": "string" + } + } + } }, { "type": "string", @@ -52173,8 +49171,8 @@ } } }, - "/v1/clouds/aws/regions/{region}/kms/{keyId}": { - "get": { + "/v1/clouds/gcp/account/validate": { + "post": { "security": [ { "ApiKey": [] @@ -52186,29 +49184,34 @@ "tags": [ "v1" ], - "summary": "Get AWS KMS key by Id", - "operationId": "V1AwsKmsKeyGet", + "summary": "Validate the specified GCP account credentials", + "operationId": "V1GcpAccountValidate", "parameters": [ { - "type": "string", - "description": "Region for which AWS KMS key belongs", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "The globally unique identifier for the KMS key", - "name": "keyId", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true + "description": "Uid for the specific GCP cloud account", + "name": "gcpCloudAccount", + "in": "body", + "required": true, + "schema": { + "description": "Gcp cloud account spec", + "type": "object", + "properties": { + "spec": { + "description": "Gcp cloud account entity which takes json credentials or reference to the file where credentials are stored", + "type": "object", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + } + } + } + } }, { "type": "string", @@ -52218,32 +49221,20 @@ } ], "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of AWS Keys", - "type": "object", - "properties": { - "awsAccountId": { - "description": "The twelve-digit account ID of the Amazon Web Services account that owns the KMS key", - "type": "string" - }, - "enabled": { - "description": "Specifies whether the KMS key is enabled.", - "type": "boolean" - }, - "keyId": { - "description": "The globally unique identifier for the KMS key", - "type": "string" - } + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" } } } } } }, - "/v1/clouds/aws/regions/{region}/kmskeys": { - "get": { + "/v1/clouds/gcp/azs/validate": { + "post": { "security": [ { "ApiKey": [] @@ -52255,22 +49246,39 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of AWS KMS keys for the specified account", - "operationId": "V1AwsKmsKeys", + "summary": "Validate the specified GCP az", + "operationId": "V1GcpAzValidate", "parameters": [ { - "type": "string", - "description": "Region for which AWS KMS key are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true + "description": "Uid for the specific GCP cloud account", + "name": "entity", + "in": "body", + "required": true, + "schema": { + "description": "Az validate entity", + "type": "object", + "properties": { + "azs": { + "description": "Gcp Azs", + "type": "array", + "items": { + "type": "string" + } + }, + "project": { + "description": "Gcp project", + "type": "string" + }, + "region": { + "description": "Gcp region", + "type": "string" + }, + "uid": { + "description": "Cloud account uid", + "type": "string" + } + } + } }, { "type": "string", @@ -52280,47 +49288,93 @@ } ], "responses": { - "200": { - "description": "(empty)", + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/clouds/gcp/bucketname/validate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Validate the specified GCP bucket name credentials", + "operationId": "V1GcpBucketNameValidate", + "parameters": [ + { + "description": "Request payload for GCP account name validate", + "name": "body", + "in": "body", + "required": true, "schema": { - "description": "List of AWS Keys", + "description": "Gcp cloud account name validate spec", "type": "object", "required": [ - "kmsKeys" + "credentials", + "bucketName" ], "properties": { - "kmsKeys": { - "type": "array", - "items": { - "description": "AWS KMS Key - gives you centralized control over the cryptographic keys used to protect your data.", - "type": "object", - "required": [ - "keyId", - "keyArn" - ], - "properties": { - "keyAlias": { - "description": "AWS KMS alias", - "type": "string" - }, - "keyArn": { - "description": "AWS KMS arn", - "type": "string" - }, - "keyId": { - "description": "AWS KMS keyid", - "type": "string" - } + "bucketName": { + "description": "Bucket name in the GCP", + "type": "string" + }, + "credentials": { + "description": "Gcp cloud account entity which takes json credentials or reference to the file where credentials are stored", + "type": "object", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", + "type": "string" } } + }, + "projectId": { + "description": "ProjectId in the GCP", + "type": "string" } } } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } } } } }, - "/v1/clouds/aws/regions/{region}/kmskeys/validate": { + "/v1/clouds/gcp/image/container/validate": { "get": { "security": [ { @@ -52333,27 +49387,20 @@ "tags": [ "v1" ], - "summary": "Validate an Aws KMS key for the specified account", - "operationId": "V1AwsKmsKeyValidate", + "summary": "Validates the image with tag", + "operationId": "V1GcpContainerImageValidate", "parameters": [ { "type": "string", - "description": "Region for which AWS KMS key is validated", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", + "description": "image path in the container", + "name": "imagePath", "in": "query", "required": true }, { "type": "string", - "description": "AWS KEY ARN for validation", - "name": "keyArn", + "description": "tag in the GCP container", + "name": "tag", "in": "query", "required": true }, @@ -52377,7 +49424,7 @@ } } }, - "/v1/clouds/aws/regions/{region}/storagetypes": { + "/v1/clouds/gcp/images/{imageName}/url": { "get": { "security": [ { @@ -52390,13 +49437,13 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of AWS storage types", - "operationId": "V1AwsStorageTypes", + "summary": "Returns the Gcp image url for the specified image location", + "operationId": "V1GcpImageUrl", "parameters": [ { "type": "string", - "description": "Region for which AWS storage types are requested", - "name": "region", + "description": "imageName for which GCP image url is requested", + "name": "imageName", "in": "path", "required": true }, @@ -52411,109 +49458,20 @@ "200": { "description": "(empty)", "schema": { + "description": "Gcp image url entity", "type": "object", "properties": { - "storageTypes": { - "description": "List of AWS storage types", - "type": "array", - "items": { - "description": "Cloud cloud Storage type details", - "type": "object", - "properties": { - "cost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "iopsCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "kind": { - "description": "kind of storage type", - "type": "string" - }, - "name": { - "description": "Name of the storage type", - "type": "string" - }, - "throughputCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - } - } - } + "imageFamily": { + "description": "The name of the image family to which this image belongs", + "type": "string" + }, + "imageUrl": { + "description": "Server-defined URL for the resource", + "type": "string" + }, + "name": { + "description": "Name of the resource", + "type": "string" } } } @@ -52521,7 +49479,7 @@ } } }, - "/v1/clouds/aws/regions/{region}/vpcs": { + "/v1/clouds/gcp/projects": { "get": { "security": [ { @@ -52534,19 +49492,12 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of VPCs for the specified account", - "operationId": "V1AwsVpcs", + "summary": "Retrieves a list of GCP projects for the specified account", + "operationId": "V1GcpProjects", "parameters": [ { "type": "string", - "description": "Region for which VPCs are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific AWS cloud account", + "description": "Uid for the specific GCP cloud account", "name": "cloudAccountUid", "in": "query", "required": true @@ -52562,60 +49513,22 @@ "200": { "description": "(empty)", "schema": { - "description": "List of AWS VPCs", + "description": "List of GCP Projects", "type": "object", - "required": [ - "vpcs" - ], "properties": { - "vpcs": { + "projects": { + "description": "List of GCP Projects", "type": "array", "items": { - "description": "A virtual network dedicated to a AWS account", + "description": "GCP project organizes all Google Cloud resources", "type": "object", - "required": [ - "vpcId" - ], "properties": { - "cidrBlock": { + "id": { + "description": "GCP project id", "type": "string" }, "name": { - "description": "Name of the virtual network", - "type": "string" - }, - "subnets": { - "description": "List of subnets associated to a AWS VPC", - "type": "array", - "items": { - "description": "A subnet is a range of IP addresses in a AWS VPC", - "properties": { - "az": { - "description": "Every subnet can only be associated with only one Availability Zone", - "type": "string" - }, - "isPrivate": { - "description": "Is this subnet private", - "type": "boolean" - }, - "mapPublicIpOnLaunch": { - "description": "Indicates whether instances launched in this subnet receive a public IPv4 address.", - "type": "boolean", - "x-omitempty": false - }, - "name": { - "description": "Name of the subnet", - "type": "string" - }, - "subnetId": { - "description": "Id of the subnet", - "type": "string" - } - } - } - }, - "vpcId": { - "description": "Id of the virtual network", + "description": "GCP project name", "type": "string" } } @@ -52627,8 +49540,8 @@ } } }, - "/v1/clouds/aws/s3/validate": { - "post": { + "/v1/clouds/gcp/projects/{project}/regions": { + "get": { "security": [ { "ApiKey": [] @@ -52640,112 +49553,61 @@ "tags": [ "v1" ], - "summary": "Validate the AWS S3 bucket", - "operationId": "V1AwsS3Validate", + "summary": "Retrieves a list of GCP regions", + "operationId": "V1GcpRegions", "parameters": [ { - "description": "AWS S3 bucket credentials", - "name": "awsS3Credential", - "in": "body", - "required": true, + "type": "string", + "description": "Uid for the specific GCP cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Project Name for which GCP zones are requested", + "name": "project", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", "schema": { - "description": "AWS S3 Bucket credentials", + "description": "List of GCP Regions", "type": "object", - "required": [ - "credentials", - "bucket", - "region" - ], "properties": { - "bucket": { - "description": "Name of AWS S3 bucket", - "type": "string" - }, - "credentials": { - "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", - "type": "object", - "properties": { - "accessKey": { - "description": "AWS account access key", - "type": "string" - }, - "credentialType": { - "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", - "type": "string", - "default": "secret", - "enum": [ - "secret", - "sts" - ] - }, - "partition": { - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", - "type": "string", - "default": "aws", - "enum": [ - "aws", - "aws-us-gov" - ] - }, - "policyARNs": { - "description": "List of policy ARNs required in case of credentialType sts.", - "type": "array", - "items": { + "regions": { + "type": "array", + "items": { + "description": "Geographical region made up of zones where you can host your GCP resources", + "type": "object", + "properties": { + "name": { + "description": "GCP region name", + "type": "string" + }, + "status": { + "description": "GCP region status", "type": "string" - } - }, - "secretKey": { - "description": "AWS account secret key", - "type": "string" - }, - "sts": { - "description": "Aws sts credentials", - "type": "object", - "properties": { - "arn": { - "description": "Arn for the aws sts credentials in cloud account", - "type": "string" - }, - "externalId": { - "description": "ExternalId for the aws sts credentials in cloud account", - "type": "string" - } } } } - }, - "folder": { - "description": "Name of the folder in the specified AWS S3 bucket.", - "type": "string" - }, - "region": { - "description": "Name of the available AWS region.", - "type": "string" } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } } } } }, - "/v1/clouds/aws/securitygroups": { + "/v1/clouds/gcp/projects/{project}/regions/{region}/networks": { "get": { "security": [ { @@ -52758,27 +49620,28 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of AWS security groups for the specified account", - "operationId": "V1AwsSecurityGroups", + "summary": "Retrieves a list of GCP networks for the specified account", + "operationId": "V1GcpNetworks", "parameters": [ { "type": "string", - "description": "Uid for the specific AWS cloud account", + "description": "Uid for the specific GCP cloud account", "name": "cloudAccountUid", - "in": "query" + "in": "query", + "required": true }, { "type": "string", - "description": "Region for which security groups are requested", + "description": "Region for which GCP networks are requested", "name": "region", - "in": "query", + "in": "path", "required": true }, { "type": "string", - "description": "Vpc Id for which security groups are requested", - "name": "vpcId", - "in": "query", + "description": "Project Name for which GCP networks are requested", + "name": "project", + "in": "path", "required": true }, { @@ -52792,25 +49655,36 @@ "200": { "description": "(empty)", "schema": { + "description": "List of GCP networks", "type": "object", - "required": [ - "groups" - ], "properties": { - "groups": { + "networks": { "type": "array", "items": { - "description": "Aws security group", + "description": "GCP network enity is a virtual version of a physical network", "type": "object", "properties": { - "groupId": { - "type": "string" - }, - "groupName": { + "name": { + "description": "GCP network name", "type": "string" }, - "ownerId": { - "type": "string" + "subnets": { + "description": "List of GCP subnet", + "type": "array", + "items": { + "description": "Subnets are regional resources, and have IP address ranges associated with them", + "type": "object", + "properties": { + "id": { + "description": "GCP subnet id", + "type": "string" + }, + "name": { + "description": "GCP subnet name", + "type": "string" + } + } + } } } } @@ -52821,7 +49695,7 @@ } } }, - "/v1/clouds/aws/volumeTypes": { + "/v1/clouds/gcp/projects/{project}/regions/{region}/zones": { "get": { "security": [ { @@ -52831,20 +49705,33 @@ "Authorization": [] } ], - "description": "List all AWS Volume Types", "tags": [ "v1" ], - "summary": "Get all AWS Volume Types", - "operationId": "V1AwsVolumeTypesGet", + "summary": "Retrieves a list of GCP zones for the specified account and region", + "operationId": "V1GcpZones", "parameters": [ { "type": "string", - "description": "Specific AWS Region", - "name": "region", + "description": "Uid for the specific GCP cloud account", + "name": "cloudAccountUid", "in": "query", "required": true }, + { + "type": "string", + "description": "Region for which GCP zones are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Project Name for which GCP zones are requested", + "name": "project", + "in": "path", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -52856,29 +49743,17 @@ "200": { "description": "(empty)", "schema": { - "description": "AWS Volume Types", + "description": "List of GCP zones", "type": "object", "properties": { - "volumeTypes": { + "zones": { "type": "array", "items": { - "description": "AWS Volume Type entity", + "description": "A zone is a deployment area for Google Cloud resources within a region", "type": "object", "properties": { - "id": { - "description": "AWS volume type id", - "type": "string" - }, - "maxIops": { - "description": "Iops through put of volume type", - "type": "string" - }, - "maxThroughPut": { - "description": "Max through put of volume type", - "type": "string" - }, "name": { - "description": "AWS Volume Type Name", + "description": "GCP zone name", "type": "string" } } @@ -52890,7 +49765,7 @@ } } }, - "/v1/clouds/azure/account/validate": { + "/v1/clouds/gcp/projects/{project}/validate": { "post": { "security": [ { @@ -52900,62 +49775,30 @@ "Authorization": [] } ], - "description": "Returns no contents if account is valid else error.", "tags": [ "v1" ], - "summary": "Check if Azure account is valid", - "operationId": "V1AzureAccountValidate", + "summary": "Validate the specified GCP project", + "operationId": "V1GcpProjectValidate", "parameters": [ { - "description": "Request payload for Azure cloud account", - "name": "azureCloudAccount", + "type": "string", + "description": "GCP project uid", + "name": "project", + "in": "path", + "required": true + }, + { + "description": "Uid for the specific GCP cloud account", + "name": "cloudAccountUid", "in": "body", "required": true, "schema": { + "description": "Cloud account uid entity", "type": "object", - "required": [ - "tenantId", - "clientId", - "clientSecret" - ], "properties": { - "azureEnvironment": { - "description": "Contains configuration for Azure cloud", - "type": "string", - "default": "AzurePublicCloud", - "enum": [ - "AzureChinaCloud", - "AzurePublicCloud", - "AzureUSGovernment", - "AzureUSGovernmentCloud" - ] - }, - "clientId": { - "description": "Client ID(Directory ID) is a unique identifier generated by Azure AD that is tied to an application", - "type": "string" - }, - "clientSecret": { - "description": "ClientSecret is the secret associated with Client", - "type": "string" - }, - "settings": { - "description": "Cloud account settings", - "type": "object", - "properties": { - "disablePropertiesRequest": { - "description": "Will disable certain properties request to cloud and the input is collected directly from the user", - "type": "boolean", - "x-omitempty": false - } - } - }, - "tenantId": { - "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", - "type": "string" - }, - "tenantName": { - "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "uid": { + "description": "Cloud account uid", "type": "string" } } @@ -52981,7 +49824,7 @@ } } }, - "/v1/clouds/azure/groups": { + "/v1/clouds/gcp/projects/{project}/zones": { "get": { "security": [ { @@ -52994,14 +49837,22 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Azure groups", - "operationId": "V1AzureGroups", + "summary": "Retrieves a list of GCP zones for the specified account", + "operationId": "V1GcpAvailabilityZones", "parameters": [ { "type": "string", - "description": "Uid for the specific Azure cloud account", + "description": "Uid for the specific GCP cloud account", "name": "cloudAccountUid", - "in": "query" + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Project Name for which GCP zones are requested", + "name": "project", + "in": "path", + "required": true }, { "type": "string", @@ -53014,24 +49865,17 @@ "200": { "description": "(empty)", "schema": { - "description": "List of Azure groups", + "description": "List of GCP zones", "type": "object", - "required": [ - "groups" - ], "properties": { - "groups": { + "zones": { "type": "array", "items": { - "description": "Azure group entity", + "description": "A zone is a deployment area for Google Cloud resources within a region", "type": "object", "properties": { - "id": { - "description": "Azure group id", - "type": "string" - }, "name": { - "description": "Azure group name", + "description": "GCP zone name", "type": "string" } } @@ -53043,8 +49887,8 @@ } } }, - "/v1/clouds/azure/regions": { - "get": { + "/v1/clouds/gcp/properties/validate": { + "post": { "security": [ { "ApiKey": [] @@ -53056,20 +49900,35 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Azure regions", - "operationId": "V1AzureRegions", + "summary": "Validate GCP properties", + "operationId": "V1GcpPropertiesValidate", "parameters": [ { - "type": "string", - "description": "Uid for the specific Azure cloud account", - "name": "cloudAccountUid", - "in": "query" - }, - { - "type": "string", - "description": "SubscriptionId for which resources is requested", - "name": "subscriptionId", - "in": "query" + "description": "Request payload for GCP properties validate spec", + "name": "properties", + "in": "body", + "required": true, + "schema": { + "description": "Gcp properties validate spec", + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "cloudAccountUid": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "region": { + "type": "string" + } + } + } }, { "type": "string", @@ -53079,53 +49938,19 @@ } ], "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of Azure regions", - "type": "object", - "required": [ - "regions" - ], - "properties": { - "regions": { - "type": "array", - "items": { - "description": "Azure region entity", - "type": "object", - "properties": { - "displayName": { - "description": "Azure region displayname", - "type": "string" - }, - "name": { - "description": "Azure region name", - "type": "string" - }, - "zones": { - "description": "List of zones associated to a particular Azure region", - "type": "array", - "items": { - "description": "Azure availability zone", - "type": "object", - "properties": { - "name": { - "description": "Azure availability zone name", - "type": "string" - } - } - } - } - } - } - } + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" } } } } } }, - "/v1/clouds/azure/regions/{region}/instancetypes": { + "/v1/clouds/gcp/regions/{region}/instancetypes": { "get": { "security": [ { @@ -53138,12 +49963,12 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Azure instance types", - "operationId": "V1AzureInstanceTypes", + "summary": "Retrieves a list of GCP instance types", + "operationId": "V1GcpInstanceTypes", "parameters": [ { "type": "string", - "description": "Region for which Azure instance types are requested", + "description": "Region for which GCP instance types are requested", "name": "region", "in": "path", "required": true @@ -53180,10 +50005,11 @@ "200": { "description": "(empty)", "schema": { - "description": "List of Azure instance types", + "description": "Retrieves a list of GCP instance types", "type": "object", "properties": { "instanceTypes": { + "description": "List of GCP instance types", "type": "array", "items": { "description": "Cloud Instance type details", @@ -53280,7 +50106,7 @@ } } }, - "/v1/clouds/azure/regions/{region}/storagetypes": { + "/v1/clouds/gcp/regions/{region}/storagetypes": { "get": { "security": [ { @@ -53293,12 +50119,12 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Azure storage types", - "operationId": "V1AzureStorageTypes", + "summary": "Retrieves a list of Gcp storage types", + "operationId": "V1GcpStorageTypes", "parameters": [ { "type": "string", - "description": "Region for which Azure storage types are requested", + "description": "Region for which GCP storage types are requested", "name": "region", "in": "path", "required": true @@ -53314,7 +50140,7 @@ "200": { "description": "(empty)", "schema": { - "description": "List of Azure storage types", + "description": "List of GCP storage types", "type": "object", "properties": { "storageTypes": { @@ -53424,8 +50250,8 @@ } } }, - "/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/aksClusters/name/validate": { - "get": { + "/v1/clouds/maas/account/validate": { + "post": { "security": [ { "ApiKey": [] @@ -53434,47 +50260,41 @@ "Authorization": [] } ], - "description": "Returns no contents if Azure cluster name is valid else error.", + "description": "Returns no contents if account is valid else error.", "tags": [ "v1" ], - "summary": "Check if Azure cluster name is valid", - "operationId": "V1AzureClusterNameValidate", + "summary": "Check if Maas account is valid", + "operationId": "V1MaasAccountValidate", "parameters": [ { - "type": "string", - "description": "Uid for the specific Azure cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "cluster name to be validated", - "name": "name", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "region in which cluster name is to be validated", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "subscriptionId in which cluster name is to be validated", - "name": "subscriptionId", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "resourceGroup in which cluster name is to be validated", - "name": "resourceGroup", - "in": "query", - "required": true + "description": "Request payload for Maas cloud account", + "name": "account", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "apiKey", + "apiEndpoint" + ], + "properties": { + "apiEndpoint": { + "type": "string" + }, + "apiKey": { + "type": "string" + }, + "preferredSubnets": { + "description": "list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"", + "type": "array", + "items": { + "type": "string", + "default": "" + } + } + } + } }, { "type": "string", @@ -53496,7 +50316,7 @@ } } }, - "/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/networks": { + "/v1/clouds/maas/azs": { "get": { "security": [ { @@ -53509,34 +50329,13 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Azure virtual network list for the sepcified account", - "operationId": "V1AzureVirtualNetworkList", + "summary": "Retrieves a list of Maas zones for a particular account uid", + "operationId": "V1MaasZonesGet", "parameters": [ { "type": "string", - "description": "Uid for the specific Azure cloud account", + "description": "Uid for the specific Maas cloud account", "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Region for which Azure virtual networks are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for which Azure virtual networks are requested", - "name": "subscriptionId", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Resource group for which Azure virtual networks are requested", - "name": "resourceGroup", "in": "query" }, { @@ -53550,57 +50349,25 @@ "200": { "description": "(empty)", "schema": { - "description": "List of Azure virtual network", + "description": "List of Maas zones", "type": "object", + "required": [ + "items" + ], "properties": { - "virtualNetworkList": { + "items": { "type": "array", + "uniqueItems": true, "items": { - "description": "Azure virtual network is the fundamental building block for your private network in Azure.", + "description": "Maas zone", "type": "object", "properties": { - "addressSpaces": { - "description": "Location of the virtual network", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "id": { - "description": "The ID of the resource group", - "type": "string" - }, - "location": { - "description": "Location of the virtual network", + "description": { + "description": "Description of Maas domain", "type": "string" }, "name": { - "description": "Name of the virtual network", - "type": "string" - }, - "subnets": { - "description": "List of subnets associated with Azure VPC", - "type": "array", - "items": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - } - }, - "type": { - "description": "Type of the virtual network", + "description": "Name of Maas zone", "type": "string" } } @@ -53612,7 +50379,7 @@ } } }, - "/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/resourceGroups": { + "/v1/clouds/maas/domains": { "get": { "security": [ { @@ -53625,29 +50392,14 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Azure resource group for the specified account", - "operationId": "V1AzureResourceGroupList", + "summary": "Retrieves a list of Maas domains", + "operationId": "V1MaasDomainsGet", "parameters": [ { "type": "string", - "description": "Uid for the specific Azure cloud account", + "description": "Uid for the specific Maas cloud account", "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Region for which Azure resource group are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for which Azure resource group are requested", - "name": "subscriptionId", - "in": "path", - "required": true + "in": "query" }, { "type": "string", @@ -53660,25 +50412,21 @@ "200": { "description": "(empty)", "schema": { - "description": "List of Azure resource group", + "description": "List of Maas domains", "type": "object", + "required": [ + "items" + ], "properties": { - "resourceGroupList": { + "items": { "type": "array", + "uniqueItems": true, "items": { - "description": "Azure resource Group is a container that holds related resources for an Azure solution", + "description": "Maas domain", "type": "object", "properties": { - "id": { - "description": "The ID of the resource group", - "type": "string" - }, - "location": { - "description": "The location of the resource group. It cannot be changed after the resource group has been created", - "type": "string" - }, "name": { - "description": "The type of the resource group", + "description": "Name of Maas domain", "type": "string" } } @@ -53690,7 +50438,7 @@ } } }, - "/v1/clouds/azure/regions/{region}/zones": { + "/v1/clouds/maas/resourcePools": { "get": { "security": [ { @@ -53703,28 +50451,15 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Azure zones for the specified region", - "operationId": "V1AzureZones", + "summary": "Retrieves a list of Maas pools for a particular account uid", + "operationId": "V1MaasPoolsGet", "parameters": [ { "type": "string", - "description": "Region for which Azure zones are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific Azure cloud account", + "description": "Uid for the specific Maas cloud account", "name": "cloudAccountUid", "in": "query" }, - { - "type": "string", - "description": "subscriptionId of azure account", - "name": "subscriptionId", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -53736,17 +50471,25 @@ "200": { "description": "(empty)", "schema": { - "description": "List of Azure zone", + "description": "List of Maas pools", "type": "object", + "required": [ + "items" + ], "properties": { - "zoneList": { + "items": { "type": "array", + "uniqueItems": true, "items": { - "description": "Azure availability zone entity", + "description": "Maas pool", "type": "object", "properties": { - "id": { - "description": "Azure availability zone id", + "description": { + "description": "Description of Maas domain", + "type": "string" + }, + "name": { + "description": "Name of Maas pool", "type": "string" } } @@ -53758,7 +50501,7 @@ } } }, - "/v1/clouds/azure/resourceGroups/{resourceGroup}/privateDnsZones": { + "/v1/clouds/maas/subnets": { "get": { "security": [ { @@ -53768,33 +50511,17 @@ "Authorization": [] } ], - "description": "Returns Azure private DNS zones", "tags": [ "v1" ], - "summary": "Get Azure private DNS zones for the given resource group", - "operationId": "V1AzurePrivateDnsZones", + "summary": "Retrieves a list of Maas subnets for a particular account uid", + "operationId": "V1MaasSubnetsGet", "parameters": [ { "type": "string", - "description": "resourceGroup for which Azure private dns zones are requested", - "name": "resourceGroup", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific Azure cloud account", + "description": "Uid for the specific Maas cloud account", "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "subscriptionId for which Azure private dns zones are requested", - "name": "subscriptionId", - "in": "query", - "required": true + "in": "query" }, { "type": "string", @@ -53807,26 +50534,48 @@ "200": { "description": "(empty)", "schema": { - "description": "List of Azure storage accounts", + "description": "List of Maas subnets", "type": "object", + "required": [ + "items" + ], "properties": { - "privateDnsZones": { + "items": { "type": "array", + "uniqueItems": true, "items": { - "description": "Azure Private DNS zone entity", + "description": "Maas subnet", "type": "object", "properties": { "id": { - "description": "Fully qualified resource Id for the resource", - "type": "string" + "description": "Id of Maas subnet", + "type": "integer" }, - "location": { - "description": "The Azure Region where the resource lives", + "name": { + "description": "Name of Maas subnet", "type": "string" }, - "name": { - "description": "The name of the resource", + "space": { + "description": "Space associated with Maas subnet", "type": "string" + }, + "vlans": { + "description": "Maas vlan entity", + "type": "object", + "properties": { + "fabric": { + "description": "Fabric associated with Maas Vlan", + "type": "string" + }, + "id": { + "description": "Id of Maas Vlan", + "type": "integer" + }, + "name": { + "description": "Name of Maas Vlan", + "type": "string" + } + } } } } @@ -53837,7 +50586,7 @@ } } }, - "/v1/clouds/azure/resourceGroups/{resourceGroup}/storageAccounts": { + "/v1/clouds/maas/tags": { "get": { "security": [ { @@ -53847,33 +50596,18 @@ "Authorization": [] } ], - "description": "Returns Azure storage accounts.", "tags": [ "v1" ], - "summary": "Get Azure storage accounts", - "operationId": "V1AzureStorageAccounts", + "summary": "Retrieves a list of Maas tags for a particular account uid", + "operationId": "V1MaasTagsGet", "parameters": [ { "type": "string", - "description": "resourceGroup for which Azure storage accounts are requested", - "name": "resourceGroup", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific Azure cloud account", + "description": "Uid for the specific Maas cloud account", "name": "cloudAccountUid", "in": "query" }, - { - "type": "string", - "description": "subscriptionId for which Azure storage accounts are requested", - "name": "subscriptionId", - "in": "query", - "required": true - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -53885,29 +50619,37 @@ "200": { "description": "(empty)", "schema": { - "description": "List of Azure storage accounts", + "description": "List of Maas tags", "type": "object", + "required": [ + "items" + ], "properties": { - "accounts": { + "items": { "type": "array", + "uniqueItems": true, "items": { - "description": "Azure storage account provides a unique namespace for your Azure resources", + "description": "Maas tag", "type": "object", "properties": { - "id": { - "description": "Fully qualified resource ID for the resource", + "comment": { + "description": "Comment on Maas tag", "type": "string" }, - "kind": { - "description": "The kind of the resource", + "definition": { + "description": "Definition of Maas tag", "type": "string" }, - "location": { - "description": "The geo-location where the resource lives", + "kernelOpts": { + "description": "Kernel Opts on Maas tag", "type": "string" }, "name": { - "description": "The name of the resource", + "description": "Name of Maas tag", + "type": "string" + }, + "resourceUri": { + "description": "Description of Maas tag", "type": "string" } } @@ -53919,8 +50661,8 @@ } } }, - "/v1/clouds/azure/resourceGroups/{resourceGroup}/storageAccounts/{storageAccountName}/containers": { - "get": { + "/v1/clouds/openstack/account/validate": { + "post": { "security": [ { "ApiKey": [] @@ -53929,39 +50671,121 @@ "Authorization": [] } ], - "description": "Returns Azure storage containers for the given account.", + "description": "Returns no contents if account is valid else error.", "tags": [ "v1" ], - "summary": "Get Azure storage containers", - "operationId": "V1AzureStorageContainers", + "summary": "Check if OpenStack account is valid", + "operationId": "V1OpenStackAccountValidate", "parameters": [ + { + "description": "Request payload for OpenStack cloud account", + "name": "openstackCloudAccount", + "in": "body", + "required": true, + "schema": { + "description": "auth-url,project,username,password,domain,cacert etc", + "type": "object", + "required": [ + "identityEndpoint", + "username", + "password" + ], + "properties": { + "caCert": { + "description": "Ca cert for OpenStack", + "type": "string" + }, + "defaultDomain": { + "description": "Default Domain name", + "type": "string" + }, + "defaultProject": { + "description": "Default Project name", + "type": "string" + }, + "identityEndpoint": { + "description": "Identity endpoint for OpenStack", + "type": "string" + }, + "insecure": { + "description": "For self signed certs in IdentityEndpoint", + "type": "boolean" + }, + "parentRegion": { + "description": "Parent region of OpenStack", + "type": "string" + }, + "password": { + "description": "Password of OpenStack account", + "type": "string" + }, + "username": { + "description": "Username of OpenStack account", + "type": "string" + } + } + } + }, { "type": "string", - "description": "resourceGroup for which Azure storage accounts are requested", - "name": "resourceGroup", - "in": "path", - "required": true + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/clouds/openstack/azs": { + "get": { + "security": [ + { + "ApiKey": [] }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of OpenStack azs for a particular account uid", + "operationId": "V1OpenStackAzsGet", + "parameters": [ { "type": "string", - "description": "Uid for the specific Azure cloud account", + "description": "Uid for the specific OpenStack cloud account", "name": "cloudAccountUid", "in": "query" }, { "type": "string", - "description": "subscriptionId for which Azure storage accounts are requested", - "name": "subscriptionId", - "in": "query", - "required": true + "description": "project for which OpenStack azs are requested", + "name": "project", + "in": "query" }, { "type": "string", - "description": "resourceGroup for which Azure storage accounts are requested", - "name": "storageAccountName", - "in": "path", - "required": true + "description": "region for which OpenStack azs are requested", + "name": "region", + "in": "query" + }, + { + "type": "string", + "description": "domain for which OpenStack azs are requested", + "name": "domain", + "in": "query" }, { "type": "string", @@ -53974,25 +50798,21 @@ "200": { "description": "(empty)", "schema": { - "description": "List of Azure storage containers", + "description": "List of OpenStack azs", "type": "object", + "required": [ + "azs" + ], "properties": { - "containers": { + "azs": { "type": "array", + "uniqueItems": true, "items": { - "description": "Azure storage container organizes a set of blobs, similar to a directory in a file system", + "description": "OpenStack az entity", "type": "object", "properties": { - "id": { - "description": "Fully qualified resource ID for the resource.", - "type": "string" - }, "name": { - "description": "The name of the resource", - "type": "string" - }, - "type": { - "description": "The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\"", + "description": "Name of OpenStack az", "type": "string" } } @@ -54004,7 +50824,7 @@ } } }, - "/v1/clouds/azure/storageaccounttypes": { + "/v1/clouds/openstack/flavors": { "get": { "security": [ { @@ -54014,19 +50834,36 @@ "Authorization": [] } ], - "description": "Returns Azure storage account types.", "tags": [ "v1" ], - "summary": "Get Azure storage account types", - "operationId": "V1AzureStorageAccountTypes", + "summary": "Returns the OpenStack flavors", + "operationId": "V1OpenStackFlavorsGet", "parameters": [ { "type": "string", - "description": "Region for which Azure storage account types are requested", + "description": "Uid for the specific OpenStack cloud account", + "name": "cloudAccountUid", + "in": "query" + }, + { + "type": "string", + "description": "project for which OpenStack flavors are requested", + "name": "project", + "in": "query" + }, + { + "type": "string", + "description": "region for which OpenStack flavors are requested", "name": "region", "in": "query" }, + { + "type": "string", + "description": "domain for which OpenStack flavors are requested", + "name": "domain", + "in": "query" + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -54038,22 +50875,42 @@ "200": { "description": "(empty)", "schema": { - "description": "Azure Storage Account Entity", + "description": "List of OpenStack flavours", "type": "object", + "required": [ + "items" + ], "properties": { - "storageAccountTypes": { + "items": { "type": "array", + "uniqueItems": true, "items": { - "description": "Azure storage account entity", + "description": "OpenStack flavor entity. Flavor represent (virtual) hardware configurations for server resources", "type": "object", "properties": { + "disk": { + "description": "Disk is the amount of root disk, measured in GB", + "type": "integer" + }, + "ephemeral": { + "description": "Ephemeral is the amount of ephemeral disk space, measured in GB", + "type": "integer" + }, "id": { - "description": "Azure storage account id", + "description": "ID is the flavor's unique ID", "type": "string" }, + "memory": { + "description": "Amount of memory, measured in MB", + "type": "integer" + }, "name": { - "description": "Azure storage account name", + "description": "Name is the name of the flavor", "type": "string" + }, + "vcpus": { + "description": "VCPUs indicates how many (virtual) CPUs are available for this flavor", + "type": "integer" } } } @@ -54064,7 +50921,7 @@ } } }, - "/v1/clouds/azure/subscriptions": { + "/v1/clouds/openstack/keypairs": { "get": { "security": [ { @@ -54074,19 +50931,35 @@ "Authorization": [] } ], - "description": "Returns list of Azure subscription list.", "tags": [ "v1" ], - "summary": "Retrieves a list of Azure subscription list for the specified account", - "operationId": "V1AzureSubscriptionList", + "summary": "Returns the OpenStack keypair", + "operationId": "V1OpenStackKeypairsGet", "parameters": [ { "type": "string", - "description": "Uid for the specific Azure cloud account", + "description": "Uid for the specific OpenStack cloud account", "name": "cloudAccountUid", - "in": "query", - "required": true + "in": "query" + }, + { + "type": "string", + "description": "project for which OpenStack keypairs are requested", + "name": "project", + "in": "query" + }, + { + "type": "string", + "description": "region for which OpenStack keypairs are requested", + "name": "region", + "in": "query" + }, + { + "type": "string", + "description": "domain for which OpenStack keypairs are requested", + "name": "domain", + "in": "query" }, { "type": "string", @@ -54099,29 +50972,25 @@ "200": { "description": "(empty)", "schema": { - "description": "List of Azure subscription", + "description": "List of OpenStack keypairs", "type": "object", + "required": [ + "items" + ], "properties": { - "subscriptionList": { + "items": { "type": "array", + "uniqueItems": true, "items": { - "description": "Azure Subscription Type", + "description": "OpenStack keypair. KeyPair is an SSH key known to the OpenStack Cloud that is available to be injected into servers", "type": "object", "properties": { - "authorizationSource": { - "description": "The authorization source of the request. Valid values are one or more combinations of Legacy, RoleBased, Bypassed, Direct and Management", - "type": "string" - }, - "displayName": { - "description": "The subscription display name", - "type": "string" - }, - "state": { - "description": "The subscription state. Possible values are Enabled, Warned, PastDue, Disabled, and Deleted.", + "name": { + "description": "Name is used to refer to this keypair from other services within this region", "type": "string" }, - "subscriptionId": { - "description": "The subscription ID", + "publicKey": { + "description": "PublicKey is the public key from this pair, in OpenSSH format", "type": "string" } } @@ -54133,7 +51002,7 @@ } } }, - "/v1/clouds/azure/vhds/{vhd}/url": { + "/v1/clouds/openstack/networks": { "get": { "security": [ { @@ -54146,60 +51015,33 @@ "tags": [ "v1" ], - "summary": "Returns the Azure vhd url for the specified vhd location", - "operationId": "V1AzureVhdUrl", + "summary": "Returns the OpenStack networks", + "operationId": "V1OpenStackNetworksGet", "parameters": [ { "type": "string", - "description": "vhd location for which Azure vhd url is requested", - "name": "vhd", - "in": "path", - "required": true + "description": "Uid for the specific OpenStack cloud account", + "name": "cloudAccountUid", + "in": "query" }, { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "Azure vhd url entity", - "type": "object", - "properties": { - "name": { - "description": "The name of the resource", - "type": "string" - }, - "url": { - "description": "The url of the Azure Vhd", - "type": "string" - } - } - } - } - } - } - }, - "/v1/clouds/cloudTypes": { - "get": { - "security": [ + "description": "project for which OpenStack networks are requested", + "name": "project", + "in": "query" + }, { - "ApiKey": [] + "type": "string", + "description": "region for which OpenStack networks are requested", + "name": "region", + "in": "query" }, { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the custom cloud types", - "operationId": "V1CustomCloudTypesGet", - "parameters": [ + "type": "string", + "description": "domain for which OpenStack networks are requested", + "name": "domain", + "in": "query" + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -54211,55 +51053,53 @@ "200": { "description": "(empty)", "schema": { - "description": "Custom cloudType content response", + "description": "List of OpenStack networks", "type": "object", + "required": [ + "items" + ], "properties": { - "cloudTypes": { - "description": "Array of custom cloud types", + "items": { "type": "array", + "uniqueItems": true, "items": { + "description": "OpenStack network", "type": "object", "properties": { - "cloudCategory": { - "description": "Cloud category description", - "type": "string", - "default": "cloud", - "enum": [ - "datacenter", - "cloud", - "edge" - ] - }, - "cloudFamily": { - "description": "Cloud grouping as family", - "type": "string" - }, - "displayName": { - "description": "Custom cloudtype displayName", + "description": { + "description": "Description of OpenStack network", "type": "string" }, - "isCustom": { - "description": "If it is a custom cloudtype", - "type": "boolean", - "x-omitempty": false - }, - "isManaged": { - "description": "If custom cloudtype is managed", - "type": "boolean", - "x-omitempty": false - }, - "isVertex": { - "description": "If cloud is support for Vertex env", - "type": "boolean", - "x-omitempty": false - }, - "logo": { - "description": "Custom cloudtype logo", + "id": { + "description": "Id of OpenStack network", "type": "string" }, "name": { - "description": "Custom cloudtype name", + "description": "Name of OpenStack network", "type": "string" + }, + "subnets": { + "description": "Subnets associated with OpenStack network", + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack subnet entity", + "type": "object", + "properties": { + "description": { + "description": "Description for the network", + "type": "string" + }, + "id": { + "description": "UUID for the network", + "type": "string" + }, + "name": { + "description": "Human-readable name for the network. Might not be unique", + "type": "string" + } + } + } } } } @@ -54270,8 +51110,8 @@ } } }, - "/v1/clouds/cloudTypes/register": { - "post": { + "/v1/clouds/openstack/projects": { + "get": { "security": [ { "ApiKey": [] @@ -54283,71 +51123,14 @@ "tags": [ "v1" ], - "summary": "Registers the custom cloud type", - "operationId": "V1CustomCloudTypeRegister", + "summary": "Returns the OpenStack projects", + "operationId": "V1OpenStackProjectsGet", "parameters": [ { - "description": "Request payload to register custom cloud type", - "name": "body", - "in": "body", - "schema": { - "description": "Custom cloud request entity", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - }, - "spec": { - "description": "Custom cloud request entity spec", - "type": "object", - "properties": { - "cloudCategory": { - "description": "Cloud category description", - "type": "string", - "default": "cloud", - "enum": [ - "datacenter", - "cloud", - "edge" - ] - }, - "displayName": { - "description": "Custom cloud displayName", - "type": "string" - }, - "isControlPlaneManaged": { - "description": "If the custom cloud is a managed cluster", - "type": "boolean" - }, - "logo": { - "description": "Custom cloud logo", - "type": "string" - } - } - } - } - } + "type": "string", + "description": "Uid for the specific OpenStack cloud account", + "name": "cloudAccountUid", + "in": "query" }, { "type": "string", @@ -54357,31 +51140,53 @@ } ], "responses": { - "201": { - "description": "Created successfully", + "200": { + "description": "(empty)", "schema": { + "description": "Array of OpenStack projects", "type": "object", "required": [ - "uid" + "items" ], "properties": { - "uid": { - "type": "string" + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Project represents an OpenStack Identity Project", + "type": "object", + "properties": { + "description": { + "description": "Description is the description of the project", + "type": "string" + }, + "domainId": { + "description": "DomainID is the domain ID the project belongs to", + "type": "string" + }, + "id": { + "description": "ID is the unique ID of the project", + "type": "string" + }, + "name": { + "description": "Name is the name of the project", + "type": "string" + }, + "parentProjectId": { + "description": "ParentID is the parent_id of the project", + "type": "string" + } + } + } } } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } } } } } }, - "/v1/clouds/cloudTypes/{cloudType}": { - "delete": { + "/v1/clouds/openstack/regions": { + "get": { "security": [ { "ApiKey": [] @@ -54393,46 +51198,15 @@ "tags": [ "v1" ], - "summary": "Deletes the custom cloud type", - "operationId": "V1CustomCloudTypesDelete", + "summary": "Returns the OpenStack regions", + "operationId": "V1OpenStackRegionsGet", "parameters": [ { "type": "string", - "description": "Unique cloud type", - "name": "cloudType", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" - } - } - } - }, - "/v1/clouds/cloudTypes/{cloudType}/cloudAccountKeys": { - "get": { - "security": [ - { - "ApiKey": [] + "description": "Uid for the specific OpenStack cloud account", + "name": "cloudAccountUid", + "in": "query" }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns valid keys for the cloud account used for custom cloud type", - "operationId": "V1CustomCloudTypeCloudAccountKeysGet", - "parameters": [ { "type": "string", "description": "Scope the request to the specified project uid", @@ -54444,22 +51218,67 @@ "200": { "description": "(empty)", "schema": { - "description": "Custom cloudType custom cloud account keys", + "description": "List of OpenStack regions and domains", "type": "object", + "required": [ + "regions", + "domains" + ], "properties": { - "keys": { - "description": "Array of custom cloud type cloud account keys", + "domains": { + "description": "List of OpenStack domains", "type": "array", + "uniqueItems": true, "items": { - "type": "string" + "description": "OpenStack domain. A Domain is a collection of projects, users, and roles", + "type": "object", + "properties": { + "description": { + "description": "Description is the description of the Domain", + "type": "string" + }, + "id": { + "description": "ID is the unique ID of the domain", + "type": "string" + }, + "name": { + "description": "Name is the name of the domain", + "type": "string" + } + } + } + }, + "regions": { + "description": "List of OpenStack regions", + "type": "array", + "uniqueItems": true, + "items": { + "description": "OpenStack region entity", + "type": "object", + "properties": { + "description": { + "description": "Description of OpenStack region", + "type": "string" + }, + "id": { + "description": "Id of OpenStack region", + "type": "string" + }, + "parentRegionId": { + "description": "Parent region id of OpenStack region", + "type": "string" + } + } } } } } } } - }, - "put": { + } + }, + "/v1/clouds/tencent/account/validate": { + "post": { "security": [ { "ApiKey": [] @@ -54471,24 +51290,28 @@ "tags": [ "v1" ], - "summary": "Update the custom cloud type cloud account keys", - "operationId": "V1CustomCloudTypeCloudAccountKeysUpdate", + "summary": "Validate the specified Tencent account credentials", + "operationId": "V1TencentAccountValidate", "parameters": [ { - "description": "Request payload for custom cloud meta entity", - "name": "body", + "description": "Request payload to validate tencent cloud account", + "name": "account", "in": "body", "required": true, "schema": { - "description": "Custom cloudType custom cloud account keys", "type": "object", + "required": [ + "secretId", + "secretKey" + ], "properties": { - "keys": { - "description": "Array of custom cloud type cloud account keys", - "type": "array", - "items": { - "type": "string" - } + "secretId": { + "description": "Tencent api secretID", + "type": "string" + }, + "secretKey": { + "description": "Tencent api secret key", + "type": "string" } } } @@ -54511,18 +51334,9 @@ } } } - }, - "parameters": [ - { - "type": "string", - "description": "Unique cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] + } }, - "/v1/clouds/cloudTypes/{cloudType}/content/bootstrap": { + "/v1/clouds/tencent/regions": { "get": { "security": [ { @@ -54535,9 +51349,16 @@ "tags": [ "v1" ], - "summary": "Returns the custom cloud type bootstrap", - "operationId": "V1CustomCloudTypeBootstrapGet", + "summary": "Retrieves a list of Tencent regions for the specified account", + "operationId": "V1TencentRegions", "parameters": [ + { + "type": "string", + "description": "Uid for the specific Tencent cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -54549,19 +51370,38 @@ "200": { "description": "(empty)", "schema": { - "description": "Custom cloudType content response", + "description": "List of tencent regions", "type": "object", + "required": [ + "regions" + ], "properties": { - "yaml": { - "description": "custom cloud type content", - "type": "string" + "regions": { + "description": "Tencent regions entity", + "type": "array", + "items": { + "description": "Tencent region entity", + "type": "object", + "properties": { + "name": { + "description": "Name of tencent region", + "type": "string" + }, + "state": { + "description": "State of tencent region", + "type": "string" + } + } + } } } } } } - }, - "put": { + } + }, + "/v1/clouds/tencent/regions/{region}/instancetypes": { + "get": { "security": [ { "ApiKey": [] @@ -54570,19 +51410,46 @@ "Authorization": [] } ], - "consumes": [ - "multipart/form-data" - ], "tags": [ "v1" ], - "summary": "Update the custom cloud type bootstrap", - "operationId": "V1CustomCloudTypeBootstrapUpdate", + "summary": "Retrieves a list of Tencent instance types", + "operationId": "V1TencentInstanceTypes", "parameters": [ { - "type": "file", - "name": "fileName", - "in": "formData" + "type": "string", + "description": "Region for which tencent instances are listed", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "number", + "format": "double", + "description": "Filter for instances having cpu greater than or equal", + "name": "cpuGtEq", + "in": "query" + }, + { + "type": "number", + "format": "double", + "description": "Filter for instances having memory greater than or equal", + "name": "memoryGtEq", + "in": "query" + }, + { + "type": "number", + "format": "double", + "description": "Filter for instances having gpu greater than or equal", + "name": "gpuGtEq", + "in": "query" + }, + { + "type": "string", + "description": "Uid for the specific tencent cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true }, { "type": "string", @@ -54592,18 +51459,111 @@ } ], "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" + "200": { + "description": "(empty)", + "schema": { + "description": "List of Tencent instance types", + "type": "object", + "properties": { + "instanceTypes": { + "type": "array", + "items": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + } } } } } - }, - "delete": { + } + }, + "/v1/clouds/tencent/regions/{region}/keypairs": { + "get": { "security": [ { "ApiKey": [] @@ -54615,9 +51575,23 @@ "tags": [ "v1" ], - "summary": "Delete the custom cloud type bootstrap", - "operationId": "V1CustomCloudTypeBootstrapDelete", + "summary": "Retrieves a list of keypairs for the specified account", + "operationId": "V1TencentKeypairs", "parameters": [ + { + "type": "string", + "description": "Region for which keypairs are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific Tencent cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -54626,22 +51600,40 @@ } ], "responses": { - "204": { - "description": "The resource was deleted successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "List of Tencent keypairs", + "type": "object", + "properties": { + "keypairs": { + "type": "array", + "items": { + "description": "Tencent Keypair entity", + "type": "object", + "properties": { + "id": { + "description": "Tencent keypair id", + "type": "string" + }, + "name": { + "description": "Tencent keypair name", + "type": "string" + }, + "publickey": { + "description": "Tencent public key", + "type": "string" + } + } + } + } + } + } } } - }, - "parameters": [ - { - "type": "string", - "description": "Unique cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] + } }, - "/v1/clouds/cloudTypes/{cloudType}/content/cloudProvider": { + "/v1/clouds/tencent/regions/{region}/securitygroups": { "get": { "security": [ { @@ -54654,9 +51646,23 @@ "tags": [ "v1" ], - "summary": "Returns the custom cloud type cloud provider", - "operationId": "V1CustomCloudTypeCloudProviderGet", + "summary": "Retrieves a list of secutity groups for the specified account", + "operationId": "V1TencentSecurityGroups", "parameters": [ + { + "type": "string", + "description": "Region for which security groups are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific Tencent cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -54668,19 +51674,42 @@ "200": { "description": "(empty)", "schema": { - "description": "Custom cloudType content response", + "description": "List of Tencent security groups", "type": "object", "properties": { - "yaml": { - "description": "custom cloud type content", - "type": "string" + "groups": { + "type": "array", + "items": { + "description": "Tencent Security Group. A security group is a virtual firewall that features stateful data packet filtering", + "type": "object", + "properties": { + "id": { + "description": "Tencent security group id", + "type": "string" + }, + "isDefault": { + "description": "Whether it is the default security group, the default security group does not support deletion.", + "type": "boolean" + }, + "name": { + "description": "Tencent security group name", + "type": "string" + }, + "projectId": { + "description": "Tencent security group associated to a project", + "type": "string" + } + } + } } } } } } - }, - "put": { + } + }, + "/v1/clouds/tencent/regions/{region}/storagetypes": { + "get": { "security": [ { "ApiKey": [] @@ -54689,19 +51718,32 @@ "Authorization": [] } ], - "consumes": [ - "multipart/form-data" - ], "tags": [ "v1" ], - "summary": "Update the custom cloud type cloud provider", - "operationId": "V1CustomCloudTypeCloudProviderUpdate", + "summary": "Retrieves a list of Tencent storage types", + "operationId": "V1TencentStorageTypes", "parameters": [ { - "type": "file", - "name": "fileName", - "in": "formData" + "type": "string", + "description": "Region for which tencent storages are listed", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific tencent cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Zone for which tencent storages are listed", + "name": "zone", + "in": "query", + "required": true }, { "type": "string", @@ -54711,18 +51753,121 @@ } ], "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" + "200": { + "description": "(empty)", + "schema": { + "description": "List of Tencent storage types", + "type": "object", + "properties": { + "storageTypes": { + "type": "array", + "items": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + } + } } } } } - }, - "delete": { + } + }, + "/v1/clouds/tencent/regions/{region}/vpcs": { + "get": { "security": [ { "ApiKey": [] @@ -54734,9 +51879,23 @@ "tags": [ "v1" ], - "summary": "Delete the custom cloud type cloud provider", - "operationId": "V1CustomCloudTypeCloudProviderDelete", + "summary": "Retrieves a list of VPCs for the specified account", + "operationId": "V1TencentVpcs", "parameters": [ + { + "type": "string", + "description": "Region for which VPCs are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific Tencent cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -54745,22 +51904,71 @@ } ], "responses": { - "204": { - "description": "The resource was deleted successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "List of Tencent VPCs", + "type": "object", + "required": [ + "vpcs" + ], + "properties": { + "vpcs": { + "type": "array", + "items": { + "description": "Tencent VPC entity", + "type": "object", + "required": [ + "vpcId" + ], + "properties": { + "cidrBlock": { + "description": "Tencent VPC CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", + "type": "string" + }, + "name": { + "description": "Tencent VPC name", + "type": "string" + }, + "subnets": { + "type": "array", + "items": { + "description": "Tencent Subnet entity", + "type": "object", + "properties": { + "az": { + "description": "Availability zone associated with tencent subnet", + "type": "string" + }, + "cidrBlock": { + "description": "Tencent subnet CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", + "type": "string" + }, + "name": { + "description": "Tencent subnet name", + "type": "string" + }, + "subnetId": { + "description": "Tencent subnet id", + "type": "string" + } + } + } + }, + "vpcId": { + "description": "Tencent VPC id", + "type": "string" + } + } + } + } + } + } } } - }, - "parameters": [ - { - "type": "string", - "description": "Unique cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] + } }, - "/v1/clouds/cloudTypes/{cloudType}/content/controlPlane": { + "/v1/clouds/tencent/regions/{region}/zones": { "get": { "security": [ { @@ -54773,9 +51981,23 @@ "tags": [ "v1" ], - "summary": "Returns the custom cloud type control plane", - "operationId": "V1CustomCloudTypeControlPlaneGet", + "summary": "Retrieves a list of Tencent availability zones for the specified region", + "operationId": "V1TencentZones", "parameters": [ + { + "type": "string", + "description": "Region for which zones are requested", + "name": "region", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Uid for the specific Tencent cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -54787,19 +52009,41 @@ "200": { "description": "(empty)", "schema": { - "description": "Custom cloudType content response", + "description": "List of Tencent Availability zones", "type": "object", + "required": [ + "zones" + ], "properties": { - "yaml": { - "description": "custom cloud type content", - "type": "string" + "zones": { + "type": "array", + "items": { + "description": "Tencent availability zone", + "type": "object", + "properties": { + "name": { + "description": "Tencent availability zone name", + "type": "string" + }, + "state": { + "description": "Tencent availability zone state", + "type": "string" + }, + "zoneId": { + "description": "Tencent availability zone id", + "type": "string" + } + } + } } } } } } - }, - "put": { + } + }, + "/v1/clouds/vsphere/account/validate": { + "post": { "security": [ { "ApiKey": [] @@ -54808,19 +52052,43 @@ "Authorization": [] } ], - "consumes": [ - "multipart/form-data" - ], + "description": "Returns no contents if account is valid else error.", "tags": [ "v1" ], - "summary": "Update the custom cloud type control plane", - "operationId": "V1CustomCloudTypeControlPlaneUpdate", + "summary": "Check if Vsphere account is valid", + "operationId": "V1VsphereAccountValidate", "parameters": [ { - "type": "file", - "name": "fileName", - "in": "formData" + "description": "Request payload for VSphere cloud account", + "name": "vsphereCloudAccount", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "vcenterServer", + "username", + "password" + ], + "properties": { + "insecure": { + "description": "Insecure is a flag that controls whether or not to validate the vSphere server's certificate.", + "type": "boolean", + "x-omitempty": false + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + } }, { "type": "string", @@ -54840,8 +52108,10 @@ } } } - }, - "delete": { + } + }, + "/v1/clouds/vsphere/datacenters": { + "get": { "security": [ { "ApiKey": [] @@ -54853,48 +52123,15 @@ "tags": [ "v1" ], - "summary": "Delete the custom cloud type control plane", - "operationId": "V1CustomCloudTypeControlPlaneDelete", + "summary": "Returns the vsphere data centers", + "operationId": "V1VsphereDatacenters", "parameters": [ { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Unique cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] - }, - "/v1/clouds/cloudTypes/{cloudType}/content/templates/clusterTemplate": { - "get": { - "security": [ - { - "ApiKey": [] + "description": "Uid for the specific OpenStack cloud account", + "name": "cloudAccountUid", + "in": "query" }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the custom cloud type cluster template", - "operationId": "V1CustomCloudTypeClusterTemplateGet", - "parameters": [ { "type": "string", "description": "Scope the request to the specified project uid", @@ -54906,19 +52143,51 @@ "200": { "description": "(empty)", "schema": { - "description": "Custom cloudType content response", + "description": "List of Datacenters with computeclusters", "type": "object", + "required": [ + "items" + ], "properties": { - "yaml": { - "description": "custom cloud type content", - "type": "string" + "items": { + "description": "List of associated datacenters", + "type": "array", + "uniqueItems": true, + "items": { + "description": "List of Datacenter with computeclusters", + "type": "object", + "properties": { + "computeclusters": { + "description": "List of the VSphere compute clusters in datacenter", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "datacenter": { + "description": "name of the datacenter of the VSphere", + "type": "string" + }, + "folders": { + "description": "List of the VSphere folders in datacenter", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } } } } } } - }, - "put": { + } + }, + "/v1/clouds/vsphere/datacenters/{uid}/computeclusters/{computecluster}": { + "get": { "security": [ { "ApiKey": [] @@ -54927,93 +52196,33 @@ "Authorization": [] } ], - "consumes": [ - "multipart/form-data" - ], "tags": [ "v1" ], - "summary": "Update the custom cloud type cluster template", - "operationId": "V1CustomCloudTypeClusterTemplateUpdate", + "summary": "Returns the resources for vsphere compute cluster", + "operationId": "V1VsphereComputeClusterResources", "parameters": [ { - "type": "file", - "name": "fileName", - "in": "formData" + "type": "string", + "description": "Uid for the specific VSphere cloud account", + "name": "cloudAccountUid", + "in": "query", + "required": true }, { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - }, - "delete": { - "security": [ - { - "ApiKey": [] + "description": "computecluster for which resources is requested", + "name": "computecluster", + "in": "path", + "required": true }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Delete the custom cloud type cluster template", - "operationId": "V1CustomCloudTypeClusterTemplateDelete", - "parameters": [ { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Unique cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] - }, - "/v1/clouds/cloudTypes/{cloudType}/content/templates/controlPlanePoolTemplate": { - "get": { - "security": [ - { - "ApiKey": [] + "description": "VSphere datacenter uid for which resources is requested", + "name": "uid", + "in": "path", + "required": true }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the custom cloud type controlPlane pool template", - "operationId": "V1CustomCloudTypeControlPlanePoolTemplateGet", - "parameters": [ { "type": "string", "description": "Scope the request to the specified project uid", @@ -55025,19 +52234,51 @@ "200": { "description": "(empty)", "schema": { - "description": "Custom cloudType content response", + "description": "Datacenter and its resources like datastore, resoucepool, folders", "type": "object", "properties": { - "yaml": { - "description": "custom cloud type content", + "computecluster": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "datacenter": { + "description": "Name of the datacenter", "type": "string" } } } } } - }, - "put": { + } + }, + "/v1/clouds/vsphere/env": { + "get": { "security": [ { "ApiKey": [] @@ -55046,19 +52287,42 @@ "Authorization": [] } ], - "consumes": [ - "multipart/form-data" - ], "tags": [ "v1" ], - "summary": "Update the custom cloud type controlPlane pool template", - "operationId": "V1CustomCloudTypeControlPlanePoolTemplateUpdate", + "summary": "Retrieves vsphere env", + "operationId": "V1VsphereEnv", "parameters": [ { - "type": "file", - "name": "fileName", - "in": "formData" + "description": "Request payload for VSphere cloud account", + "name": "vsphereCloudAccount", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "vcenterServer", + "username", + "password" + ], + "properties": { + "insecure": { + "description": "Insecure is a flag that controls whether or not to validate the vSphere server's certificate.", + "type": "boolean", + "x-omitempty": false + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + } + } }, { "type": "string", @@ -55068,18 +52332,24 @@ } ], "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" + "200": { + "description": "(empty)", + "schema": { + "description": "Vsphere environment entity", + "type": "object", + "properties": { + "version": { + "description": "Version of vsphere environment", + "type": "string" + } } } } } - }, - "delete": { + } + }, + "/v1/clouds/{cloudType}/instance/spotprice": { + "get": { "security": [ { "ApiKey": [] @@ -55091,48 +52361,37 @@ "tags": [ "v1" ], - "summary": "Delete the custom cloud type controlPlane pool template", - "operationId": "V1CustomCloudTypeControlPlanePoolTemplateDelete", + "summary": "Retrieves the cloud instance spot price based on zone and timestamp for a specific cloud", + "operationId": "V1CloudInstanceSpotPriceGet", "parameters": [ { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Unique cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] - }, - "/v1/clouds/cloudTypes/{cloudType}/content/templates/workerPoolTemplate": { - "get": { - "security": [ + "description": "Cloud type [aws/azure/gcp/tencent]", + "name": "cloudType", + "in": "path", + "required": true + }, { - "ApiKey": [] + "type": "string", + "description": "Instance type for a specific cloud type", + "name": "instanceType", + "in": "query", + "required": true }, { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the custom cloud type worker pool template", - "operationId": "V1CustomCloudTypeWorkerPoolTemplateGet", - "parameters": [ + "type": "string", + "description": "Availability zone for a specific cloud type", + "name": "zone", + "in": "query", + "required": true + }, + { + "type": "string", + "format": "date-time", + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "name": "timestamp", + "in": "query" + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -55144,19 +52403,23 @@ "200": { "description": "(empty)", "schema": { - "description": "Custom cloudType content response", + "description": "Spot price entity of a particular cloud type", "type": "object", "properties": { - "yaml": { - "description": "custom cloud type content", - "type": "string" + "spotPrice": { + "description": "Spot price of a resource for a particular cloud", + "type": "number", + "format": "float64", + "x-omitempty": false } } } } } - }, - "put": { + } + }, + "/v1/clouds/{cloud}/compute/{type}/rate": { + "get": { "security": [ { "ApiKey": [] @@ -55165,54 +52428,33 @@ "Authorization": [] } ], - "consumes": [ - "multipart/form-data" - ], "tags": [ "v1" ], - "summary": "Update the custom cloud type worker pool template", - "operationId": "V1CustomCloudTypeWorkerPoolTemplateUpdate", + "summary": "Returns the cloud compute rate", + "operationId": "V1CloudComputeRate", "parameters": [ { - "type": "file", - "name": "fileName", - "in": "formData" + "type": "string", + "description": "cloud for which compute rate is requested", + "name": "cloud", + "in": "path", + "required": true }, { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - }, - "delete": { - "security": [ - { - "ApiKey": [] + "description": "instance type for which compute rate is requested", + "name": "type", + "in": "path", + "required": true }, { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Delete the custom cloud type worker pool template", - "operationId": "V1CustomCloudTypeWorkerPoolTemplateDelete", - "parameters": [ + "type": "string", + "description": "region for which compute rate is requested", + "name": "region", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -55221,22 +52463,34 @@ } ], "responses": { - "204": { - "description": "The resource was deleted successfully" + "200": { + "description": "(empty)", + "schema": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } } } - }, - "parameters": [ - { - "type": "string", - "description": "Unique cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] + } }, - "/v1/clouds/cloudTypes/{cloudType}/logo": { + "/v1/clouds/{cloud}/storage/{type}/rate": { "get": { "security": [ { @@ -55246,59 +52500,38 @@ "Authorization": [] } ], - "produces": [ - "application/octet-stream" - ], "tags": [ "v1" ], - "summary": "Returns the custom cloud type logo", - "operationId": "V1CustomCloudTypeLogoGet", + "summary": "Returns the cloud storage rate", + "operationId": "V1CloudStorageRate", "parameters": [ { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Download the logo", - "schema": { - "type": "string", - "format": "binary" - }, - "headers": { - "Content-Disposition": { - "type": "string" - } - } - } - } - }, - "put": { - "security": [ + "description": "cloud for which compute rate is requested", + "name": "cloud", + "in": "path", + "required": true + }, { - "ApiKey": [] + "type": "string", + "description": "storage type for which compute rate is requested", + "name": "type", + "in": "path", + "required": true }, { - "Authorization": [] - } - ], - "consumes": [ - "multipart/form-data" - ], - "tags": [ - "v1" - ], - "summary": "Update the custom cloud type logo", - "operationId": "V1CustomCloudTypeLogoUpdate", - "parameters": [ + "type": "string", + "description": "region for which compute rate is requested", + "name": "region", + "in": "query", + "required": true + }, { - "type": "file", - "name": "fileName", - "in": "formData" + "type": "integer", + "description": "maxDiskType for which compute rate is requested", + "name": "maxDiskType", + "in": "query" }, { "type": "string", @@ -55308,29 +52541,35 @@ } ], "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" + "200": { + "description": "(empty)", + "schema": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } } } } } - }, - "parameters": [ - { - "type": "string", - "description": "Unique cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] + } }, - "/v1/clouds/cloudTypes/{cloudType}/meta": { - "get": { + "/v1/clustergroups": { + "post": { "security": [ { "ApiKey": [] @@ -55342,29 +52581,21 @@ "tags": [ "v1" ], - "summary": "Returns the custom cloud type meta", - "operationId": "V1CustomCloudTypeMetaGet", + "summary": "Create cluster groups", + "operationId": "v1ClusterGroupsCreate", "parameters": [ { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", + "name": "body", + "in": "body", "schema": { - "description": "Custom cloud meta entity", - "type": "object", + "description": "Cluster group information", "properties": { "metadata": { "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -55381,7 +52612,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -55393,49 +52624,280 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Custom cloud spec response entity", - "type": "object", + "description": "Cluster group specifications request entity", "properties": { - "cloudCategory": { - "description": "Cloud category description", - "type": "string", - "default": "cloud", - "enum": [ - "datacenter", - "cloud", - "edge" - ] + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster group cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } }, - "displayName": { - "description": "Custom cloud displayName", - "type": "string" + "clustersConfig": { + "description": "Clusters config of cluster group", + "properties": { + "endpointType": { + "description": "Host cluster endpoint type", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClustersConfig": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "kubernetesDistroType": { + "type": "string", + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ] + }, + "limitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "type": "integer", + "format": "int32" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "type": "integer", + "format": "int32" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "overSubscription": { + "description": "Over subscription percentage", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "values": { + "type": "string" + } + } }, - "isManaged": { - "description": "If the custom cloud is a managed cluster", - "type": "boolean" + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } }, - "logo": { - "description": "Custom cloud logo", - "type": "string" + "type": { + "type": "string", + "enum": [ + "hostCluster" + ] } } } } } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } } } - }, - "put": { + } + }, + "/v1/clustergroups/developerCredit/usage/{scope}": { + "get": { "security": [ { "ApiKey": [] @@ -55447,98 +52909,100 @@ "tags": [ "v1" ], - "summary": "Update the custom cloud type meta", - "operationId": "V1CustomCloudTypeMetaUpdate", + "summary": "Get cluster group developer credit usage by scope", + "operationId": "v1ClusterGroupsDeveloperCreditUsageGet", "parameters": [ { - "description": "Request payload for custom cloud meta entity", - "name": "body", - "in": "body", - "required": true, + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Cluster group developer credit usage", "schema": { - "description": "Custom cloud request entity", - "type": "object", + "description": "Cluster group resource allocated and usage information", "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", + "allocatedCredit": { + "description": "Credits allocated for each tenant/user", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false }, - "name": { - "description": "Name of the resource.", - "type": "string" + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false } } }, - "spec": { - "description": "Custom cloud request entity spec", - "type": "object", + "usedCredit": { + "description": "Credits allocated for each tenant/user", "properties": { - "cloudCategory": { - "description": "Cloud category description", - "type": "string", - "default": "cloud", - "enum": [ - "datacenter", - "cloud", - "edge" - ] + "cpu": { + "description": "cpu in cores", + "type": "number", + "format": "int32", + "x-omitempty": false }, - "displayName": { - "description": "Custom cloud displayName", - "type": "string" + "memoryGiB": { + "description": "memory in GiB", + "type": "number", + "format": "int32", + "x-omitempty": false }, - "isControlPlaneManaged": { - "description": "If the custom cloud is a managed cluster", - "type": "boolean" + "storageGiB": { + "description": "storage in GiB", + "type": "integer", + "format": "int32", + "x-omitempty": false }, - "logo": { - "description": "Custom cloud logo", - "type": "string" + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "type": "number", + "format": "int32", + "x-omitempty": false } } } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" } } }, "parameters": [ { + "enum": [ + "system", + "tenant" + ], "type": "string", - "description": "Unique cloud type", - "name": "cloudType", + "name": "scope", "in": "path", "required": true } ] }, - "/v1/clouds/coxedge/account/validate": { - "post": { + "/v1/clustergroups/hostCluster": { + "get": { "security": [ { "ApiKey": [] @@ -55550,80 +53014,8 @@ "tags": [ "v1" ], - "summary": "Validate the specified CoxEdge account credentials", - "operationId": "V1CoxEdgeAccountValidate", - "parameters": [ - { - "description": "Request payload to validate CoxEdge cloud account", - "name": "account", - "in": "body", - "required": true, - "schema": { - "description": "CoxEdge cloud account", - "type": "object", - "required": [ - "apiBaseUrl", - "apiKey" - ], - "properties": { - "apiBaseUrl": { - "description": "The base url - used to make api calls", - "type": "string" - }, - "apiKey": { - "description": "CoxEdge cloud account ApiKey", - "type": "string" - }, - "environment": { - "description": "The environment belonging to the organization", - "type": "string" - }, - "organizationId": { - "description": "The Id of organization", - "type": "string" - }, - "service": { - "description": "The service for which the organization is allowed to provision resources", - "type": "string" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/clouds/coxedge/default/baseurls": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of default base urls", - "operationId": "V1CoxEdgeBaseUrls", + "summary": "Retrieves a list of cluster groups host cluster summary", + "operationId": "v1ClusterGroupsHostClusterSummary", "parameters": [ { "type": "string", @@ -55634,18 +53026,364 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "An array of cluster groups of host cluster type summary", "schema": { - "description": "List of CoxEdge base urls", "type": "object", "required": [ - "baseUrls" + "summaries" ], "properties": { - "baseUrls": { + "summaries": { "type": "array", + "uniqueItems": true, "items": { - "type": "string" + "description": "Cluster group summay", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster group summay spec", + "properties": { + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + }, + "cpu": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "used": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "endpointType": { + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClusters": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "hostClustersCount": { + "type": "integer", + "x-omitempty": false + }, + "memory": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "used": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "scope": { + "type": "string" + }, + "virtualClustersCount": { + "type": "integer", + "x-omitempty": false + } + } + } + } } } } @@ -55654,7 +53392,7 @@ } } }, - "/v1/clouds/coxedge/environments": { + "/v1/clustergroups/hostCluster/metadata": { "get": { "security": [ { @@ -55667,22 +53405,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of environments for the specified account", - "operationId": "V1CoxEdgeEnvironmentsGet", + "summary": "Retrieves a list of cluster groups host cluster metadata", + "operationId": "v1ClusterGroupsHostClusterMetadata", "parameters": [ - { - "type": "string", - "description": "Uid for the specific CoxEdge cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "OrganizationId for the specific CoxEdge account", - "name": "organizationId", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -55692,30 +53417,27 @@ ], "responses": { "200": { - "description": "List of CoxEdge environments", + "description": "An array of cluster groups host cluster metadata items", "schema": { - "description": "List of CoxEdge environments", "type": "object", "required": [ - "environments" + "items" ], "properties": { - "environments": { + "items": { "type": "array", + "uniqueItems": true, "items": { - "description": "CoxEdge environment entity", + "description": "Object scope identity meta", "type": "object", "properties": { - "id": { - "description": "CoxEdge environment id", + "name": { "type": "string" }, - "isDeleted": { - "description": "CoxEdge environment state", - "type": "boolean" + "scope": { + "type": "string" }, - "name": { - "description": "CoxEdge environment name", + "uid": { "type": "string" } } @@ -55725,8 +53447,10 @@ } } } - }, - "post": { + } + }, + "/v1/clustergroups/validate/name": { + "get": { "security": [ { "ApiKey": [] @@ -55738,38 +53462,14 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of environments for baseUrl and apiKey", - "operationId": "V1CoxEdgeEnvironments", + "summary": "Validates the cluster groups name", + "operationId": "v1ClusterGroupsValidateName", "parameters": [ { - "description": "Request payload to get CoxEdge environments", - "name": "spec", - "in": "body", - "required": true, - "schema": { - "description": "Request payload to get CoxEdge environments", - "type": "object", - "properties": { - "credentials": { - "description": "CoxEdge credentials to get organizations", - "type": "object", - "properties": { - "apiBaseUrl": { - "description": "CoxEdge baseUrl - for api calls", - "type": "string" - }, - "apiKey": { - "description": "CoxEdge ApiKey - secret for api calls", - "type": "string" - } - } - }, - "organizationId": { - "description": "CoxEdge organizationId", - "type": "string" - } - } - } + "type": "string", + "name": "name", + "in": "query", + "required": true }, { "type": "string", @@ -55779,43 +53479,19 @@ } ], "responses": { - "200": { - "description": "List of CoxEdge environments", - "schema": { - "description": "List of CoxEdge environments", - "type": "object", - "required": [ - "environments" - ], - "properties": { - "environments": { - "type": "array", - "items": { - "description": "CoxEdge environment entity", - "type": "object", - "properties": { - "id": { - "description": "CoxEdge environment id", - "type": "string" - }, - "isDeleted": { - "description": "CoxEdge environment state", - "type": "boolean" - }, - "name": { - "description": "CoxEdge environment name", - "type": "string" - } - } - } - } + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" } } } } } }, - "/v1/clouds/coxedge/organizations": { + "/v1/clustergroups/{uid}": { "get": { "security": [ { @@ -55828,16 +53504,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of organizations for the specified account", - "operationId": "V1CoxEdgeOrganizationsGet", + "summary": "Returns the specified cluster groups", + "operationId": "v1ClusterGroupsUidGet", "parameters": [ - { - "type": "string", - "description": "Uid for the specific CoxEdge cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -55847,32 +53516,457 @@ ], "responses": { "200": { - "description": "List of CoxEdge organizations", + "description": "OK", "schema": { - "description": "List of CoxEdge organizations", - "type": "object", - "required": [ - "organizations" - ], + "description": "Cluster group information", "properties": { - "organizations": { - "type": "array", - "items": { - "description": "CoxEdge Organization entity", - "type": "object", - "properties": { - "id": { - "description": "CoxEdge organization id", + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { "type": "string" - }, - "isDeleted": { - "description": "CoxEdge organization state", - "type": "boolean" - }, - "name": { - "description": "CoxEdge organization name", + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { "type": "string" } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster group specifications", + "properties": { + "clusterProfileTemplates": { + "description": "ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec. It consists of list of add on profiles at a cluster group level which will be enforced on all virtual cluster. ClusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", + "type": "array", + "items": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster group cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + } + }, + "clustersConfig": { + "description": "Clusters config of cluster group", + "properties": { + "endpointType": { + "description": "Host cluster endpoint type", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClustersConfig": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "kubernetesDistroType": { + "type": "string", + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ] + }, + "limitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "type": "integer", + "format": "int32" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "type": "integer", + "format": "int32" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "overSubscription": { + "description": "Over subscription percentage", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" + } + } + }, + "values": { + "type": "string" + } + } + }, + "type": { + "type": "string", + "enum": [ + "hostCluster" + ] + } + } + }, + "status": { + "description": "Cluster group status", + "properties": { + "isActive": { + "type": "boolean", + "x-omitempty": false } } } @@ -55881,7 +53975,7 @@ } } }, - "post": { + "delete": { "security": [ { "ApiKey": [] @@ -55893,29 +53987,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of organizations for baseUrl and apiKey", - "operationId": "V1CoxEdgeOrganizations", + "summary": "Deletes the specified cluster group", + "operationId": "v1ClusterGroupsUidDelete", "parameters": [ - { - "description": "Request payload to get CoxEdge organizations", - "name": "spec", - "in": "body", - "required": true, - "schema": { - "description": "CoxEdge credentials to get organizations", - "type": "object", - "properties": { - "apiBaseUrl": { - "description": "CoxEdge baseUrl - for api calls", - "type": "string" - }, - "apiKey": { - "description": "CoxEdge ApiKey - secret for api calls", - "type": "string" - } - } - } - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -55924,44 +53998,22 @@ } ], "responses": { - "200": { - "description": "List of CoxEdge organizations", - "schema": { - "description": "List of CoxEdge organizations", - "type": "object", - "required": [ - "organizations" - ], - "properties": { - "organizations": { - "type": "array", - "items": { - "description": "CoxEdge Organization entity", - "type": "object", - "properties": { - "id": { - "description": "CoxEdge organization id", - "type": "string" - }, - "isDeleted": { - "description": "CoxEdge organization state", - "type": "boolean" - }, - "name": { - "description": "CoxEdge organization name", - "type": "string" - } - } - } - } - } - } + "204": { + "description": "The resource was deleted successfully" } } - } - }, - "/v1/clouds/coxedge/regions": { - "get": { + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/clustergroups/{uid}/hostCluster": { + "put": { "security": [ { "ApiKey": [] @@ -55973,289 +54025,138 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of CoxEdge regions for the specified account", - "operationId": "V1CoxEdgeRegions", + "summary": "Updates cluster reference and host cluster config", + "operationId": "v1ClusterGroupsUidHostClusterUpdate", "parameters": [ { - "type": "string", - "description": "Uid for the specific AWS cloud account", - "name": "cloudAccountUid", - "in": "query" - }, - { - "type": "string", - "description": "CoxEdge organization id", - "name": "organizationId", - "in": "query" - }, - { - "type": "string", - "description": "CoxEdge service name", - "name": "service", - "in": "query" - }, - { - "type": "string", - "description": "CoxEdge environment name", - "name": "environment", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", + "name": "body", + "in": "body", "schema": { - "description": "List of CoxEdge regions", - "type": "object", - "required": [ - "regions" - ], + "description": "Clusters and clusters config of cluster group", "properties": { - "regions": { + "clusterRefs": { "type": "array", + "uniqueItems": true, "items": { - "description": "CoxEdge region entity", - "type": "object", + "description": "Cluster group cluster reference", "properties": { - "code": { - "description": "Code of the CoxEdge region", + "clusterName": { "type": "string" }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "name": { - "description": "Name of the CoxEdge region", + "clusterUid": { "type": "string" } } } - } - } - } - } - } - } - }, - "/v1/clouds/coxedge/regions/{region}/instancetypes": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of CoxEdge instance types", - "operationId": "V1CoxEdgeInstanceTypes", - "parameters": [ - { - "type": "string", - "description": "Region for which CoxEdge instances are listed", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "number", - "format": "double", - "description": "Filter for instances having cpu greater than or equal", - "name": "cpuGtEq", - "in": "query" - }, - { - "type": "number", - "format": "double", - "description": "Filter for instances having memory greater than or equal", - "name": "memoryGtEq", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of CoxEdge instance types", - "type": "object", - "properties": { - "instanceTypes": { - "type": "array", - "items": { - "description": "Cloud Instance type details", - "type": "object", - "properties": { - "category": { - "description": "Category of instance type", - "type": "string", - "x-go-name": "Category" - }, - "cost": { - "description": "Instance cost entity", - "type": "object", + }, + "clustersConfig": { + "description": "Clusters config of cluster group", + "properties": { + "endpointType": { + "description": "Host cluster endpoint type", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + }, + "hostClustersConfig": { + "type": "array", + "uniqueItems": true, + "items": { "properties": { - "price": { - "description": "Array of cloud instance price", - "type": "array", - "items": { - "description": "Cloud instance price", - "type": "object", - "properties": { - "onDemand": { - "description": "OnDemand price of instance", - "type": "number", - "format": "double" - }, - "os": { - "description": "Os associated with instance price. Allowed values - [linux, windows]", - "type": "string", - "enum": [ - "linux", - "windows" - ] - }, - "spot": { - "description": "Spot price of instance", - "type": "number", - "format": "double" + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } } } } } } - }, - "cpu": { - "description": "Cpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Cpu" - }, - "gpu": { - "description": "Gpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Gpu" - }, - "memory": { - "description": "Memory of instance type", - "type": "number", - "format": "double", - "x-go-name": "Memory" - }, - "nonSupportedZones": { - "description": "Non supported zones of the instance in a particular region", - "type": "array", - "items": { - "type": "string" - } - }, - "price": { - "description": "Price of instance type", - "type": "number", - "format": "double", - "x-go-name": "Price" - }, - "supportedArchitectures": { - "description": "Supported architecture of the instance", - "type": "array", - "items": { - "type": "string" + } + }, + "kubernetesDistroType": { + "type": "string", + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ] + }, + "limitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "type": "integer", + "format": "int32" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "type": "integer", + "format": "int32" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "Memory in MiB", + "type": "integer", + "format": "int32" + }, + "overSubscription": { + "description": "Over subscription percentage", + "type": "integer", + "format": "int32" + }, + "storageGiB": { + "description": "Storage in GiB", + "type": "integer", + "format": "int32" } - }, - "type": { - "description": "Type of instance type", - "type": "string", - "x-go-name": "Type" } + }, + "values": { + "type": "string" } } } } } - } - } - } - }, - "/v1/clouds/coxedge/services": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of services for the specified account", - "operationId": "V1CoxEdgeServicesGet", - "parameters": [ - { - "type": "string", - "description": "Uid for the specific CoxEdge cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "OrganizationId for the specific CoxEdge account", - "name": "organizationId", - "in": "query" }, { "type": "string", @@ -56265,122 +54166,22 @@ } ], "responses": { - "200": { - "description": "List of CoxEdge services", - "schema": { - "description": "List of CoxEdge services", - "type": "object", - "required": [ - "services" - ], - "properties": { - "services": { - "type": "array", - "items": { - "description": "CoxEdge service entity", - "type": "object", - "properties": { - "code": { - "description": "CoxEdge service code", - "type": "string" - }, - "id": { - "description": "CoxEdge service id", - "type": "string" - }, - "name": { - "description": "CoxEdge service name", - "type": "string" - } - } - } - } - } - } + "204": { + "description": "The resource was updated successfully" } } }, - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of services for baseUrl and apiKey", - "operationId": "V1CoxEdgeServices", - "parameters": [ - { - "description": "Request payload to get CoxEdge services", - "name": "spec", - "in": "body", - "required": true, - "schema": { - "description": "CoxEdge credentials to get organizations", - "type": "object", - "properties": { - "apiBaseUrl": { - "description": "CoxEdge baseUrl - for api calls", - "type": "string" - }, - "apiKey": { - "description": "CoxEdge ApiKey - secret for api calls", - "type": "string" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of CoxEdge services", - "type": "object", - "required": [ - "services" - ], - "properties": { - "services": { - "type": "array", - "items": { - "description": "CoxEdge service entity", - "type": "object", - "properties": { - "code": { - "description": "CoxEdge service code", - "type": "string" - }, - "id": { - "description": "CoxEdge service id", - "type": "string" - }, - "name": { - "description": "CoxEdge service name", - "type": "string" - } - } - } - } - } - } - } + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true } - } + ] }, - "/v1/clouds/eks/properties/validate": { - "post": { + "/v1/clustergroups/{uid}/meta": { + "put": { "security": [ { "ApiKey": [] @@ -56392,240 +54193,51 @@ "tags": [ "v1" ], - "summary": "Validate EKS properties", - "operationId": "V1EksPropertiesValidate", + "summary": "Updates the specified cluster groups meta", + "operationId": "v1ClusterGroupsUidMetaUpdate", "parameters": [ { - "description": "Request payload for EKS properties validate spec", - "name": "properties", + "name": "body", "in": "body", - "required": true, "schema": { - "description": "Eks properties validate spec", + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { - "cloudAccountUid": { - "type": "string" - }, - "name": { - "type": "string" - }, - "region": { - "type": "string" - }, - "sshKeyName": { - "type": "string" - }, - "subnets": { - "type": "array", - "items": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { "type": "string" } }, - "vpcId": { - "type": "string" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/clouds/gcp/account/validate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Validate the specified GCP account credentials", - "operationId": "V1GcpAccountValidate", - "parameters": [ - { - "description": "Uid for the specific GCP cloud account", - "name": "gcpCloudAccount", - "in": "body", - "required": true, - "schema": { - "description": "Gcp cloud account spec", - "type": "object", - "properties": { - "spec": { - "description": "Gcp cloud account entity which takes json credentials or reference to the file where credentials are stored", + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", - "properties": { - "jsonCredentials": { - "description": "Gcp cloud account json credentials", - "type": "string" - }, - "jsonCredentialsFileUid": { - "description": "Reference of the credentials stored in the file", - "type": "string" - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/clouds/gcp/azs/validate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Validate the specified GCP az", - "operationId": "V1GcpAzValidate", - "parameters": [ - { - "description": "Uid for the specific GCP cloud account", - "name": "entity", - "in": "body", - "required": true, - "schema": { - "description": "Az validate entity", - "type": "object", - "properties": { - "azs": { - "description": "Gcp Azs", - "type": "array", - "items": { + "additionalProperties": { "type": "string" } }, - "project": { - "description": "Gcp project", - "type": "string" + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "region": { - "description": "Gcp region", + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "Cloud account uid", - "type": "string" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/clouds/gcp/bucketname/validate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Validate the specified GCP bucket name credentials", - "operationId": "V1GcpBucketNameValidate", - "parameters": [ - { - "description": "Request payload for GCP account name validate", - "name": "body", - "in": "body", - "required": true, - "schema": { - "description": "Gcp cloud account name validate spec", - "type": "object", - "required": [ - "credentials", - "bucketName" - ], - "properties": { - "bucketName": { - "description": "Bucket name in the GCP", - "type": "string" - }, - "credentials": { - "description": "Gcp cloud account entity which takes json credentials or reference to the file where credentials are stored", - "type": "object", - "properties": { - "jsonCredentials": { - "description": "Gcp cloud account json credentials", - "type": "string" - }, - "jsonCredentialsFileUid": { - "description": "Reference of the credentials stored in the file", - "type": "string" - } - } - }, - "projectId": { - "description": "ProjectId in the GCP", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -56640,123 +54252,20 @@ ], "responses": { "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/clouds/gcp/image/container/validate": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Validates the image with tag", - "operationId": "V1GcpContainerImageValidate", - "parameters": [ - { - "type": "string", - "description": "image path in the container", - "name": "imagePath", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "tag in the GCP container", - "name": "tag", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } + "description": "The resource was updated successfully" } } - } - }, - "/v1/clouds/gcp/images/{imageName}/url": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the Gcp image url for the specified image location", - "operationId": "V1GcpImageUrl", - "parameters": [ - { - "type": "string", - "description": "imageName for which GCP image url is requested", - "name": "imageName", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "Gcp image url entity", - "type": "object", - "properties": { - "imageFamily": { - "description": "The name of the image family to which this image belongs", - "type": "string" - }, - "imageUrl": { - "description": "Server-defined URL for the resource", - "type": "string" - }, - "name": { - "description": "Name of the resource", - "type": "string" - } - } - } - } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true } - } + ] }, - "/v1/clouds/gcp/projects": { + "/v1/clustergroups/{uid}/packs/resolvedValues": { "get": { "security": [ { @@ -56769,16 +54278,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of GCP projects for the specified account", - "operationId": "V1GcpProjects", + "summary": "Returns the specified clustergroup's profile packs resolved values", + "operationId": "v1ClusterGroupsUidPacksResolvedValuesGet", "parameters": [ - { - "type": "string", - "description": "Uid for the specific GCP cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -56788,24 +54290,26 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "OK", "schema": { - "description": "List of GCP Projects", + "description": "Cluster profiles resolved values response", "type": "object", "properties": { - "projects": { - "description": "List of GCP Projects", + "profiles": { "type": "array", + "uniqueItems": true, "items": { - "description": "GCP project organizes all Google Cloud resources", - "type": "object", + "description": "Cluster profile resolved pack values", "properties": { - "id": { - "description": "GCP project id", - "type": "string" + "resolved": { + "description": "Cluster profile pack resolved values", + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "name": { - "description": "GCP project name", + "uid": { + "description": "Cluster profile uid", "type": "string" } } @@ -56815,76 +54319,35 @@ } } } - } - }, - "/v1/clouds/gcp/projects/{project}/regions": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of GCP regions", - "operationId": "V1GcpRegions", - "parameters": [ - { - "type": "string", - "description": "Uid for the specific GCP cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Project Name for which GCP zones are requested", - "name": "project", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of GCP Regions", - "type": "object", - "properties": { - "regions": { - "type": "array", - "items": { - "description": "Geographical region made up of zones where you can host your GCP resources", - "type": "object", - "properties": { - "name": { - "description": "GCP region name", - "type": "string" - }, - "status": { - "description": "GCP region status", - "type": "string" - } - } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster group uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster profiles param reference entity", + "type": "object", + "properties": { + "references": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" } } } } } - } + ] }, - "/v1/clouds/gcp/projects/{project}/regions/{region}/networks": { + "/v1/clustergroups/{uid}/profiles": { "get": { "security": [ { @@ -56897,29 +54360,14 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of GCP networks for the specified account", - "operationId": "V1GcpNetworks", + "summary": "Returns the associated profiles of a specified cluster group", + "operationId": "v1ClusterGroupsUidProfilesGet", "parameters": [ { "type": "string", - "description": "Uid for the specific GCP cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Region for which GCP networks are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Project Name for which GCP networks are requested", - "name": "project", - "in": "path", - "required": true + "description": "includes pack meta such as schema, presets", + "name": "includePackMeta", + "in": "query" }, { "type": "string", @@ -56930,36 +54378,560 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "OK", "schema": { - "description": "List of GCP networks", "type": "object", + "required": [ + "profiles" + ], "properties": { - "networks": { + "profiles": { "type": "array", "items": { - "description": "GCP network enity is a virtual version of a physical network", + "description": "Cluster profile response", "type": "object", "properties": { - "name": { - "description": "GCP network name", - "type": "string" - }, - "subnets": { - "description": "List of GCP subnet", - "type": "array", - "items": { - "description": "Subnets are regional resources, and have IP address ranges associated with them", - "type": "object", - "properties": { - "id": { - "description": "GCP subnet id", + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { "type": "string" - }, - "name": { - "description": "GCP subnet name", + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { "type": "string" } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster profile spec response", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile packs object", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack object", + "type": "object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } + } + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "version": { + "description": "Cluster profile version", + "type": "integer", + "format": "int32" } } } @@ -56970,10 +54942,8 @@ } } } - } - }, - "/v1/clouds/gcp/projects/{project}/regions/{region}/zones": { - "get": { + }, + "put": { "security": [ { "ApiKey": [] @@ -56985,64 +54955,154 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of GCP zones for the specified account and region", - "operationId": "V1GcpZones", + "summary": "Updates the specified cluster groups profiles", + "operationId": "v1ClusterGroupsUidProfilesUpdate", "parameters": [ { - "type": "string", - "description": "Uid for the specific GCP cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Region for which GCP zones are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Project Name for which GCP zones are requested", - "name": "project", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", + "name": "body", + "in": "body", "schema": { - "description": "List of GCP zones", "type": "object", + "required": [ + "profiles" + ], "properties": { - "zones": { + "profiles": { "type": "array", "items": { - "description": "A zone is a deployment area for Google Cloud resources within a region", + "description": "Cluster profile request payload", "type": "object", "properties": { - "name": { - "description": "GCP zone name", + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } + }, + "spcApplySettings": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + } + } } } } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" } } - } + }, + "parameters": [ + { + "type": "string", + "description": "ClusterGroup uid", + "name": "uid", + "in": "path", + "required": true + } + ] }, - "/v1/clouds/gcp/projects/{project}/validate": { + "/v1/clusterprofiles": { "post": { "security": [ { @@ -57055,28 +55115,219 @@ "tags": [ "v1" ], - "summary": "Validate the specified GCP project", - "operationId": "V1GcpProjectValidate", + "summary": "Creates a cluster profile", + "operationId": "v1ClusterProfilesCreate", "parameters": [ { - "type": "string", - "description": "GCP project uid", - "name": "project", - "in": "path", - "required": true - }, - { - "description": "Uid for the specific GCP cloud account", - "name": "cloudAccountUid", + "name": "body", "in": "body", - "required": true, "schema": { - "description": "Cloud account uid entity", + "description": "Cluster profile request payload", "type": "object", "properties": { - "uid": { - "description": "Cloud account uid", - "type": "string" + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "template": { + "description": "Cluster profile template spec", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] + } + } + }, + "variables": { + "description": "List of unique variable fields defined for a cluster profile with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + } } } } @@ -57089,8 +55340,19 @@ } ], "responses": { - "204": { - "description": "Ok response without content", + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, "headers": { "AuditUid": { "type": "string", @@ -57101,8 +55363,8 @@ } } }, - "/v1/clouds/gcp/projects/{project}/zones": { - "get": { + "/v1/clusterprofiles/bulk": { + "delete": { "security": [ { "ApiKey": [] @@ -57114,22 +55376,26 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of GCP zones for the specified account", - "operationId": "V1GcpAvailabilityZones", + "summary": "Deletes list of cluster profiles", + "operationId": "v1ClusterProfilesBulkDelete", "parameters": [ { - "type": "string", - "description": "Uid for the specific GCP cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Project Name for which GCP zones are requested", - "name": "project", - "in": "path", - "required": true + "name": "body", + "in": "body", + "schema": { + "required": [ + "uids" + ], + "properties": { + "uids": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } }, { "type": "string", @@ -57140,23 +55406,38 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "OK", "schema": { - "description": "List of GCP zones", - "type": "object", "properties": { - "zones": { + "deletedCount": { + "type": "integer", + "x-omitempty": false + }, + "failures": { "type": "array", + "uniqueItems": true, "items": { - "description": "A zone is a deployment area for Google Cloud resources within a region", - "type": "object", "properties": { + "errMsg": { + "type": "string" + }, "name": { - "description": "GCP zone name", + "type": "string" + }, + "uid": { "type": "string" } } - } + }, + "x-omitempty": false + }, + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string", + "x-omitempty": false } } } @@ -57164,7 +55445,7 @@ } } }, - "/v1/clouds/gcp/properties/validate": { + "/v1/clusterprofiles/import": { "post": { "security": [ { @@ -57177,32 +55458,250 @@ "tags": [ "v1" ], - "summary": "Validate GCP properties", - "operationId": "V1GcpPropertiesValidate", + "summary": "Imports a cluster profile", + "operationId": "v1ClusterProfilesImport", "parameters": [ { - "description": "Request payload for GCP properties validate spec", - "name": "properties", + "type": "boolean", + "description": "If true then cluster profile will be published post successful import", + "name": "publish", + "in": "query" + }, + { + "name": "body", "in": "body", - "required": true, "schema": { - "description": "Gcp properties validate spec", + "description": "Cluster profile import request payload", "type": "object", "properties": { - "azs": { - "type": "array", - "items": { - "type": "string" + "metadata": { + "description": "Cluster profile import metadata", + "type": "object", + "properties": { + "description": { + "description": "Cluster profile description", + "type": "string" + }, + "labels": { + "description": "Cluster profile labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Cluster profile name", + "type": "string" + } } }, - "cloudAccountUid": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "region": { - "type": "string" + "spec": { + "description": "Cluster profile import spec", + "type": "object", + "properties": { + "template": { + "description": "Cluster profile import template", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack import request payload", + "type": "object", + "properties": { + "layer": { + "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", + "type": "string" + }, + "manifests": { + "description": "Pack manifests array", + "type": "array", + "items": { + "description": "Pack manifest import objct", + "type": "object", + "properties": { + "content": { + "description": "Pack manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Pack manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registry": { + "description": "Pack registry import entity", + "type": "object", + "properties": { + "matchingRegistries": { + "type": "array", + "items": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "metadata": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + } + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", + "type": "string" + }, + "values": { + "description": "Pack values are the customizable configurations for the pack", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + } + } + }, + "variables": { + "description": "List of unique variable fields defined for a cluster profile with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + } } } } @@ -57215,8 +55714,19 @@ } ], "responses": { - "204": { - "description": "Ok response without content", + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, "headers": { "AuditUid": { "type": "string", @@ -57227,8 +55737,8 @@ } } }, - "/v1/clouds/gcp/regions/{region}/instancetypes": { - "get": { + "/v1/clusterprofiles/import/file": { + "post": { "security": [ { "ApiKey": [] @@ -57237,38 +55747,36 @@ "Authorization": [] } ], + "consumes": [ + "multipart/form-data" + ], "tags": [ "v1" ], - "summary": "Retrieves a list of GCP instance types", - "operationId": "V1GcpInstanceTypes", + "summary": "Imports a cluster profile via file", + "operationId": "v1ClusterProfilesImportFile", "parameters": [ { - "type": "string", - "description": "Region for which GCP instance types are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "number", - "format": "double", - "description": "Filter for instances having cpu greater than or equal", - "name": "cpuGtEq", + "type": "boolean", + "description": "If true then cluster profile will be published post successful import", + "name": "publish", "in": "query" }, { - "type": "number", - "format": "double", - "description": "Filter for instances having memory greater than or equal", - "name": "memoryGtEq", - "in": "query" + "type": "file", + "description": "Cluster profile import file", + "name": "importFile", + "in": "formData" }, { - "type": "number", - "format": "double", - "description": "Filter for instances having gpu greater than or equal", - "name": "gpuGtEq", + "enum": [ + "yaml", + "json" + ], + "type": "string", + "default": "json", + "description": "Cluster profile import file format [\"yaml\", \"json\"]", + "name": "format", "in": "query" }, { @@ -57279,112 +55787,31 @@ } ], "responses": { - "200": { - "description": "(empty)", + "201": { + "description": "Created successfully", "schema": { - "description": "Retrieves a list of GCP instance types", "type": "object", + "required": [ + "uid" + ], "properties": { - "instanceTypes": { - "description": "List of GCP instance types", - "type": "array", - "items": { - "description": "Cloud Instance type details", - "type": "object", - "properties": { - "category": { - "description": "Category of instance type", - "type": "string", - "x-go-name": "Category" - }, - "cost": { - "description": "Instance cost entity", - "type": "object", - "properties": { - "price": { - "description": "Array of cloud instance price", - "type": "array", - "items": { - "description": "Cloud instance price", - "type": "object", - "properties": { - "onDemand": { - "description": "OnDemand price of instance", - "type": "number", - "format": "double" - }, - "os": { - "description": "Os associated with instance price. Allowed values - [linux, windows]", - "type": "string", - "enum": [ - "linux", - "windows" - ] - }, - "spot": { - "description": "Spot price of instance", - "type": "number", - "format": "double" - } - } - } - } - } - }, - "cpu": { - "description": "Cpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Cpu" - }, - "gpu": { - "description": "Gpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Gpu" - }, - "memory": { - "description": "Memory of instance type", - "type": "number", - "format": "double", - "x-go-name": "Memory" - }, - "nonSupportedZones": { - "description": "Non supported zones of the instance in a particular region", - "type": "array", - "items": { - "type": "string" - } - }, - "price": { - "description": "Price of instance type", - "type": "number", - "format": "double", - "x-go-name": "Price" - }, - "supportedArchitectures": { - "description": "Supported architecture of the instance", - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "description": "Type of instance type", - "type": "string", - "x-go-name": "Type" - } - } - } + "uid": { + "type": "string" } } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } } } } } }, - "/v1/clouds/gcp/regions/{region}/storagetypes": { - "get": { + "/v1/clusterprofiles/import/validate": { + "post": { "security": [ { "ApiKey": [] @@ -57396,15 +55823,247 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Gcp storage types", - "operationId": "V1GcpStorageTypes", + "summary": "Validates cluster profile import", + "operationId": "v1ClusterProfilesImportValidate", "parameters": [ { - "type": "string", - "description": "Region for which GCP storage types are requested", - "name": "region", - "in": "path", - "required": true + "name": "body", + "in": "body", + "schema": { + "description": "Cluster profile import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster profile import metadata", + "type": "object", + "properties": { + "description": { + "description": "Cluster profile description", + "type": "string" + }, + "labels": { + "description": "Cluster profile labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Cluster profile name", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster profile import spec", + "type": "object", + "properties": { + "template": { + "description": "Cluster profile import template", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack import request payload", + "type": "object", + "properties": { + "layer": { + "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", + "type": "string" + }, + "manifests": { + "description": "Pack manifests array", + "type": "array", + "items": { + "description": "Pack manifest import objct", + "type": "object", + "properties": { + "content": { + "description": "Pack manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Pack manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registry": { + "description": "Pack registry import entity", + "type": "object", + "properties": { + "matchingRegistries": { + "type": "array", + "items": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "metadata": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + } + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", + "type": "string" + }, + "values": { + "description": "Pack values are the customizable configurations for the pack", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + } + } + }, + "variables": { + "description": "List of unique variable fields defined for a cluster profile with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + } + } + } + } }, { "type": "string", @@ -57415,109 +56074,237 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "Cluster profile import validated response", "schema": { - "description": "List of GCP storage types", + "description": "Cluster profile import request payload", "type": "object", "properties": { - "storageTypes": { - "type": "array", - "items": { - "description": "Cloud cloud Storage type details", - "type": "object", - "properties": { - "cost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" + "metadata": { + "description": "Cluster profile import metadata", + "type": "object", + "properties": { + "description": { + "description": "Cluster profile description", + "type": "string" + }, + "labels": { + "description": "Cluster profile labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Cluster profile name", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster profile import spec", + "type": "object", + "properties": { + "template": { + "description": "Cluster profile import template", + "type": "object", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack import request payload", + "type": "object", + "properties": { + "layer": { + "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", + "type": "string" + }, + "manifests": { + "description": "Pack manifests array", + "type": "array", + "items": { + "description": "Pack manifest import objct", + "type": "object", + "properties": { + "content": { + "description": "Pack manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Pack manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registry": { + "description": "Pack registry import entity", + "type": "object", + "properties": { + "matchingRegistries": { + "type": "array", + "items": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } + }, + "metadata": { + "description": "Pack registry metadata", + "type": "object", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + } } + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", + "type": "string" + }, + "values": { + "description": "Pack values are the customizable configurations for the pack", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" } } } + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" } - }, - "iopsCost": { - "description": "Cloud storage cost", + } + }, + "variables": { + "description": "List of unique variable fields defined for a cluster profile with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", "type": "object", + "required": [ + "name" + ], "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", + "defaultValue": { + "description": "The default value of the variable", "type": "string" }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "kind": { - "description": "kind of storage type", - "type": "string" - }, - "name": { - "description": "Name of the storage type", - "type": "string" - }, - "throughputCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", + "description": { + "description": "Variable description", "type": "string" }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false } } } + }, + "version": { + "description": "Cluster profile version", + "type": "string" } } } @@ -57527,8 +56314,8 @@ } } }, - "/v1/clouds/maas/account/validate": { - "post": { + "/v1/clusterprofiles/macros": { + "get": { "security": [ { "ApiKey": [] @@ -57537,63 +56324,45 @@ "Authorization": [] } ], - "description": "Returns no contents if account is valid else error.", "tags": [ "v1" ], - "summary": "Check if Maas account is valid", - "operationId": "V1MaasAccountValidate", + "summary": "Retrieves a list of macros", + "operationId": "v1MacrosList", "parameters": [ { - "description": "Request payload for Maas cloud account", - "name": "account", - "in": "body", - "required": true, + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", "schema": { - "type": "object", - "required": [ - "apiKey", - "apiEndpoint" - ], "properties": { - "apiEndpoint": { - "type": "string" - }, - "apiKey": { - "type": "string" - }, - "preferredSubnets": { - "description": "list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"", + "macros": { "type": "array", + "uniqueItems": true, "items": { - "type": "string", - "default": "" + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } } } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } } } } }, - "/v1/clouds/maas/azs": { + "/v1/clusterprofiles/validate/name": { "get": { "security": [ { @@ -57603,79 +56372,23 @@ "Authorization": [] } ], + "description": "Validates the cluster profile name and version", "tags": [ "v1" ], - "summary": "Retrieves a list of Maas zones for a particular account uid", - "operationId": "V1MaasZonesGet", + "summary": "Validates the cluster profile metadata", + "operationId": "v1ClusterProfilesValidateNameVersion", "parameters": [ { "type": "string", - "description": "Uid for the specific Maas cloud account", - "name": "cloudAccountUid", + "description": "Cluster profile name", + "name": "name", "in": "query" }, { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of Maas zones", - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Maas zone", - "type": "object", - "properties": { - "description": { - "description": "Description of Maas domain", - "type": "string" - }, - "name": { - "description": "Name of Maas zone", - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "/v1/clouds/maas/domains": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of Maas domains", - "operationId": "V1MaasDomainsGet", - "parameters": [ - { - "type": "string", - "description": "Uid for the specific Maas cloud account", - "name": "cloudAccountUid", + "description": "Cluster profile version", + "name": "version", "in": "query" }, { @@ -57686,37 +56399,20 @@ } ], "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of Maas domains", - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Maas domain", - "type": "object", - "properties": { - "name": { - "description": "Name of Maas domain", - "type": "string" - } - } - } - } + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" } } } } } }, - "/v1/clouds/maas/resourcePools": { - "get": { + "/v1/clusterprofiles/validate/packs": { + "post": { "security": [ { "ApiKey": [] @@ -57728,77 +56424,96 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Maas pools for a particular account uid", - "operationId": "V1MaasPoolsGet", + "summary": "Validates cluster profile packs", + "operationId": "v1ClusterProfilesValidatePacks", "parameters": [ { - "type": "string", - "description": "Uid for the specific Maas cloud account", - "name": "cloudAccountUid", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", + "name": "body", + "in": "body", "schema": { - "description": "List of Maas pools", + "description": "Cluster profile template spec", "type": "object", - "required": [ - "items" - ], "properties": { - "items": { + "cloudType": { + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", "type": "array", "uniqueItems": true, "items": { - "description": "Maas pool", + "description": "Pack request payload", "type": "object", + "required": [ + "name" + ], "properties": { - "description": { - "description": "Description of Maas domain", + "layer": { + "description": "Pack layer", "type": "string" }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, "name": { - "description": "Name of Maas pool", + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", "type": "string" } } } + }, + "type": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] } } } - } - } - } - }, - "/v1/clouds/maas/subnets": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of Maas subnets for a particular account uid", - "operationId": "V1MaasSubnetsGet", - "parameters": [ - { - "type": "string", - "description": "Uid for the specific Maas cloud account", - "name": "cloudAccountUid", - "in": "query" }, { "type": "string", @@ -57809,47 +56524,41 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "Cluster profile packs validation response", "schema": { - "description": "List of Maas subnets", + "description": "Cluster profile validator response", "type": "object", - "required": [ - "items" - ], "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Maas subnet", - "type": "object", - "properties": { - "id": { - "description": "Id of Maas subnet", - "type": "integer" - }, - "name": { - "description": "Name of Maas subnet", - "type": "string" - }, - "space": { - "description": "Space associated with Maas subnet", - "type": "string" - }, - "vlans": { - "description": "Maas vlan entity", + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", "type": "object", "properties": { - "fabric": { - "description": "Fabric associated with Maas Vlan", + "displayName": { "type": "string" }, - "id": { - "description": "Id of Maas Vlan", - "type": "integer" + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } }, "name": { - "description": "Name of Maas Vlan", "type": "string" } } @@ -57863,7 +56572,7 @@ } } }, - "/v1/clouds/maas/tags": { + "/v1/clusterprofiles/{uid}": { "get": { "security": [ { @@ -57876,15 +56585,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Maas tags for a particular account uid", - "operationId": "V1MaasTagsGet", + "summary": "Returns a specified cluster profile", + "operationId": "v1ClusterProfilesGet", "parameters": [ - { - "type": "string", - "description": "Uid for the specific Maas cloud account", - "name": "cloudAccountUid", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -57894,41 +56597,653 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "OK", "schema": { - "description": "List of Maas tags", + "description": "ClusterProfile is the Schema for the clusterprofiles API", "type": "object", - "required": [ - "items" - ], "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Maas tag", - "type": "object", - "properties": { - "comment": { - "description": "Comment on Maas tag", - "type": "string" - }, - "definition": { - "description": "Definition of Maas tag", - "type": "string" - }, - "kernelOpts": { - "description": "Kernel Opts on Maas tag", + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { "type": "string" - }, - "name": { - "description": "Name of Maas tag", + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { "type": "string" - }, - "resourceUri": { - "description": "Description of Maas tag", + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "ClusterProfileTemplate can be in draft mode, or published mode User only see the latest published template, and (or) the draft template User can apply either the draft version or the latest published version to a cluster when user create a draft version, just copy the Published template, increment the version, and keep changing the draft template without increment the draft version when user publish a draft, the version is fixed, and won't be able to make any modification on published template For each clusterprofile that has a published version, there will be a ClusterProfileArchive automatically created when user publish a draft, the published version will also be copied over to the corresponding ClusterProfileArchive it is just in case in the future for whatever reason we may want to expose earlier versions", + "type": "object", + "properties": { + "draft": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + }, + "published": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } + }, + "version": { + "type": "string" + }, + "versions": { + "description": "Cluster profile's list of all the versions", + "type": "array", + "items": { + "description": "Cluster profile with version", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "ClusterProfileStatus defines the observed state of ClusterProfile", + "type": "object", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "type": "array", + "items": { "type": "string" } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false } } } @@ -57936,10 +57251,8 @@ } } } - } - }, - "/v1/clouds/openstack/account/validate": { - "post": { + }, + "put": { "security": [ { "ApiKey": [] @@ -57948,61 +57261,162 @@ "Authorization": [] } ], - "description": "Returns no contents if account is valid else error.", "tags": [ "v1" ], - "summary": "Check if OpenStack account is valid", - "operationId": "V1OpenStackAccountValidate", + "summary": "Updates the specified cluster profile", + "operationId": "v1ClusterProfilesUpdate", "parameters": [ { - "description": "Request payload for OpenStack cloud account", - "name": "openstackCloudAccount", + "name": "body", "in": "body", - "required": true, "schema": { - "description": "auth-url,project,username,password,domain,cacert etc", + "description": "Cluster profile update request payload", "type": "object", - "required": [ - "identityEndpoint", - "username", - "password" - ], "properties": { - "caCert": { - "description": "Ca cert for OpenStack", - "type": "string" - }, - "defaultDomain": { - "description": "Default Domain name", - "type": "string" - }, - "defaultProject": { - "description": "Default Project name", - "type": "string" - }, - "identityEndpoint": { - "description": "Identity endpoint for OpenStack", - "type": "string" - }, - "insecure": { - "description": "For self signed certs in IdentityEndpoint", - "type": "boolean" - }, - "parentRegion": { - "description": "Parent region of OpenStack", - "type": "string" - }, - "password": { - "description": "Password of OpenStack account", - "type": "string" - }, - "username": { - "description": "Username of OpenStack account", - "type": "string" - } - } - } + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster profile update spec", + "type": "object", + "properties": { + "template": { + "description": "Cluster profile template update spec", + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack input entity with values to overwrite and manifests for the intial creation", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "type": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] + } + } + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + } + } + } + } }, { "type": "string", @@ -58013,19 +57427,11 @@ ], "responses": { "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } + "description": "The resource was updated successfully" } } - } - }, - "/v1/clouds/openstack/azs": { - "get": { + }, + "delete": { "security": [ { "ApiKey": [] @@ -58037,33 +57443,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of OpenStack azs for a particular account uid", - "operationId": "V1OpenStackAzsGet", + "summary": "Deletes the specified cluster profile", + "operationId": "v1ClusterProfilesDelete", "parameters": [ - { - "type": "string", - "description": "Uid for the specific OpenStack cloud account", - "name": "cloudAccountUid", - "in": "query" - }, - { - "type": "string", - "description": "project for which OpenStack azs are requested", - "name": "project", - "in": "query" - }, - { - "type": "string", - "description": "region for which OpenStack azs are requested", - "name": "region", - "in": "query" - }, - { - "type": "string", - "description": "domain for which OpenStack azs are requested", - "name": "domain", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -58072,37 +57454,29 @@ } ], "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of OpenStack azs", - "type": "object", - "required": [ - "azs" - ], - "properties": { - "azs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "OpenStack az entity", - "type": "object", - "properties": { - "name": { - "description": "Name of OpenStack az", - "type": "string" - } - } - } - } - } - } + "204": { + "description": "The resource was deleted successfully" } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Comma seperated pack meta such as schema, presets", + "name": "includePackMeta", + "in": "query" + } + ] }, - "/v1/clouds/openstack/flavors": { - "get": { + "/v1/clusterprofiles/{uid}/clone": { + "post": { "security": [ { "ApiKey": [] @@ -58114,32 +57488,57 @@ "tags": [ "v1" ], - "summary": "Returns the OpenStack flavors", - "operationId": "V1OpenStackFlavorsGet", + "summary": "Creates a clone of the specified cluster profile", + "operationId": "v1ClusterProfilesUidClone", "parameters": [ { - "type": "string", - "description": "Uid for the specific OpenStack cloud account", - "name": "cloudAccountUid", - "in": "query" - }, - { - "type": "string", - "description": "project for which OpenStack flavors are requested", - "name": "project", - "in": "query" - }, - { - "type": "string", - "description": "region for which OpenStack flavors are requested", - "name": "region", - "in": "query" - }, - { - "type": "string", - "description": "domain for which OpenStack flavors are requested", - "name": "domain", - "in": "query" + "name": "body", + "in": "body", + "schema": { + "description": "Cluster profile clone request payload", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster profile clone metadata", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Cloned cluster profile name", + "type": "string" + }, + "target": { + "description": "Cluster profile clone meta input entity", + "type": "object", + "required": [ + "scope" + ], + "properties": { + "projectUid": { + "description": "Cloned cluster profile project uid", + "type": "string" + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] + } + } + }, + "version": { + "description": "Cloned cluster profile version", + "type": "string" + } + } + } + } + } }, { "type": "string", @@ -58149,57 +57548,40 @@ } ], "responses": { - "200": { - "description": "(empty)", + "201": { + "description": "Created successfully", "schema": { - "description": "List of OpenStack flavours", "type": "object", "required": [ - "items" + "uid" ], "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "OpenStack flavor entity. Flavor represent (virtual) hardware configurations for server resources", - "type": "object", - "properties": { - "disk": { - "description": "Disk is the amount of root disk, measured in GB", - "type": "integer" - }, - "ephemeral": { - "description": "Ephemeral is the amount of ephemeral disk space, measured in GB", - "type": "integer" - }, - "id": { - "description": "ID is the flavor's unique ID", - "type": "string" - }, - "memory": { - "description": "Amount of memory, measured in MB", - "type": "integer" - }, - "name": { - "description": "Name is the name of the flavor", - "type": "string" - }, - "vcpus": { - "description": "VCPUs indicates how many (virtual) CPUs are available for this flavor", - "type": "integer" - } - } - } + "uid": { + "type": "string" } } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } } } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + } + ] }, - "/v1/clouds/openstack/keypairs": { - "get": { + "/v1/clusterprofiles/{uid}/clone/validate": { + "post": { "security": [ { "ApiKey": [] @@ -58208,116 +57590,55 @@ "Authorization": [] } ], + "description": "Validates the cloned cluster profile name, version and target project uid", "tags": [ "v1" ], - "summary": "Returns the OpenStack keypair", - "operationId": "V1OpenStackKeypairsGet", + "summary": "Validates the cluster profile clone", + "operationId": "v1ClusterProfilesUidCloneValidate", "parameters": [ { - "type": "string", - "description": "Uid for the specific OpenStack cloud account", - "name": "cloudAccountUid", - "in": "query" - }, - { - "type": "string", - "description": "project for which OpenStack keypairs are requested", - "name": "project", - "in": "query" - }, - { - "type": "string", - "description": "region for which OpenStack keypairs are requested", - "name": "region", - "in": "query" - }, - { - "type": "string", - "description": "domain for which OpenStack keypairs are requested", - "name": "domain", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", + "name": "body", + "in": "body", "schema": { - "description": "List of OpenStack keypairs", + "description": "Cluster profile clone metadata", "type": "object", "required": [ - "items" + "name" ], "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "OpenStack keypair. KeyPair is an SSH key known to the OpenStack Cloud that is available to be injected into servers", - "type": "object", - "properties": { - "name": { - "description": "Name is used to refer to this keypair from other services within this region", - "type": "string" - }, - "publicKey": { - "description": "PublicKey is the public key from this pair, in OpenSSH format", - "type": "string" - } + "name": { + "description": "Cloned cluster profile name", + "type": "string" + }, + "target": { + "description": "Cluster profile clone meta input entity", + "type": "object", + "required": [ + "scope" + ], + "properties": { + "projectUid": { + "description": "Cloned cluster profile project uid", + "type": "string" + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project", + "resource" + ] } } + }, + "version": { + "description": "Cloned cluster profile version", + "type": "string" } } } - } - } - } - }, - "/v1/clouds/openstack/networks": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the OpenStack networks", - "operationId": "V1OpenStackNetworksGet", - "parameters": [ - { - "type": "string", - "description": "Uid for the specific OpenStack cloud account", - "name": "cloudAccountUid", - "in": "query" - }, - { - "type": "string", - "description": "project for which OpenStack networks are requested", - "name": "project", - "in": "query" - }, - { - "type": "string", - "description": "region for which OpenStack networks are requested", - "name": "region", - "in": "query" - }, - { - "type": "string", - "description": "domain for which OpenStack networks are requested", - "name": "domain", - "in": "query" }, { "type": "string", @@ -58327,67 +57648,28 @@ } ], "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of OpenStack networks", - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "OpenStack network", - "type": "object", - "properties": { - "description": { - "description": "Description of OpenStack network", - "type": "string" - }, - "id": { - "description": "Id of OpenStack network", - "type": "string" - }, - "name": { - "description": "Name of OpenStack network", - "type": "string" - }, - "subnets": { - "description": "Subnets associated with OpenStack network", - "type": "array", - "uniqueItems": true, - "items": { - "description": "OpenStack subnet entity", - "type": "object", - "properties": { - "description": { - "description": "Description for the network", - "type": "string" - }, - "id": { - "description": "UUID for the network", - "type": "string" - }, - "name": { - "description": "Human-readable name for the network. Might not be unique", - "type": "string" - } - } - } - } - } - } - } + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" } } } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + } + ] }, - "/v1/clouds/openstack/projects": { + "/v1/clusterprofiles/{uid}/export": { "get": { "security": [ { @@ -58397,18 +57679,15 @@ "Authorization": [] } ], + "produces": [ + "application/octet-stream" + ], "tags": [ "v1" ], - "summary": "Returns the OpenStack projects", - "operationId": "V1OpenStackProjectsGet", + "summary": "Export the specified cluster profile", + "operationId": "V1ClusterProfilesUidExport", "parameters": [ - { - "type": "string", - "description": "Uid for the specific OpenStack cloud account", - "name": "cloudAccountUid", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -58418,51 +57697,41 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "Exports cluster profile as a file", "schema": { - "description": "Array of OpenStack projects", - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Project represents an OpenStack Identity Project", - "type": "object", - "properties": { - "description": { - "description": "Description is the description of the project", - "type": "string" - }, - "domainId": { - "description": "DomainID is the domain ID the project belongs to", - "type": "string" - }, - "id": { - "description": "ID is the unique ID of the project", - "type": "string" - }, - "name": { - "description": "Name is the name of the project", - "type": "string" - }, - "parentProjectId": { - "description": "ParentID is the parent_id of the project", - "type": "string" - } - } - } - } + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" } } } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "enum": [ + "yaml", + "json" + ], + "type": "string", + "default": "json", + "description": "Cluster profile export file format [ \"yaml\", \"json\" ]", + "name": "format", + "in": "query" + } + ] }, - "/v1/clouds/openstack/regions": { + "/v1/clusterprofiles/{uid}/export/terraform": { "get": { "security": [ { @@ -58472,18 +57741,15 @@ "Authorization": [] } ], + "produces": [ + "application/octet-stream" + ], "tags": [ "v1" ], - "summary": "Returns the OpenStack regions", - "operationId": "V1OpenStackRegionsGet", + "summary": "Downloads the specified cluster profile", + "operationId": "V1ClusterProfilesUidExportTerraform", "parameters": [ - { - "type": "string", - "description": "Uid for the specific OpenStack cloud account", - "name": "cloudAccountUid", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -58493,69 +57759,42 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "Downloads cluster profile export file", "schema": { - "description": "List of OpenStack regions and domains", - "type": "object", - "required": [ - "regions", - "domains" - ], - "properties": { - "domains": { - "description": "List of OpenStack domains", - "type": "array", - "uniqueItems": true, - "items": { - "description": "OpenStack domain. A Domain is a collection of projects, users, and roles", - "type": "object", - "properties": { - "description": { - "description": "Description is the description of the Domain", - "type": "string" - }, - "id": { - "description": "ID is the unique ID of the domain", - "type": "string" - }, - "name": { - "description": "Name is the name of the domain", - "type": "string" - } - } - } - }, - "regions": { - "description": "List of OpenStack regions", - "type": "array", - "uniqueItems": true, - "items": { - "description": "OpenStack region entity", - "type": "object", - "properties": { - "description": { - "description": "Description of OpenStack region", - "type": "string" - }, - "id": { - "description": "Id of OpenStack region", - "type": "string" - }, - "parentRegionId": { - "description": "Parent region id of OpenStack region", - "type": "string" - } - } - } - } + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" } } } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "enum": [ + "yaml", + "json" + ], + "type": "string", + "default": "yaml", + "description": "Cluster profile export file format [ \"yaml\", \"json\" ]", + "name": "format", + "in": "query" + } + ] }, - "/v1/clouds/tencent/account/validate": { - "post": { + "/v1/clusterprofiles/{uid}/metadata": { + "patch": { "security": [ { "ApiKey": [] @@ -58567,28 +57806,52 @@ "tags": [ "v1" ], - "summary": "Validate the specified Tencent account credentials", - "operationId": "V1TencentAccountValidate", + "summary": "Updates the specified cluster profile metadata", + "operationId": "v1ClusterProfilesUidMetadataUpdate", "parameters": [ { - "description": "Request payload to validate tencent cloud account", - "name": "account", + "name": "body", "in": "body", - "required": true, "schema": { + "description": "Cluster profile metadata request payload", "type": "object", "required": [ - "secretId", - "secretKey" + "metadata" ], "properties": { - "secretId": { - "description": "Tencent api secretID", - "type": "string" + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } }, - "secretKey": { - "description": "Tencent api secret key", - "type": "string" + "spec": { + "description": "Cluster profile update spec", + "type": "object", + "properties": { + "version": { + "description": "Cluster profile version", + "type": "string" + } + } } } } @@ -58602,19 +57865,22 @@ ], "responses": { "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } + "description": "The resource was updated successfully" } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + } + ] }, - "/v1/clouds/tencent/regions": { - "get": { + "/v1/clusterprofiles/{uid}/packRefs": { + "patch": { "security": [ { "ApiKey": [] @@ -58626,16 +57892,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Tencent regions for the specified account", - "operationId": "V1TencentRegions", + "summary": "Updates cluster profile packs ref", + "operationId": "v1ClusterProfilesPacksRefUpdate", "parameters": [ - { - "type": "string", - "description": "Uid for the specific Tencent cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -58644,40 +57903,114 @@ } ], "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of tencent regions", - "type": "object", - "required": [ - "regions" - ], - "properties": { - "regions": { - "description": "Tencent regions entity", - "type": "array", - "items": { - "description": "Tencent region entity", - "type": "object", - "properties": { - "name": { - "description": "Name of tencent region", - "type": "string" - }, - "state": { - "description": "State of tencent region", - "type": "string" + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Cluster profile notification uid", + "name": "notify", + "in": "query" + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster profile notification update request payload", + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack input entity with values to overwrite and manifests for the intial creation", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" } } } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" } } } } - } + ] }, - "/v1/clouds/tencent/regions/{region}/instancetypes": { + "/v1/clusterprofiles/{uid}/packs": { "get": { "security": [ { @@ -58690,44 +58023,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Tencent instance types", - "operationId": "V1TencentInstanceTypes", + "summary": "Returns the specified cluster profile packs", + "operationId": "v1ClusterProfilesUidPacksGet", "parameters": [ - { - "type": "string", - "description": "Region for which tencent instances are listed", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "number", - "format": "double", - "description": "Filter for instances having cpu greater than or equal", - "name": "cpuGtEq", - "in": "query" - }, - { - "type": "number", - "format": "double", - "description": "Filter for instances having memory greater than or equal", - "name": "memoryGtEq", - "in": "query" - }, - { - "type": "number", - "format": "double", - "description": "Filter for instances having gpu greater than or equal", - "name": "gpuGtEq", - "in": "query" - }, - { - "type": "string", - "description": "Uid for the specific tencent cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -58737,402 +58035,474 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "OK", "schema": { - "description": "List of Tencent instance types", + "description": "List of cluster profile packs", "type": "object", + "required": [ + "items" + ], "properties": { - "instanceTypes": { + "items": { + "description": "Cluster profile packs array", "type": "array", + "uniqueItems": true, "items": { - "description": "Cloud Instance type details", + "description": "Cluster profile packs object", "type": "object", "properties": { - "category": { - "description": "Category of instance type", - "type": "string", - "x-go-name": "Category" - }, - "cost": { - "description": "Instance cost entity", + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { - "price": { - "description": "Array of cloud instance price", - "type": "array", - "items": { - "description": "Cloud instance price", - "type": "object", - "properties": { - "onDemand": { - "description": "OnDemand price of instance", - "type": "number", - "format": "double" - }, - "os": { - "description": "Os associated with instance price. Allowed values - [linux, windows]", - "type": "string", - "enum": [ - "linux", - "windows" - ] - }, - "spot": { - "description": "Spot price of instance", - "type": "number", - "format": "double" - } - } + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" } } }, - "cpu": { - "description": "Cpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Cpu" - }, - "gpu": { - "description": "Gpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Gpu" - }, - "memory": { - "description": "Memory of instance type", - "type": "number", - "format": "double", - "x-go-name": "Memory" - }, - "nonSupportedZones": { - "description": "Non supported zones of the instance in a particular region", - "type": "array", - "items": { - "type": "string" - } - }, - "price": { - "description": "Price of instance type", - "type": "number", - "format": "double", - "x-go-name": "Price" - }, - "supportedArchitectures": { - "description": "Supported architecture of the instance", - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "description": "Type of instance type", - "type": "string", - "x-go-name": "Type" - } - } - } - } - } - } - } - } - } - }, - "/v1/clouds/tencent/regions/{region}/keypairs": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of keypairs for the specified account", - "operationId": "V1TencentKeypairs", - "parameters": [ - { - "type": "string", - "description": "Region for which keypairs are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific Tencent cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of Tencent keypairs", - "type": "object", - "properties": { - "keypairs": { - "type": "array", - "items": { - "description": "Tencent Keypair entity", - "type": "object", - "properties": { - "id": { - "description": "Tencent keypair id", - "type": "string" - }, - "name": { - "description": "Tencent keypair name", - "type": "string" - }, - "publickey": { - "description": "Tencent public key", - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "/v1/clouds/tencent/regions/{region}/securitygroups": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of secutity groups for the specified account", - "operationId": "V1TencentSecurityGroups", - "parameters": [ - { - "type": "string", - "description": "Region for which security groups are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific Tencent cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of Tencent security groups", - "type": "object", - "properties": { - "groups": { - "type": "array", - "items": { - "description": "Tencent Security Group. A security group is a virtual firewall that features stateful data packet filtering", - "type": "object", - "properties": { - "id": { - "description": "Tencent security group id", - "type": "string" - }, - "isDefault": { - "description": "Whether it is the default security group, the default security group does not support deletion.", - "type": "boolean" - }, - "name": { - "description": "Tencent security group name", - "type": "string" - }, - "projectId": { - "description": "Tencent security group associated to a project", - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "/v1/clouds/tencent/regions/{region}/storagetypes": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of Tencent storage types", - "operationId": "V1TencentStorageTypes", - "parameters": [ - { - "type": "string", - "description": "Region for which tencent storages are listed", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific tencent cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Zone for which tencent storages are listed", - "name": "zone", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of Tencent storage types", - "type": "object", - "properties": { - "storageTypes": { - "type": "array", - "items": { - "description": "Cloud cloud Storage type details", - "type": "object", - "properties": { - "cost": { - "description": "Cloud storage cost", + "spec": { + "description": "Pack object", "type": "object", "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", "type": "string" }, - "price": { - "description": "Array of cloud storage range prices", + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", "type": "array", "items": { - "description": "Cloud storage price within an upper limit.", + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", "type": "object", "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", "type": "string" }, - "price": { - "description": "Price of cloud storage type", + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } } - } - } - }, - "iopsCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", + }, + "name": { + "description": "Pack name", "type": "string" }, - "price": { - "description": "Array of cloud storage range prices", + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", "type": "array", "items": { - "description": "Cloud storage price within an upper limit.", + "description": "PackPreset defines the preset pack values", "type": "object", "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" + "add": { + "type": "string", + "x-omitempty": false }, - "price": { - "description": "Price of cloud storage type", - "type": "string" + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false } } } - } - } - }, - "kind": { - "description": "kind of storage type", - "type": "string" - }, - "name": { - "description": "Name of the storage type", - "type": "string" - }, - "throughputCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", + }, + "registryUid": { + "description": "Pack registry uid", "type": "string" }, - "price": { - "description": "Array of cloud storage range prices", + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", "type": "array", "items": { - "description": "Cloud storage price within an upper limit.", + "description": "PackSchema defines the schema definition, hints for the pack values", "type": "object", "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" + "format": { + "type": "string", + "x-omitempty": false }, - "price": { - "description": "Price of cloud storage type", - "type": "string" + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } } + }, + "values": { + "description": "Pack template values", + "type": "string" } } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" } } + }, + "status": { + "description": "Pack status", + "type": "object" } } } @@ -59141,10 +58511,8 @@ } } } - } - }, - "/v1/clouds/tencent/regions/{region}/vpcs": { - "get": { + }, + "post": { "security": [ { "ApiKey": [] @@ -59156,124 +58524,77 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of VPCs for the specified account", - "operationId": "V1TencentVpcs", + "summary": "Adds a new pack to the specified cluster profile and returns the created pack uid", + "operationId": "v1ClusterProfilesUidPacksAdd", "parameters": [ { - "type": "string", - "description": "Region for which VPCs are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific Tencent cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", + "name": "body", + "in": "body", "schema": { - "description": "List of Tencent VPCs", - "type": "object", - "required": [ - "vpcs" - ], + "description": "Pack request payload", "properties": { - "vpcs": { - "type": "array", - "items": { - "description": "Tencent VPC entity", - "type": "object", - "required": [ - "vpcId" - ], - "properties": { - "cidrBlock": { - "description": "Tencent VPC CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", - "type": "string" - }, - "name": { - "description": "Tencent VPC name", - "type": "string" - }, - "subnets": { - "type": "array", - "items": { - "description": "Tencent Subnet entity", - "type": "object", - "properties": { - "az": { - "description": "Availability zone associated with tencent subnet", - "type": "string" - }, - "cidrBlock": { - "description": "Tencent subnet CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", - "type": "string" - }, - "name": { - "description": "Tencent subnet name", - "type": "string" - }, - "subnetId": { - "description": "Tencent subnet id", - "type": "string" - } + "pack": { + "description": "Pack request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" } } - }, - "vpcId": { - "description": "Tencent VPC id", - "type": "string" } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" } } } } } - } - } - } - }, - "/v1/clouds/tencent/regions/{region}/zones": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of Tencent availability zones for the specified region", - "operationId": "V1TencentZones", - "parameters": [ - { - "type": "string", - "description": "Region for which zones are requested", - "name": "region", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Uid for the specific Tencent cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true }, { "type": "string", @@ -59283,100 +58604,19 @@ } ], "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of Tencent Availability zones", - "type": "object", - "required": [ - "zones" - ], - "properties": { - "zones": { - "type": "array", - "items": { - "description": "Tencent availability zone", - "type": "object", - "properties": { - "name": { - "description": "Tencent availability zone name", - "type": "string" - }, - "state": { - "description": "Tencent availability zone state", - "type": "string" - }, - "zoneId": { - "description": "Tencent availability zone id", - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "/v1/clouds/vsphere/account/validate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "description": "Returns no contents if account is valid else error.", - "tags": [ - "v1" - ], - "summary": "Check if Vsphere account is valid", - "operationId": "V1VsphereAccountValidate", - "parameters": [ - { - "description": "Request payload for VSphere cloud account", - "name": "vsphereCloudAccount", - "in": "body", - "required": true, + "201": { + "description": "Created successfully", "schema": { "type": "object", "required": [ - "vcenterServer", - "username", - "password" + "uid" ], "properties": { - "insecure": { - "description": "Insecure is a flag that controls whether or not to validate the vSphere server's certificate.", - "type": "boolean", - "x-omitempty": false - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - }, - "vcenterServer": { - "description": "VcenterServer is the address of the vSphere endpoint", + "uid": { "type": "string" } } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", + }, "headers": { "AuditUid": { "type": "string", @@ -59385,9 +58625,24 @@ } } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Comma seperated pack meta such as schema, presets", + "name": "includePackMeta", + "in": "query" + } + ] }, - "/v1/clouds/vsphere/datacenters": { + "/v1/clusterprofiles/{uid}/packs/manifests": { "get": { "security": [ { @@ -59400,106 +58655,9 @@ "tags": [ "v1" ], - "summary": "Returns the vsphere data centers", - "operationId": "V1VsphereDatacenters", + "summary": "Returns the specified cluster profile pack manifests", + "operationId": "v1ClusterProfilesUidPacksManifestsGet", "parameters": [ - { - "type": "string", - "description": "Uid for the specific OpenStack cloud account", - "name": "cloudAccountUid", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "List of Datacenters with computeclusters", - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "description": "List of associated datacenters", - "type": "array", - "uniqueItems": true, - "items": { - "description": "List of Datacenter with computeclusters", - "type": "object", - "properties": { - "computeclusters": { - "description": "List of the VSphere compute clusters in datacenter", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "datacenter": { - "description": "name of the datacenter of the VSphere", - "type": "string" - }, - "folders": { - "description": "List of the VSphere folders in datacenter", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - } - } - } - } - } - } - }, - "/v1/clouds/vsphere/datacenters/{uid}/computeclusters/{computecluster}": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the resources for vsphere compute cluster", - "operationId": "V1VsphereComputeClusterResources", - "parameters": [ - { - "type": "string", - "description": "Uid for the specific VSphere cloud account", - "name": "cloudAccountUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "computecluster for which resources is requested", - "name": "computecluster", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "VSphere datacenter uid for which resources is requested", - "name": "uid", - "in": "path", - "required": true - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -59509,123 +58667,322 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "OK", "schema": { - "description": "Datacenter and its resources like datastore, resoucepool, folders", + "description": "Cluster profile pack manifests", "type": "object", "properties": { - "computecluster": { - "description": "Vsphere compute cluster", + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { - "datastores": { - "type": "array", - "uniqueItems": true, - "items": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { "type": "string" } }, - "name": { - "type": "string" + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "networks": { - "type": "array", - "uniqueItems": true, - "items": { + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { "type": "string" } }, - "resourcePools": { + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "packs": { + "description": "Cluster profile packs array", "type": "array", "uniqueItems": true, "items": { - "type": "string" + "description": "Cluster profile pack manifests", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Pack manifests spec", + "type": "object", + "properties": { + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "type": "array", + "items": { + "description": "Manifest object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "status": { + "description": "Pack status", + "type": "object" + } + } } } } - }, - "datacenter": { - "description": "Name of the datacenter", - "type": "string" } } } } } - } - }, - "/v1/clouds/vsphere/env": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves vsphere env", - "operationId": "V1VsphereEnv", - "parameters": [ - { - "description": "Request payload for VSphere cloud account", - "name": "vsphereCloudAccount", - "in": "body", - "required": true, - "schema": { - "type": "object", - "required": [ - "vcenterServer", - "username", - "password" - ], - "properties": { - "insecure": { - "description": "Insecure is a flag that controls whether or not to validate the vSphere server's certificate.", - "type": "boolean", - "x-omitempty": false - }, - "password": { - "type": "string" - }, - "username": { - "type": "string" - }, - "vcenterServer": { - "description": "VcenterServer is the address of the vSphere endpoint", - "type": "string" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "Vsphere environment entity", - "type": "object", - "properties": { - "version": { - "description": "Version of vsphere environment", - "type": "string" - } - } - } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Comma seperated pack meta such as schema, presets", + "name": "includePackMeta", + "in": "query" } - } + ] }, - "/v1/clouds/{cloudType}/instance/spotprice": { + "/v1/clusterprofiles/{uid}/packs/resolvedValues": { "get": { "security": [ { @@ -59638,37 +58995,9 @@ "tags": [ "v1" ], - "summary": "Retrieves the cloud instance spot price based on zone and timestamp for a specific cloud", - "operationId": "V1CloudInstanceSpotPriceGet", + "summary": "Returns the specified cluster profile packs resolved values", + "operationId": "v1ClusterProfilesUidPacksResolvedValuesGet", "parameters": [ - { - "type": "string", - "description": "Cloud type [aws/azure/gcp/tencent]", - "name": "cloudType", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Instance type for a specific cloud type", - "name": "instanceType", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Availability zone for a specific cloud type", - "name": "zone", - "in": "query", - "required": true - }, - { - "type": "string", - "format": "date-time", - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "name": "timestamp", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -59678,96 +59007,49 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "OK", "schema": { - "description": "Spot price entity of a particular cloud type", - "type": "object", + "description": "Pack resolved values", "properties": { - "spotPrice": { - "description": "Spot price of a resource for a particular cloud", - "type": "number", - "format": "float64", - "x-omitempty": false + "resolved": { + "description": "Pack resolved values map", + "type": "object", + "additionalProperties": { + "type": "string" + } } } } } } - } - }, - "/v1/clouds/{cloud}/compute/{type}/rate": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the cloud compute rate", - "operationId": "V1CloudComputeRate", - "parameters": [ - { - "type": "string", - "description": "cloud for which compute rate is requested", - "name": "cloud", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "instance type for which compute rate is requested", - "name": "type", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "region for which compute rate is requested", - "name": "region", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Pack params request payload", + "properties": { + "references": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" } } } } } - } + ] }, - "/v1/clouds/{cloud}/storage/{type}/rate": { + "/v1/clusterprofiles/{uid}/packs/{packName}": { "get": { "security": [ { @@ -59780,36 +59062,9 @@ "tags": [ "v1" ], - "summary": "Returns the cloud storage rate", - "operationId": "V1CloudStorageRate", + "summary": "Returns the specified cluster profile pack", + "operationId": "V1ClusterProfilesUidPacksNameGet", "parameters": [ - { - "type": "string", - "description": "cloud for which compute rate is requested", - "name": "cloud", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "storage type for which compute rate is requested", - "name": "type", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "region for which compute rate is requested", - "name": "region", - "in": "query", - "required": true - }, - { - "type": "integer", - "description": "maxDiskType for which compute rate is requested", - "name": "maxDiskType", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -59819,60 +59074,17 @@ ], "responses": { "200": { - "description": "(empty)", + "description": "OK", "schema": { - "description": "Cloud cost information", + "description": "Pack summary response", "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - } - }, - "/v1/clustergroups": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Create cluster groups", - "operationId": "v1ClusterGroupsCreate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster group information", "properties": { "metadata": { "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -59889,7 +59101,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -59901,221 +59113,527 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Cluster group specifications request entity", + "description": "Pack summary spec", "properties": { - "clusterRefs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster group cluster reference", - "properties": { - "clusterName": { - "type": "string" - }, - "clusterUid": { + "macros": { + "description": "Pack resolved values", + "properties": { + "resolved": { + "description": "Pack resolved values map", + "type": "object", + "additionalProperties": { "type": "string" } } } }, - "clustersConfig": { - "description": "Clusters config of cluster group", + "pack": { + "description": "Pack object", + "type": "object", "properties": { - "endpointType": { - "description": "Host cluster endpoint type", + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "type": "array", + "items": { + "type": "string" + } + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { "type": "string", "enum": [ - "Ingress", - "LoadBalancer" + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" ] }, - "hostClustersConfig": { + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", "type": "array", - "uniqueItems": true, "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", "properties": { - "clusterUid": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", "type": "string" }, - "endpointConfig": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" } } } }, - "kubernetesDistroType": { - "type": "string", - "default": "k3s", - "enum": [ - "k3s", - "cncf_k8s" - ] + "name": { + "description": "Pack name", + "type": "string" }, - "limitConfig": { - "description": "Cluster group limit config", - "properties": { - "cpu": { - "description": "Deprecated. Use field cpuMilliCore", - "type": "integer", - "format": "int32" - }, - "cpuMilliCore": { - "description": "CPU in milli cores", - "type": "integer", - "format": "int32" - }, - "memory": { - "description": "Deprecated. Use field memoryMiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "Memory in MiB", - "type": "integer", - "format": "int32" - }, - "overSubscription": { - "description": "Over subscription percentage", - "type": "integer", - "format": "int32" - }, - "storageGiB": { - "description": "Storage in GiB", - "type": "integer", - "format": "int32" + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } } } }, - "values": { + "registryUid": { + "description": "Pack registry uid", "type": "string" - } - } - }, - "profiles": { - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack values entity to refer the existing pack for the values override", - "type": "object", - "required": [ - "name" - ], + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "template": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "description": "Pack template parameters", "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", + "inputParameters": { + "description": "Pack template input parameters array", "type": "array", "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], + "description": "Pack template parameter", "properties": { - "content": { - "description": "Manifest content in yaml", + "description": { + "description": "Pack template parameter description", "type": "string" }, - "name": { - "description": "Manifest name", + "displayName": { + "description": "Pack template parameter display name", "type": "string" }, - "uid": { - "description": "Manifest uid", + "format": { + "description": "Pack template parameter format", "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + }, + "outputParameters": { + "description": "Pack template output parameters array", + "type": "array", + "items": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "type": "array", + "items": { + "type": "string" + } + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "description": "Pack template parameter options array", + "type": "object", + "additionalProperties": { + "description": "Pack template parameter option", + "type": "object", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "type": "array", + "items": { + "description": "Pack template dependency", + "type": "object", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + } + } + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + } + } + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + } + } + } + }, + "values": { + "description": "Pack template values", + "type": "string" + } } + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + } + }, + "registry": { + "description": "Registry meta", + "type": "object", + "properties": { + "isDefault": { + "type": "boolean", + "x-omitempty": false + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "uid": { + "type": "string" } } + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified pack information in the cluster profile", + "operationId": "v1ClusterProfilesUidPacksNameUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Pack update request payload", + "properties": { + "pack": { + "description": "Pack object", + "type": "object", + "required": [ + "uid", + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" }, "type": { "type": "string", + "default": "spectro", "enum": [ - "hostCluster" + "spectro", + "helm", + "manifest", + "oci" ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" } } } @@ -60130,31 +59648,12 @@ } ], "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } + "204": { + "description": "The resource was updated successfully" } } - } - }, - "/v1/clustergroups/developerCredit/usage/{scope}": { - "get": { + }, + "delete": { "security": [ { "ApiKey": [] @@ -60166,8 +59665,8 @@ "tags": [ "v1" ], - "summary": "Get cluster group developer credit usage by scope", - "operationId": "v1ClusterGroupsDeveloperCreditUsageGet", + "summary": "Deletes the specified pack information in the cluster profile", + "operationId": "v1ClusterProfilesUidPacksNameDelete", "parameters": [ { "type": "string", @@ -60177,84 +59676,29 @@ } ], "responses": { - "200": { - "description": "Cluster group developer credit usage", - "schema": { - "description": "Cluster group resource allocated and usage information", - "properties": { - "allocatedCredit": { - "description": "Credits allocated for each tenant/user", - "properties": { - "cpu": { - "description": "cpu in cores", - "type": "number", - "format": "int32", - "x-omitempty": false - }, - "memoryGiB": { - "description": "memory in GiB", - "type": "number", - "format": "int32", - "x-omitempty": false - }, - "storageGiB": { - "description": "storage in GiB", - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "virtualClustersLimit": { - "description": "number of active virtual clusters", - "type": "number", - "format": "int32", - "x-omitempty": false - } - } - }, - "usedCredit": { - "description": "Credits allocated for each tenant/user", - "properties": { - "cpu": { - "description": "cpu in cores", - "type": "number", - "format": "int32", - "x-omitempty": false - }, - "memoryGiB": { - "description": "memory in GiB", - "type": "number", - "format": "int32", - "x-omitempty": false - }, - "storageGiB": { - "description": "storage in GiB", - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "virtualClustersLimit": { - "description": "number of active virtual clusters", - "type": "number", - "format": "int32", - "x-omitempty": false - } - } - } - } - } + "204": { + "description": "The resource was deleted successfully" } } }, "parameters": [ { "type": "string", - "name": "scope", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Cluster profile pack name", + "name": "packName", "in": "path", "required": true } ] }, - "/v1/clustergroups/hostCluster": { + "/v1/clusterprofiles/{uid}/packs/{packName}/config": { "get": { "security": [ { @@ -60267,9 +59711,30 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of cluster groups host cluster summary", - "operationId": "v1ClusterGroupsHostClusterSummary", + "summary": "Returns the specified cluster profile pack configuration", + "operationId": "v1ClusterProfilesUidPacksConfigGet", "parameters": [ + { + "type": "string", + "description": "cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Cluster profile pack name", + "name": "packName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Cluster profile pack uid", + "name": "packUid", + "in": "query", + "required": true + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -60279,360 +59744,75 @@ ], "responses": { "200": { - "description": "An array of cluster groups of host cluster type summary", + "description": "An array of cluster profile pack configurations", "schema": { "type": "object", "required": [ - "summaries" + "items" ], "properties": { - "summaries": { + "items": { + "description": "Cluster profile packs array", "type": "array", "uniqueItems": true, "items": { - "description": "Cluster group summay", + "description": "Pack configuration", + "type": "object", "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "spec": { "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", + "associatedObject": { "type": "string" }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Cluster group summay spec", - "properties": { - "clusterProfileTemplates": { + "isValuesOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "manifests": { "type": "array", "items": { - "description": "Cluster profile template meta information", "type": "object", "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "description": "Cluster profile name", + "digest": { "type": "string" }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" - } - } - } + "isOverridden": { + "type": "boolean", + "x-omitempty": false }, - "scope": { - "description": "scope or context(system, tenant or project)", + "name": { "type": "string" }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "parentUid": { "type": "string" }, "uid": { - "description": "Cluster profile uid", "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" } } } }, - "cpu": { - "description": "Cluster group resource allocated and usage information", - "properties": { - "allocated": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "used": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } + "name": { + "type": "string" }, - "endpointType": { - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] + "packUid": { + "type": "string" }, - "hostClusters": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } + "scope": { + "type": "string" }, - "hostClustersCount": { - "type": "integer", - "x-omitempty": false + "tag": { + "type": "string" }, - "memory": { - "description": "Cluster group resource allocated and usage information", - "properties": { - "allocated": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "used": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } + "type": { + "type": "string" }, - "scope": { + "values": { "type": "string" }, - "virtualClustersCount": { - "type": "integer", - "x-omitempty": false + "version": { + "type": "string" } } } @@ -60645,7 +59825,7 @@ } } }, - "/v1/clustergroups/hostCluster/metadata": { + "/v1/clusterprofiles/{uid}/packs/{packName}/manifests": { "get": { "security": [ { @@ -60658,8 +59838,8 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of cluster groups host cluster metadata", - "operationId": "v1ClusterGroupsHostClusterMetadata", + "summary": "Returns the associated manifests for the specified profile's pack", + "operationId": "v1ClusterProfilesUidPacksUidManifests", "parameters": [ { "type": "string", @@ -60670,7 +59850,7 @@ ], "responses": { "200": { - "description": "An array of cluster groups host cluster metadata items", + "description": "OK", "schema": { "type": "object", "required": [ @@ -60678,20 +59858,88 @@ ], "properties": { "items": { + "description": "Manifests array", "type": "array", "uniqueItems": true, "items": { - "description": "Object scope identity meta", - "type": "object", + "description": "Manifest object", "properties": { - "name": { - "type": "string" - }, - "scope": { - "type": "string" + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } }, - "uid": { - "type": "string" + "spec": { + "description": "Manifest spec", + "type": "object", + "properties": { + "draft": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + }, + "published": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + } + } + } } } } @@ -60700,10 +59948,8 @@ } } } - } - }, - "/v1/clustergroups/validate/name": { - "get": { + }, + "post": { "security": [ { "ApiKey": [] @@ -60715,14 +59961,25 @@ "tags": [ "v1" ], - "summary": "Validates the cluster groups name", - "operationId": "v1ClusterGroupsValidateName", + "summary": "Adds manifest to the profiles packs and returns the added manifests uid", + "operationId": "v1ClusterProfilesUidPacksNameManifestsAdd", "parameters": [ { - "type": "string", - "name": "name", - "in": "query", - "required": true + "name": "body", + "in": "body", + "schema": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } }, { "type": "string", @@ -60732,8 +59989,19 @@ } ], "responses": { - "204": { - "description": "Ok response without content", + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, "headers": { "AuditUid": { "type": "string", @@ -60742,9 +60010,25 @@ } } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Cluster profile pack name", + "name": "packName", + "in": "path", + "required": true + } + ] }, - "/v1/clustergroups/{uid}": { + "/v1/clusterprofiles/{uid}/packs/{packName}/manifests/{manifestUid}": { "get": { "security": [ { @@ -60757,8 +60041,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified cluster groups", - "operationId": "v1ClusterGroupsUidGet", + "summary": "Returns the specified cluster profile pack manifest", + "operationId": "v1ClusterProfilesUidPacksNameManifestsUidGet", "parameters": [ { "type": "string", @@ -60771,14 +60055,14 @@ "200": { "description": "OK", "schema": { - "description": "Cluster group information", + "description": "Manifest object", "properties": { "metadata": { "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -60795,7 +60079,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -60807,424 +60091,96 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Cluster group specifications", + "description": "Manifest spec", + "type": "object", "properties": { - "clusterProfileTemplates": { - "description": "ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec. It consists of list of add on profiles at a cluster group level which will be enforced on all virtual cluster. ClusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", - "type": "array", - "items": { - "description": "ClusterProfileTemplate contains details of a clusterprofile definition", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packServerRefs": { - "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "packServerSecret": { - "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", - "type": "string" - }, - "packs": { - "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" - } - } - } - }, - "profileVersion": { - "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", - "type": "string" - }, - "relatedObject": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "description": "Deprecated. Use profileVersion", - "type": "integer", - "format": "int32" - } - } - } - }, - "clusterRefs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster group cluster reference", - "properties": { - "clusterName": { - "type": "string" - }, - "clusterUid": { - "type": "string" - } + "draft": { + "description": "Published manifest object", + "type": "object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" } } }, - "clustersConfig": { - "description": "Clusters config of cluster group", + "published": { + "description": "Published manifest object", + "type": "object", "properties": { - "endpointType": { - "description": "Host cluster endpoint type", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - }, - "hostClustersConfig": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "clusterUid": { - "type": "string" - }, - "endpointConfig": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "kubernetesDistroType": { - "type": "string", - "default": "k3s", - "enum": [ - "k3s", - "cncf_k8s" - ] - }, - "limitConfig": { - "description": "Cluster group limit config", - "properties": { - "cpu": { - "description": "Deprecated. Use field cpuMilliCore", - "type": "integer", - "format": "int32" - }, - "cpuMilliCore": { - "description": "CPU in milli cores", - "type": "integer", - "format": "int32" - }, - "memory": { - "description": "Deprecated. Use field memoryMiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "Memory in MiB", - "type": "integer", - "format": "int32" - }, - "overSubscription": { - "description": "Over subscription percentage", - "type": "integer", - "format": "int32" - }, - "storageGiB": { - "description": "Storage in GiB", - "type": "integer", - "format": "int32" - } - } + "content": { + "description": "Manifest content in yaml", + "type": "string" }, - "values": { + "digest": { + "description": "Manifest digest", "type": "string" } } - }, - "type": { - "type": "string", - "enum": [ - "hostCluster" - ] } } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified manifest of the profile's pack", + "operationId": "v1ClusterProfilesUidPacksNameManifestsUidUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" }, - "status": { - "description": "Cluster group status", - "properties": { - "isActive": { - "type": "boolean", - "x-omitempty": false - } - } + "name": { + "description": "Manifest name", + "type": "string" } } } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" } } }, @@ -61240,8 +60196,8 @@ "tags": [ "v1" ], - "summary": "Deletes the specified cluster group", - "operationId": "v1ClusterGroupsUidDelete", + "summary": "Deletes the specified cluster profile pack manifest", + "operationId": "v1ClusterProfilesUidPacksNameManifestsUidDelete", "parameters": [ { "type": "string", @@ -61259,14 +60215,29 @@ "parameters": [ { "type": "string", + "description": "Cluster profile uid", "name": "uid", "in": "path", "required": true + }, + { + "type": "string", + "description": "Cluster profile pack name", + "name": "packName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Cluster profile pack manifest uid", + "name": "manifestUid", + "in": "path", + "required": true } ] }, - "/v1/clustergroups/{uid}/hostCluster": { - "put": { + "/v1/clusterprofiles/{uid}/publish": { + "patch": { "security": [ { "ApiKey": [] @@ -61275,142 +60246,55 @@ "Authorization": [] } ], + "description": "Publish the draft cluster profile with next revision, the current draft cluster profile will be marked to published\nand the draft cluster profile will be set to null in the cluster profile template.\n", "tags": [ "v1" ], - "summary": "Updates cluster reference and host cluster config", - "operationId": "v1ClusterGroupsUidHostClusterUpdate", + "summary": "Publishes the specified cluster profile", + "operationId": "v1ClusterProfilesPublish", "parameters": [ { - "name": "body", - "in": "body", - "schema": { - "description": "Clusters and clusters config of cluster group", - "properties": { - "clusterRefs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster group cluster reference", - "properties": { - "clusterName": { - "type": "string" - }, - "clusterUid": { - "type": "string" - } - } - } - }, - "clustersConfig": { - "description": "Clusters config of cluster group", - "properties": { - "endpointType": { - "description": "Host cluster endpoint type", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - }, - "hostClustersConfig": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "clusterUid": { - "type": "string" - }, - "endpointConfig": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "kubernetesDistroType": { - "type": "string", - "default": "k3s", - "enum": [ - "k3s", - "cncf_k8s" - ] - }, - "limitConfig": { - "description": "Cluster group limit config", - "properties": { - "cpu": { - "description": "Deprecated. Use field cpuMilliCore", - "type": "integer", - "format": "int32" - }, - "cpuMilliCore": { - "description": "CPU in milli cores", - "type": "integer", - "format": "int32" - }, - "memory": { - "description": "Deprecated. Use field memoryMiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "Memory in MiB", - "type": "integer", - "format": "int32" - }, - "overSubscription": { - "description": "Over subscription percentage", - "type": "integer", - "format": "int32" - }, - "storageGiB": { - "description": "Storage in GiB", - "type": "integer", - "format": "int32" - } - } - }, - "values": { - "type": "string" - } - } - } - } - } + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Cluster profile published successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/clusterprofiles/{uid}/spc/download": { + "get": { + "security": [ + { + "ApiKey": [] }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Downloads the specified cluster profile", + "operationId": "v1ClusterProfilesUidSpcDownload", + "parameters": [ { "type": "string", "description": "Scope the request to the specified project uid", @@ -61419,22 +60303,32 @@ } ], "responses": { - "204": { - "description": "The resource was updated successfully" + "200": { + "description": "Download cluster profile archive file", + "schema": { + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" + } + } } } }, "parameters": [ { "type": "string", + "description": "Cluster profile uid", "name": "uid", "in": "path", "required": true } ] }, - "/v1/clustergroups/{uid}/meta": { - "put": { + "/v1/clusterprofiles/{uid}/validate/packs": { + "post": { "security": [ { "ApiKey": [] @@ -61446,52 +60340,100 @@ "tags": [ "v1" ], - "summary": "Updates the specified cluster groups meta", - "operationId": "v1ClusterGroupsUidMetaUpdate", + "summary": "Validates specified cluster profile packs", + "operationId": "v1ClusterProfilesUidValidatePacks", "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + }, { "name": "body", "in": "body", "schema": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "description": "Cluster profile template spec", "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" + "cloudType": { + "type": "string" }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack request payload", + "type": "object", + "required": [ + "name" + ], + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } } }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": { "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] } } } @@ -61504,21 +60446,56 @@ } ], "responses": { - "204": { - "description": "The resource was updated successfully" + "200": { + "description": "Cluster profile packs validation response", + "schema": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + } + } + } } } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] + } }, - "/v1/clustergroups/{uid}/packs/resolvedValues": { + "/v1/clusterprofiles/{uid}/variables": { "get": { "security": [ { @@ -61531,8 +60508,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified clustergroup's profile packs resolved values", - "operationId": "v1ClusterGroupsUidPacksResolvedValuesGet", + "summary": "Retrieve a list of variables defined for the cluster profile", + "operationId": "V1ClusterProfilesUidVariablesGet", "parameters": [ { "type": "string", @@ -61545,25 +60522,72 @@ "200": { "description": "OK", "schema": { - "description": "Cluster profiles resolved values response", "type": "object", "properties": { - "profiles": { + "variables": { + "description": "List of unique variable fields with schema constraints", "type": "array", "uniqueItems": true, "items": { - "description": "Cluster profile resolved pack values", + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], "properties": { - "resolved": { - "description": "Cluster profile pack resolved values", - "type": "object", - "additionalProperties": { - "type": "string" - } + "defaultValue": { + "description": "The default value of the variable", + "type": "string" }, - "uid": { - "description": "Cluster profile uid", + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false } } } @@ -61573,35 +60597,112 @@ } } }, - "parameters": [ - { - "type": "string", - "description": "Cluster group uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster profiles param reference entity", - "type": "object", - "properties": { - "references": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the variables defined for a cluster profile", + "operationId": "V1ClusterProfilesUidVariablesPut", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "variables": { + "description": "List of unique variable fields with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } } } } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" } } - ] - }, - "/v1/clustergroups/{uid}/profiles": { - "get": { + }, + "delete": { "security": [ { "ApiKey": [] @@ -61613,14 +60714,27 @@ "tags": [ "v1" ], - "summary": "Returns the associated profiles of a specified cluster group", - "operationId": "v1ClusterGroupsUidProfilesGet", + "summary": "Deletes the specified cluster profile variables", + "operationId": "V1ClusterProfilesUidVariablesDelete", "parameters": [ { - "type": "string", - "description": "includes pack meta such as schema, presets", - "name": "includePackMeta", - "in": "query" + "name": "body", + "in": "body", + "schema": { + "required": [ + "variables" + ], + "properties": { + "variables": { + "description": "Array of variable names", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } }, { "type": "string", @@ -61630,26 +60744,313 @@ } ], "responses": { - "200": { - "description": "OK", + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update specific variables defined for a cluster profile", + "operationId": "V1ClusterProfilesUidVariablesPatch", + "parameters": [ + { + "name": "body", + "in": "body", "schema": { "type": "object", - "required": [ - "profiles" - ], "properties": { - "profiles": { + "variables": { + "description": "List of unique variable fields with schema constraints", "type": "array", + "uniqueItems": true, "items": { - "description": "Cluster profile response", + "description": "Unique variable field with schema definition", "type": "object", + "required": [ + "name" + ], "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster profile uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/dashboard/appDeployments": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of application deployments filter summary Supported filter fields - [\"appDeploymentName\", \"clusterUid\", \"tags\"] Supported sort fields - [\"appDeploymentName\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "operationId": "v1DashboardAppDeployments", + "parameters": [ + { + "maximum": 20, + "type": "integer", + "format": "int64", + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Application deployment filter summary spec", + "properties": { + "filter": { + "description": "Application deployment filter spec", + "properties": { + "appDeploymentName": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + }, + "clusterUids": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + }, + "tags": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "appDeploymentName", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of application deployment summary items", + "schema": { + "type": "object", + "properties": { + "appDeployments": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -61666,7 +61067,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -61678,664 +61079,190 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Cluster profile spec response", + "description": "Application deployment spec summary", "type": "object", "properties": { - "cloudType": { - "description": "Cluster profile cloud type", - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster profile packs object", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { + "config": { + "description": "Application deployment config summary", + "properties": { + "target": { + "description": "Application deployment target config summary", + "properties": { + "clusterRef": { + "description": "Application deployment cluster reference", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "type": "string", + "enum": [ + "virtual", + "host" + ] + }, + "name": { + "description": "Application deployment source cluster name", "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + }, + "uid": { + "description": "Application deployment source cluster uid", "type": "string" } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" } } - }, - "spec": { - "description": "Pack object", - "type": "object", - "properties": { - "addonSubType": { - "description": "Pack add-on sub type such as monitoring, db etc", - "type": "string" - }, - "addonType": { - "description": "Pack add-on type such as logging, monitoring, security etc", - "type": "string" - }, - "annotations": { - "description": "Pack annotations is used to allow pack to add more arbitrary configurations", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "cloudTypes": { - "description": "Pack supported cloud types", - "type": "array", - "items": { - "type": "string" - } - }, - "digest": { - "description": "Pack digest", - "type": "string" - }, - "displayName": { - "description": "Pack display name", - "type": "string" - }, - "eol": { - "description": "Pack end of life, date format: yyyy-MM-dd", - "type": "string" - }, - "group": { - "description": "Pack group", - "type": "string" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logoUrl": { - "description": "Pack logo url", - "type": "string" - }, - "manifests": { - "description": "Pack manifests are additional content as part of the cluster profile", - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "presets": { - "description": "Pack presets are the set of configurations applied on user selection of presets", - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { + } + } + } + }, + "profile": { + "description": "Application deployment profile summary", + "properties": { + "metadata": { + "description": "Application deployment profile metadata summary", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "template": { + "description": "Application profile template summary", + "type": "object", + "properties": { + "appTiers": { + "type": "array", + "items": { + "description": "Application profile's tier summary", + "properties": { + "name": { + "type": "string" + }, + "source": { + "description": "Application profile's tier source information", + "properties": { + "addonSubType": { "type": "string" }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "Pack registry uid", - "type": "string" - }, - "schema": { - "description": "Pack schema contains constraints such as data type, format, hints for the pack values", - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { + "addonType": { "type": "string" }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { + "logoUrl": { "type": "string" }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "template": { - "description": "Pack template configuration", - "properties": { - "manifest": { - "description": "Pack template manifest content", - "type": "string" - }, - "parameters": { - "description": "Pack template parameters", - "properties": { - "inputParameters": { - "description": "Pack template input parameters array", - "type": "array", - "items": { - "description": "Pack template parameter", - "properties": { - "description": { - "description": "Pack template parameter description", - "type": "string" - }, - "displayName": { - "description": "Pack template parameter display name", - "type": "string" - }, - "format": { - "description": "Pack template parameter format", - "type": "string" - }, - "hidden": { - "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", - "type": "boolean" - }, - "listOptions": { - "description": "Pack template parameter list options as string array", - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "description": "Pack template parameter name", - "type": "string" - }, - "optional": { - "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", - "type": "boolean" - }, - "options": { - "description": "Pack template parameter options array", - "type": "object", - "additionalProperties": { - "description": "Pack template parameter option", - "type": "object", - "properties": { - "dependencies": { - "description": "Pack template parameter dependencies", - "type": "array", - "items": { - "description": "Pack template dependency", - "type": "object", - "properties": { - "layer": { - "description": "Pack template dependency pack layer", - "type": "string" - }, - "name": { - "description": "Pack template dependency pack name", - "type": "string" - }, - "readOnly": { - "description": "If true then dependency pack values can't be overridden", - "type": "boolean" - } - } - } - }, - "description": { - "description": "Pack template parameter description", - "type": "string" - }, - "label": { - "description": "Pack template parameter label", - "type": "string" - } - } - } - }, - "readOnly": { - "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", - "type": "boolean" - }, - "regex": { - "description": "Pack template parameter regex, if set then parameter value must match with specified regex", - "type": "string" - }, - "targetKey": { - "description": "Pack template parameter target key which is mapped to the key defined in the pack values", - "type": "string" - }, - "type": { - "description": "Pack template parameter data type", - "type": "string" - }, - "value": { - "description": "Pack template parameter value", - "type": "string" - } - } - } + "name": { + "type": "string" }, - "outputParameters": { - "description": "Pack template output parameters array", - "type": "array", - "items": { - "description": "Pack template parameter", - "properties": { - "description": { - "description": "Pack template parameter description", - "type": "string" - }, - "displayName": { - "description": "Pack template parameter display name", - "type": "string" - }, - "format": { - "description": "Pack template parameter format", - "type": "string" - }, - "hidden": { - "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", - "type": "boolean" - }, - "listOptions": { - "description": "Pack template parameter list options as string array", - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "description": "Pack template parameter name", - "type": "string" - }, - "optional": { - "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", - "type": "boolean" - }, - "options": { - "description": "Pack template parameter options array", - "type": "object", - "additionalProperties": { - "description": "Pack template parameter option", - "type": "object", - "properties": { - "dependencies": { - "description": "Pack template parameter dependencies", - "type": "array", - "items": { - "description": "Pack template dependency", - "type": "object", - "properties": { - "layer": { - "description": "Pack template dependency pack layer", - "type": "string" - }, - "name": { - "description": "Pack template dependency pack name", - "type": "string" - }, - "readOnly": { - "description": "If true then dependency pack values can't be overridden", - "type": "boolean" - } - } - } - }, - "description": { - "description": "Pack template parameter description", - "type": "string" - }, - "label": { - "description": "Pack template parameter label", - "type": "string" - } - } - } - }, - "readOnly": { - "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", - "type": "boolean" - }, - "regex": { - "description": "Pack template parameter regex, if set then parameter value must match with specified regex", - "type": "string" - }, - "targetKey": { - "description": "Pack template parameter target key which is mapped to the key defined in the pack values", - "type": "string" - }, - "type": { - "description": "Pack template parameter data type", - "type": "string" - }, - "value": { - "description": "Pack template parameter value", - "type": "string" - } - } - } + "type": { + "type": "string" + }, + "uid": { + "type": "string" } } }, - "values": { - "description": "Pack template values", + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { "type": "string" } } - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values", - "type": "string" - }, - "version": { - "description": "Pack version", - "type": "string" } } - }, - "status": { - "description": "Pack status", - "type": "object" } } } - }, - "relatedObject": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" - }, - "version": { - "description": "Cluster profile version", - "type": "integer", - "format": "int32" } } - } - } - } - } - } - } - } - } - }, - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates the specified cluster groups profiles", - "operationId": "v1ClusterGroupsUidProfilesUpdate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "required": [ - "profiles" - ], - "properties": { - "profiles": { - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack values entity to refer the existing pack for the values override", - "type": "object", - "required": [ - "name" - ], - "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], + }, + "status": { + "description": "Application deployment status summary", + "type": "object", + "properties": { + "cluster": { + "description": "Application deployment cluster status", + "properties": { + "health": { + "description": "Application deployment cluster health status", "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - }, - "uid": { - "description": "Manifest uid", + "state": { "type": "string" } } + }, + "state": { + "type": "string" + } + } + }, + "notifications": { + "description": "Application deployment notifications", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" } + }, + "state": { + "type": "string" } } - }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" } } } }, - "spcApplySettings": { + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", "type": "object", "properties": { - "actionType": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", "type": "string", - "enum": [ - "DownloadAndInstall", - "DownloadAndInstallLater" - ] + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false } } } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" } } - }, - "parameters": [ - { - "type": "string", - "description": "ClusterGroup uid", - "name": "uid", - "in": "path", - "required": true - } - ] + } }, - "/v1/clusterprofiles": { + "/v1/dashboard/appProfiles": { "post": { "security": [ { @@ -62348,283 +61275,144 @@ "tags": [ "v1" ], - "summary": "Creates a cluster profile", - "operationId": "v1ClusterProfilesCreate", + "summary": "Retrieves a list of application profiles filter summary Supported filter fields - [\"profileName\", \"tags\"] Supported sort fields - [\"profileName\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "operationId": "v1DashboardAppProfiles", "parameters": [ + { + "maximum": 20, + "type": "integer", + "format": "int64", + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, { "name": "body", "in": "body", "schema": { - "description": "Cluster profile request payload", - "type": "object", + "description": "Application profile filter summary spec", "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", + "filter": { + "description": "Application profile filter spec", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "template": { - "description": "Cluster profile template spec", + "profileName": { "type": "object", "properties": { - "cloudType": { - "type": "string" + "beginsWith": { + "type": "string", + "x-nullable": true }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack request payload", - "type": "object", - "required": [ - "name" - ], - "properties": { - "layer": { - "description": "Pack layer", - "type": "string" - }, - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest request payload", - "properties": { - "content": { - "description": "Manifest content", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "registryUid": { - "description": "Pack registry uid", - "type": "string" - }, - "tag": { - "description": "Pack tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "uid": { - "description": "Pack uid", - "type": "string" - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } + "contains": { + "type": "string", + "x-nullable": true }, - "type": { + "eq": { "type": "string", - "default": "cluster", - "enum": [ - "cluster", - "infra", - "add-on", - "system" - ] + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true } } }, - "variables": { - "description": "List of unique variable fields defined for a cluster profile with schema constraints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Unique variable field with schema definition", - "type": "object", - "required": [ - "name" - ], - "properties": { - "defaultValue": { - "description": "The default value of the variable", - "type": "string" - }, - "description": { - "description": "Variable description", - "type": "string" - }, - "displayName": { - "description": "Unique display name of the variable", + "tags": { + "type": "object", + "properties": { + "beginsWith": { + "type": "array", + "items": { "type": "string" }, - "format": { - "description": "Format type of the variable value", - "type": "string", - "default": "string", - "enum": [ - "string", - "number", - "boolean", - "ipv4", - "ipv4cidr", - "ipv6", - "version" - ] - }, - "hidden": { - "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "immutable": { - "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "isSensitive": { - "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "name": { - "description": "Variable name", + "x-nullable": true + }, + "eq": { + "type": "array", + "items": { "type": "string" }, - "regex": { - "description": "Regular expression pattern which the variable value must match", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "array", + "items": { "type": "string" }, - "required": { - "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", - "type": "boolean", - "x-omitempty": false - } + "x-nullable": true } } }, "version": { - "description": "Cluster profile version", - "type": "string" + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "gt": { + "type": "string", + "x-nullable": true + }, + "lt": { + "type": "string", + "x-nullable": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } } } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/clusterprofiles/bulk": { - "delete": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Deletes list of cluster profiles", - "operationId": "v1ClusterProfilesBulkDelete", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "required": [ - "uids" - ], - "properties": { - "uids": { + }, + "sort": { "type": "array", "uniqueItems": true, "items": { - "type": "string" + "properties": { + "field": { + "type": "string", + "enum": [ + "profileName", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } } } } @@ -62639,339 +61427,174 @@ ], "responses": { "200": { - "description": "OK", + "description": "An array of application profiles summary items", "schema": { + "type": "object", "properties": { - "deletedCount": { - "type": "integer", - "x-omitempty": false - }, - "failures": { + "appProfiles": { "type": "array", "uniqueItems": true, "items": { + "description": "Application profile summary", + "type": "object", "properties": { - "errMsg": { - "type": "string" - }, - "name": { - "type": "string" + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } }, - "uid": { - "type": "string" - } - } - }, - "x-omitempty": false - }, - "isSucceeded": { - "type": "boolean", - "x-omitempty": false - }, - "message": { - "type": "string", - "x-omitempty": false - } - } - } - } - } - } - }, - "/v1/clusterprofiles/import": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Imports a cluster profile", - "operationId": "v1ClusterProfilesImport", - "parameters": [ - { - "type": "boolean", - "description": "If true then cluster profile will be published post successful import", - "name": "publish", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster profile import request payload", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster profile import metadata", - "type": "object", - "properties": { - "description": { - "description": "Cluster profile description", - "type": "string" - }, - "labels": { - "description": "Cluster profile labels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Cluster profile name", - "type": "string" - } - } - }, - "spec": { - "description": "Cluster profile import spec", - "type": "object", - "properties": { - "template": { - "description": "Cluster profile import template", - "type": "object", - "properties": { - "cloudType": { - "description": "Cluster profile cloud type", - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack import request payload", + "spec": { + "description": "Application profile spec summary", + "type": "object", + "properties": { + "parentUid": { + "type": "string" + }, + "template": { + "description": "Application profile template summary", "type": "object", "properties": { - "layer": { - "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", - "type": "string" - }, - "manifests": { - "description": "Pack manifests array", + "appTiers": { "type": "array", "items": { - "description": "Pack manifest import objct", - "type": "object", + "description": "Application profile's tier summary", "properties": { - "content": { - "description": "Pack manifest content in yaml", - "type": "string" - }, "name": { - "description": "Pack manifest name", "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "registry": { - "description": "Pack registry import entity", - "type": "object", - "properties": { - "matchingRegistries": { - "type": "array", - "items": { - "description": "Pack registry metadata", - "type": "object", + }, + "source": { + "description": "Application profile's tier source information", "properties": { - "isPrivate": { - "description": "If true then pack registry is private and is not accessible for the pack sync", - "type": "boolean", - "x-omitempty": false + "addonSubType": { + "type": "string" }, - "kind": { - "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "addonType": { + "type": "string" + }, + "logoUrl": { "type": "string" }, "name": { - "description": "Pack registry name", "type": "string" }, - "providerType": { - "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": { "type": "string" }, "uid": { - "description": "Pack registry uid", "type": "string" } } - } - }, - "metadata": { - "description": "Pack registry metadata", - "type": "object", - "properties": { - "isPrivate": { - "description": "If true then pack registry is private and is not accessible for the pack sync", - "type": "boolean", - "x-omitempty": false - }, - "kind": { - "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", - "type": "string" - }, - "name": { - "description": "Pack registry name", - "type": "string" - }, - "providerType": { - "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", - "type": "string" - }, - "uid": { - "description": "Pack registry uid", - "type": "string" - } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" } } } - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", - "type": "string" - }, - "values": { - "description": "Pack values are the customizable configurations for the pack", - "type": "string" - }, - "version": { - "description": "Pack version", - "type": "string" } } - } - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" - } - } - }, - "variables": { - "description": "List of unique variable fields defined for a cluster profile with schema constraints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Unique variable field with schema definition", - "type": "object", - "required": [ - "name" - ], - "properties": { - "defaultValue": { - "description": "The default value of the variable", - "type": "string" - }, - "description": { - "description": "Variable description", - "type": "string" - }, - "displayName": { - "description": "Unique display name of the variable", - "type": "string" - }, - "format": { - "description": "Format type of the variable value", - "type": "string", - "default": "string", - "enum": [ - "string", - "number", - "boolean", - "ipv4", - "ipv4cidr", - "ipv6", - "version" - ] - }, - "hidden": { - "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "immutable": { - "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "isSensitive": { - "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "name": { - "description": "Variable name", - "type": "string" }, - "regex": { - "description": "Regular expression pattern which the variable value must match", + "version": { "type": "string" }, - "required": { - "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", - "type": "boolean", - "x-omitempty": false + "versions": { + "description": "Application profile's list of all the versions", + "type": "array", + "items": { + "description": "Application profile version", + "type": "object", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } } } } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false }, - "version": { - "description": "Cluster profile version", - "type": "string" + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false } } } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } } } } }, - "/v1/clusterprofiles/import/file": { - "post": { + "/v1/dashboard/appProfiles/metadata": { + "get": { "security": [ { "ApiKey": [] @@ -62980,38 +61603,12 @@ "Authorization": [] } ], - "consumes": [ - "multipart/form-data" - ], "tags": [ "v1" ], - "summary": "Imports a cluster profile via file", - "operationId": "v1ClusterProfilesImportFile", + "summary": "Retrieves a list of application profile metadata", + "operationId": "v1DashboardAppProfilesMetadata", "parameters": [ - { - "type": "boolean", - "description": "If true then cluster profile will be published post successful import", - "name": "publish", - "in": "query" - }, - { - "type": "file", - "description": "Cluster profile import file", - "name": "importFile", - "in": "formData" - }, - { - "enum": [ - "yaml", - "json" - ], - "type": "string", - "default": "json", - "description": "Cluster profile import file format [\"yaml\", \"json\"]", - "name": "format", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -63020,30 +61617,47 @@ } ], "responses": { - "201": { - "description": "Created successfully", + "200": { + "description": "An array of application profile summary items", "schema": { "type": "object", - "required": [ - "uid" - ], "properties": { - "uid": { - "type": "string" + "appProfiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Application profile metadata summary", + "type": "object", + "properties": { + "metadata": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "properties": { + "version": { + "type": "string" + } + } + } + } + } } } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } } } } } }, - "/v1/clusterprofiles/import/validate": { + "/v1/dashboard/appliances/metadata": { "post": { "security": [ { @@ -63056,242 +61670,80 @@ "tags": [ "v1" ], - "summary": "Validates cluster profile import", - "operationId": "v1ClusterProfilesImportValidate", + "summary": "Retrieves a list of edgehosts summary", + "operationId": "v1EdgeHostsMetadata", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster profile import request payload", - "type": "object", + "description": "Edge host metadata spec", "properties": { - "metadata": { - "description": "Cluster profile import metadata", - "type": "object", + "filter": { + "description": "Edge hosts metadata filter spec", "properties": { - "description": { - "description": "Cluster profile description", - "type": "string" - }, - "labels": { - "description": "Cluster profile labels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, "name": { - "description": "Cluster profile name", - "type": "string" - } - } - }, - "spec": { - "description": "Cluster profile import spec", - "type": "object", - "properties": { - "template": { - "description": "Cluster profile import template", "type": "object", "properties": { - "cloudType": { - "description": "Cluster profile cloud type", - "type": "string" + "beginsWith": { + "type": "string", + "x-nullable": true }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack import request payload", - "type": "object", - "properties": { - "layer": { - "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", - "type": "string" - }, - "manifests": { - "description": "Pack manifests array", - "type": "array", - "items": { - "description": "Pack manifest import objct", - "type": "object", - "properties": { - "content": { - "description": "Pack manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Pack manifest name", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "registry": { - "description": "Pack registry import entity", - "type": "object", - "properties": { - "matchingRegistries": { - "type": "array", - "items": { - "description": "Pack registry metadata", - "type": "object", - "properties": { - "isPrivate": { - "description": "If true then pack registry is private and is not accessible for the pack sync", - "type": "boolean", - "x-omitempty": false - }, - "kind": { - "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", - "type": "string" - }, - "name": { - "description": "Pack registry name", - "type": "string" - }, - "providerType": { - "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", - "type": "string" - }, - "uid": { - "description": "Pack registry uid", - "type": "string" - } - } - } - }, - "metadata": { - "description": "Pack registry metadata", - "type": "object", - "properties": { - "isPrivate": { - "description": "If true then pack registry is private and is not accessible for the pack sync", - "type": "boolean", - "x-omitempty": false - }, - "kind": { - "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", - "type": "string" - }, - "name": { - "description": "Pack registry name", - "type": "string" - }, - "providerType": { - "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", - "type": "string" - }, - "uid": { - "description": "Pack registry uid", - "type": "string" - } - } - } - } - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", - "type": "string" - }, - "values": { - "description": "Pack values are the customizable configurations for the pack", - "type": "string" - }, - "version": { - "description": "Pack version", - "type": "string" - } - } - } + "contains": { + "type": "string", + "x-nullable": true }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true } } }, - "variables": { - "description": "List of unique variable fields defined for a cluster profile with schema constraints", + "states": { "type": "array", "uniqueItems": true, "items": { - "description": "Unique variable field with schema definition", - "type": "object", - "required": [ - "name" + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "state", + "creationTimestamp", + "lastModifiedTimestamp" ], - "properties": { - "defaultValue": { - "description": "The default value of the variable", - "type": "string" - }, - "description": { - "description": "Variable description", - "type": "string" - }, - "displayName": { - "description": "Unique display name of the variable", - "type": "string" - }, - "format": { - "description": "Format type of the variable value", - "type": "string", - "default": "string", - "enum": [ - "string", - "number", - "boolean", - "ipv4", - "ipv4cidr", - "ipv6", - "version" - ] - }, - "hidden": { - "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "immutable": { - "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "isSensitive": { - "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "name": { - "description": "Variable name", - "type": "string" - }, - "regex": { - "description": "Regular expression pattern which the variable value must match", - "type": "string" - }, - "required": { - "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", - "type": "boolean", - "x-omitempty": false - } - } + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] } - }, - "version": { - "description": "Cluster profile version", - "type": "string" } } } @@ -63307,237 +61759,358 @@ ], "responses": { "200": { - "description": "Cluster profile import validated response", + "description": "An array of edgehost summary items", "schema": { - "description": "Cluster profile import request payload", "type": "object", + "required": [ + "items" + ], "properties": { - "metadata": { - "description": "Cluster profile import metadata", - "type": "object", - "properties": { - "description": { - "description": "Cluster profile description", - "type": "string" - }, - "labels": { - "description": "Cluster profile labels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Cluster profile name", - "type": "string" - } - } - }, - "spec": { - "description": "Cluster profile import spec", - "type": "object", - "properties": { - "template": { - "description": "Cluster profile import template", - "type": "object", - "properties": { - "cloudType": { - "description": "Cluster profile cloud type", - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack import request payload", + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Edge host clusterprofile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "device": { + "description": "DeviceSpec defines the desired state of Device", "type": "object", "properties": { - "layer": { - "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", - "type": "string" + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] }, - "manifests": { - "description": "Pack manifests array", + "cpu": { + "type": "object", + "properties": { + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { "type": "array", "items": { - "description": "Pack manifest import objct", "type": "object", "properties": { - "content": { - "description": "Pack manifest content in yaml", + "controller": { "type": "string" }, - "name": { - "description": "Pack manifest name", + "partitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "type": "integer", + "format": "int32" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" + } + } + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { "type": "string" } } } }, - "name": { - "description": "Pack name", - "type": "string" - }, - "registry": { - "description": "Pack registry import entity", - "type": "object", - "properties": { - "matchingRegistries": { - "type": "array", - "items": { - "description": "Pack registry metadata", + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", "type": "object", - "properties": { - "isPrivate": { - "description": "If true then pack registry is private and is not accessible for the pack sync", - "type": "boolean", - "x-omitempty": false - }, - "kind": { - "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", - "type": "string" - }, - "name": { - "description": "Pack registry name", - "type": "string" - }, - "providerType": { - "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", - "type": "string" - }, - "uid": { - "description": "Pack registry uid", - "type": "string" - } + "additionalProperties": { + "type": "string" } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" } - }, - "metadata": { - "description": "Pack registry metadata", - "type": "object", - "properties": { - "isPrivate": { - "description": "If true then pack registry is private and is not accessible for the pack sync", - "type": "boolean", - "x-omitempty": false - }, - "kind": { - "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", - "type": "string" - }, - "name": { - "description": "Pack registry name", - "type": "string" - }, - "providerType": { - "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", - "type": "string" - }, - "uid": { - "description": "Pack registry uid", + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { "type": "string" } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" } } } }, - "tag": { - "description": "Pack version tag", + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "host": { + "description": "Host specifications", + "properties": { + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", "type": "string" }, - "type": { - "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", + "macAddress": { "type": "string" - }, - "values": { - "description": "Pack values are the customizable configurations for the pack", + } + } + }, + "projectMeta": { + "type": "object", + "properties": { + "name": { "type": "string" }, - "version": { - "description": "Pack version", + "uid": { "type": "string" } } + }, + "type": { + "type": "string" } - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" } - } - }, - "variables": { - "description": "List of unique variable fields defined for a cluster profile with schema constraints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Unique variable field with schema definition", + }, + "status": { "type": "object", - "required": [ - "name" - ], "properties": { - "defaultValue": { - "description": "The default value of the variable", - "type": "string" - }, - "description": { - "description": "Variable description", - "type": "string" + "health": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } }, - "displayName": { - "description": "Unique display name of the variable", - "type": "string" + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } }, - "format": { - "description": "Format type of the variable value", + "state": { "type": "string", - "default": "string", "enum": [ - "string", - "number", - "boolean", - "ipv4", - "ipv4cidr", - "ipv6", - "version" + "ready", + "unpaired", + "in-use" ] - }, - "hidden": { - "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "immutable": { - "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "isSensitive": { - "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "name": { - "description": "Variable name", - "type": "string" - }, - "regex": { - "description": "Regular expression pattern which the variable value must match", - "type": "string" - }, - "required": { - "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", - "type": "boolean", - "x-omitempty": false } } } - }, - "version": { - "description": "Cluster profile version", - "type": "string" } } } @@ -63547,7 +62120,7 @@ } } }, - "/v1/clusterprofiles/macros": { + "/v1/dashboard/cloudaccounts/metadata": { "get": { "security": [ { @@ -63560,9 +62133,14 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of macros", - "operationId": "v1MacrosList", + "summary": "Retrieves a list of cloud accounts metadata", + "operationId": "v1DashboardCloudAccountsMetadata", "parameters": [ + { + "type": "string", + "name": "environment", + "in": "query" + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -63572,19 +62150,64 @@ ], "responses": { "200": { - "description": "OK", + "description": "An array of cloud accounts summary items", "schema": { + "type": "object", + "required": [ + "items" + ], "properties": { - "macros": { + "items": { "type": "array", "uniqueItems": true, "items": { + "description": "Cloud account metadata summary", "properties": { - "name": { + "kind": { "type": "string" }, - "value": { - "type": "string" + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } } } } @@ -63595,8 +62218,8 @@ } } }, - "/v1/clusterprofiles/validate/name": { - "get": { + "/v1/dashboard/clustergroups/{uid}/hostClusters": { + "post": { "security": [ { "ApiKey": [] @@ -63605,145 +62228,322 @@ "Authorization": [] } ], - "description": "Validates the cluster profile name and version", "tags": [ "v1" ], - "summary": "Validates the cluster profile metadata", - "operationId": "v1ClusterProfilesValidateNameVersion", + "summary": "Retrieves a list of cluster summary for a given cluster group", + "operationId": "v1ClusterGroupUidHostClustersSummary", "parameters": [ { "type": "string", - "description": "Cluster profile name", - "name": "name", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", "in": "query" }, { - "type": "string", - "description": "Cluster profile version", - "name": "version", + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", "in": "query" }, { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/clusterprofiles/validate/packs": { - "post": { - "security": [ - { - "ApiKey": [] + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Validates cluster profile packs", - "operationId": "v1ClusterProfilesValidatePacks", - "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster profile template spec", - "type": "object", + "description": "Spectro cluster search filter summary spec", "properties": { - "cloudType": { - "type": "string" + "filter": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filterGroups": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filters": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "condition": { + "properties": { + "bool": { + "properties": { + "value": { + "type": "boolean" + } + } + }, + "date": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + } + } + }, + "float": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "int": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "keyValue": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "string": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + } + } + }, + "property": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "int", + "float", + "bool", + "date", + "keyValue" + ] + } + } + } + } + } + } + } + } }, - "packs": { - "description": "Cluster profile packs array", + "sort": { "type": "array", "uniqueItems": true, "items": { - "description": "Pack request payload", - "type": "object", - "required": [ - "name" - ], "properties": { - "layer": { - "description": "Pack layer", - "type": "string" - }, - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest request payload", - "properties": { - "content": { - "description": "Manifest content", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "registryUid": { - "description": "Pack registry uid", - "type": "string" - }, - "tag": { - "description": "Pack tag", - "type": "string" + "field": { + "type": "string", + "enum": [ + "environment", + "clusterName", + "clusterState", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true }, - "type": { + "order": { "type": "string", - "default": "spectro", + "default": "asc", "enum": [ - "spectro", - "helm", - "manifest", - "oci" + "asc", + "desc" ] - }, - "uid": { - "description": "Pack uid", - "type": "string" - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" } } } - }, - "type": { - "type": "string", - "default": "cluster", - "enum": [ - "cluster", - "infra", - "add-on", - "system" - ] } } } @@ -63757,914 +62557,1277 @@ ], "responses": { "200": { - "description": "Cluster profile packs validation response", + "description": "An array of cluster summary items", "schema": { - "description": "Cluster profile validator response", "type": "object", + "required": [ + "items" + ], "properties": { - "packs": { - "description": "Constraint validator response", - "type": "object", - "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { - "displayName": { - "type": "string" + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" } }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } - } - } - } - } - } - } - } - } - } - }, - "/v1/clusterprofiles/{uid}": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns a specified cluster profile", - "operationId": "v1ClusterProfilesGet", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "ClusterProfile is the Schema for the clusterprofiles API", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Cloud type of the cloud config", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "ClusterProfileTemplate can be in draft mode, or published mode User only see the latest published template, and (or) the draft template User can apply either the draft version or the latest published version to a cluster when user create a draft version, just copy the Published template, increment the version, and keep changing the draft template without increment the draft version when user publish a draft, the version is fixed, and won't be able to make any modification on published template For each clusterprofile that has a published version, there will be a ClusterProfileArchive automatically created when user publish a draft, the published version will also be copied over to the corresponding ClusterProfileArchive it is just in case in the future for whatever reason we may want to expose earlier versions", - "type": "object", - "properties": { - "draft": { - "description": "ClusterProfileTemplate contains details of a clusterprofile definition", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packServerRefs": { - "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + }, + "specSummary": { + "description": "Spectro cluster spec summary", + "type": "object", + "properties": { + "archTypes": { + "description": "Architecture type of the cluster", + "type": "array", + "items": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + }, + "cloudAccountMeta": { + "description": "Cloud account meta information", "type": "object", "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, "name": { - "description": "Name of the referent.", "type": "string" }, "uid": { - "description": "UID of the referent.", "type": "string" } } - } - }, - "packServerSecret": { - "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", - "type": "string" - }, - "packs": { - "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + }, + "cloudConfig": { "type": "object", - "required": [ - "layer", - "name" - ], "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", + "cloudType": { "type": "string" }, - "manifests": { + "machinePools": { + "description": "Machine pool meta information", "type": "array", "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", "type": "object", "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", + "cloudType": { "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false }, - "displayName": { - "type": "string", + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", "x-omitempty": false }, - "group": { - "type": "string", - "x-omitempty": false + "infraProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } }, - "name": { - "type": "string", + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", "x-omitempty": false }, - "remove": { + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" - }, + } + }, + "maintenanceMode": { + "description": "number of machines under maintenance", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32", "x-omitempty": false } } } }, - "registryUid": { - "description": "pack registry uid", + "uid": { + "description": "Cluster's cloud config uid", "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "hostClusterConfig": { + "properties": { + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", "type": "string" }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } } } } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" } } - } - }, - "profileVersion": { - "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", - "type": "string" - }, - "relatedObject": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "description": "Deprecated. Use profileVersion", - "type": "integer", - "format": "int32" - } - } - }, - "published": { - "description": "ClusterProfileTemplate contains details of a clusterprofile definition", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packServerRefs": { - "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + }, + "clusterProfileTemplate": { + "description": "Cluster profile template meta information", "type": "object", "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "cloudType": { "type": "string" }, "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "packServerSecret": { - "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", - "type": "string" - }, - "packs": { - "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", + "description": "Cluster profile name", "type": "string" }, - "manifests": { + "packs": { + "description": "Cluster profile packs array", "type": "array", "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", "type": "object", + "required": [ + "layer", + "name" + ], "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "name": { - "description": "Name of the referent.", + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", "type": "string" }, - "uid": { - "description": "UID of the referent.", + "inValidReason": { "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false }, - "displayName": { - "type": "string", - "x-omitempty": false + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" }, - "group": { + "layer": { "type": "string", - "x-omitempty": false + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] }, - "name": { - "type": "string", - "x-omitempty": false + "logo": { + "description": "path to the pack logo", + "type": "string" }, - "remove": { + "manifests": { "type": "array", "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false + } }, - "hints": { + "presets": { "type": "array", "items": { - "type": "string" - }, - "x-omitempty": false + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } }, - "listOptions": { + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { "type": "array", "items": { - "type": "string" - }, - "x-omitempty": false + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } }, - "name": { - "type": "string", - "x-omitempty": false + "server": { + "description": "pack registry server or helm repo", + "type": "string" }, - "readonly": { - "type": "boolean", - "x-omitempty": false + "tag": { + "description": "pack tag", + "type": "string" }, - "regex": { + "type": { + "description": "type of the pack", "type": "string", - "x-omitempty": false + "enum": [ + "spectro", + "helm", + "manifest" + ] }, - "required": { - "type": "boolean", - "x-omitempty": false + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" }, - "type": { - "type": "string", - "x-omitempty": false + "version": { + "description": "pack version", + "type": "string" } } } }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", + "scope": { + "description": "scope or context(system, tenant or project)", "type": "string" }, "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "uid": { + "description": "Cluster profile uid", "type": "string" }, "version": { - "description": "pack version", - "type": "string" + "type": "integer", + "format": "int32" } } - } - }, - "profileVersion": { - "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", - "type": "string" - }, - "relatedObject": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "description": "Deprecated. Use profileVersion", - "type": "integer", - "format": "int32" - } - } - }, - "version": { - "type": "string" - }, - "versions": { - "description": "Cluster profile's list of all the versions", - "type": "array", - "items": { - "description": "Cluster profile with version", - "properties": { - "uid": { - "type": "string" }, - "version": { - "type": "string" - } - } - } - } - } - }, - "status": { - "description": "ClusterProfileStatus defines the observed state of ClusterProfile", - "type": "object", - "properties": { - "hasUserMacros": { - "description": "If it is true then profile pack values has a reference to user defined macros", - "type": "boolean", - "x-omitempty": false - }, - "inUseClusterUids": { - "description": "Deprecated. Use inUseClusters", - "type": "array", - "items": { - "type": "string" - } - }, - "inUseClusters": { - "type": "array", - "items": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } }, - "uid": { - "type": "string" + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } } } - } - }, - "isPublished": { - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - } - }, - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates the specified cluster profile", - "operationId": "v1ClusterProfilesUpdate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster profile update request payload", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Cluster profile update spec", - "type": "object", - "properties": { - "template": { - "description": "Cluster profile template update spec", - "type": "object", - "properties": { - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack input entity with values to overwrite and manifests for the intial creation", + }, + "status": { + "description": "Spectro cluster status summary", + "properties": { + "clusterImport": { "type": "object", - "required": [ - "name" - ], "properties": { - "layer": { - "description": "Pack layer", + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", "type": "string" }, - "manifests": { - "description": "Pack manifests are additional content as part of the profile", + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { "type": "array", + "uniqueItems": true, "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], + "description": "Spectro cluster health condition", "properties": { - "content": { - "description": "Manifest content in yaml", + "message": { "type": "string" }, - "name": { - "description": "Manifest name", - "type": "string" + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } }, - "uid": { - "description": "Manifest uid", + "type": { "type": "string" } } } }, - "name": { - "description": "Pack name", + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { "type": "string" + } + } + }, + "hourlyRate": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } }, - "registryUid": { - "description": "Pack registry uid", + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { "type": "string" }, - "tag": { - "description": "Pack tag", + "countryName": { "type": "string" }, - "type": { + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "metrics": { + "description": "Spectro cluster metrics", + "properties": { + "cpu": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "repave": { + "description": "Cluster repave status", + "properties": { + "state": { "type": "string", - "default": "spectro", + "default": "Pending", "enum": [ - "spectro", - "helm", - "manifest", - "oci" + "Pending", + "Approved", + "Reverted" ] + } + } + }, + "state": { + "type": "string" + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } }, - "uid": { - "description": "Pack uid", - "type": "string" + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } } } } - }, - "type": { - "type": "string", - "default": "cluster", - "enum": [ - "cluster", - "infra", - "add-on", - "system" - ] } } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false }, - "version": { - "description": "Cluster profile version", - "type": "string" + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false } } } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" } } - }, - "delete": { + } + }, + "/v1/dashboard/clustergroups/{uid}/virtualClusters": { + "post": { "security": [ { "ApiKey": [] @@ -64676,589 +63839,323 @@ "tags": [ "v1" ], - "summary": "Deletes the specified cluster profile", - "operationId": "v1ClusterProfilesDelete", + "summary": "Retrieves a list of cluster summary for a given cluster group", + "operationId": "v1ClusterGroupUidVirtualClustersSummary", "parameters": [ { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Comma seperated pack meta such as schema, presets", - "name": "includePackMeta", - "in": "query" - } - ] - }, - "/v1/clusterprofiles/{uid}/clone": { - "post": { - "security": [ - { - "ApiKey": [] + "name": "uid", + "in": "path", + "required": true }, { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Creates a clone of the specified cluster profile", - "operationId": "v1ClusterProfilesUidClone", - "parameters": [ + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster profile clone request payload", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster profile clone metadata", - "type": "object", - "required": [ - "name" - ], - "properties": { - "name": { - "description": "Cloned cluster profile name", - "type": "string" - }, - "target": { - "description": "Cluster profile clone meta input entity", - "type": "object", - "required": [ - "scope" - ], - "properties": { - "projectUid": { - "description": "Cloned cluster profile project uid", - "type": "string" - }, - "scope": { - "type": "string", - "enum": [ - "system", - "tenant", - "project", - "resource" - ] - } - } - }, - "version": { - "description": "Cloned cluster profile version", - "type": "string" - } - } - } - } - } + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" }, { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/clusterprofiles/{uid}/clone/validate": { - "post": { - "security": [ - { - "ApiKey": [] + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" }, - { - "Authorization": [] - } - ], - "description": "Validates the cloned cluster profile name, version and target project uid", - "tags": [ - "v1" - ], - "summary": "Validates the cluster profile clone", - "operationId": "v1ClusterProfilesUidCloneValidate", - "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster profile clone metadata", - "type": "object", - "required": [ - "name" - ], + "description": "Spectro cluster search filter summary spec", "properties": { - "name": { - "description": "Cloned cluster profile name", - "type": "string" - }, - "target": { - "description": "Cluster profile clone meta input entity", - "type": "object", - "required": [ - "scope" - ], + "filter": { "properties": { - "projectUid": { - "description": "Cloned cluster profile project uid", - "type": "string" - }, - "scope": { + "conjunction": { "type": "string", "enum": [ - "system", - "tenant", - "project", - "resource" - ] - } - } - }, - "version": { - "description": "Cloned cluster profile version", - "type": "string" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/clusterprofiles/{uid}/export": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "produces": [ - "application/octet-stream" - ], - "tags": [ - "v1" - ], - "summary": "Export the specified cluster profile", - "operationId": "V1ClusterProfilesUidExport", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Exports cluster profile as a file", - "schema": { - "type": "string", - "format": "binary" - }, - "headers": { - "Content-Disposition": { - "type": "string" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "enum": [ - "yaml", - "json" - ], - "type": "string", - "default": "json", - "description": "Cluster profile export file format [ \"yaml\", \"json\" ]", - "name": "format", - "in": "query" - } - ] - }, - "/v1/clusterprofiles/{uid}/export/terraform": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "produces": [ - "application/octet-stream" - ], - "tags": [ - "v1" - ], - "summary": "Downloads the specified cluster profile", - "operationId": "V1ClusterProfilesUidExportTerraform", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Downloads cluster profile export file", - "schema": { - "type": "string", - "format": "binary" - }, - "headers": { - "Content-Disposition": { - "type": "string" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "enum": [ - "yaml", - "json" - ], - "type": "string", - "default": "yaml", - "description": "Cluster profile export file format [ \"yaml\", \"json\" ]", - "name": "format", - "in": "query" - } - ] - }, - "/v1/clusterprofiles/{uid}/metadata": { - "patch": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates the specified cluster profile metadata", - "operationId": "v1ClusterProfilesUidMetadataUpdate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster profile metadata request payload", - "type": "object", - "required": [ - "metadata" - ], - "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - }, - "spec": { - "description": "Cluster profile update spec", - "type": "object", - "properties": { - "version": { - "description": "Cluster profile version", - "type": "string" - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/clusterprofiles/{uid}/packRefs": { - "patch": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates cluster profile packs ref", - "operationId": "v1ClusterProfilesPacksRefUpdate", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Cluster profile notification uid", - "name": "notify", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster profile notification update request payload", - "type": "object", - "properties": { - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack input entity with values to overwrite and manifests for the intial creation", - "type": "object", - "required": [ - "name" - ], - "properties": { - "layer": { - "description": "Pack layer", - "type": "string" + "and", + "or" + ], + "x-nullable": true }, - "manifests": { - "description": "Pack manifests are additional content as part of the profile", + "filterGroups": { "type": "array", + "uniqueItems": true, "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true }, - "uid": { - "description": "Manifest uid", - "type": "string" + "filters": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "condition": { + "properties": { + "bool": { + "properties": { + "value": { + "type": "boolean" + } + } + }, + "date": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + } + } + }, + "float": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "int": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "keyValue": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "string": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + } + } + }, + "property": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "int", + "float", + "bool", + "date", + "keyValue" + ] + } + } + } } } } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "registryUid": { - "description": "Pack registry uid", - "type": "string" - }, - "tag": { - "description": "Pack tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "uid": { - "description": "Pack uid", - "type": "string" - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "environment", + "clusterName", + "clusterState", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } } } } - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" } } - } - } - ] - }, - "/v1/clusterprofiles/{uid}/packs": { - "get": { - "security": [ - { - "ApiKey": [] }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified cluster profile packs", - "operationId": "v1ClusterProfilesUidPacksGet", - "parameters": [ { "type": "string", "description": "Scope the request to the specified project uid", @@ -65268,20 +64165,18 @@ ], "responses": { "200": { - "description": "OK", + "description": "An array of cluster summary items", "schema": { - "description": "List of cluster profile packs", "type": "object", "required": [ "items" ], "properties": { "items": { - "description": "Cluster profile packs array", "type": "array", "uniqueItems": true, "items": { - "description": "Cluster profile packs object", + "description": "Spectro cluster summary", "type": "object", "properties": { "metadata": { @@ -65289,7 +64184,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -65306,7 +64201,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -65318,972 +64213,1229 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, - "spec": { - "description": "Pack object", + "specSummary": { + "description": "Spectro cluster spec summary", "type": "object", "properties": { - "addonSubType": { - "description": "Pack add-on sub type such as monitoring, db etc", - "type": "string" - }, - "addonType": { - "description": "Pack add-on type such as logging, monitoring, security etc", - "type": "string" - }, - "annotations": { - "description": "Pack annotations is used to allow pack to add more arbitrary configurations", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "cloudTypes": { - "description": "Pack supported cloud types", - "type": "array", - "items": { - "type": "string" - } - }, - "digest": { - "description": "Pack digest", - "type": "string" - }, - "displayName": { - "description": "Pack display name", - "type": "string" - }, - "eol": { - "description": "Pack end of life, date format: yyyy-MM-dd", - "type": "string" - }, - "group": { - "description": "Pack group", - "type": "string" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logoUrl": { - "description": "Pack logo url", - "type": "string" - }, - "manifests": { - "description": "Pack manifests are additional content as part of the cluster profile", - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "presets": { - "description": "Pack presets are the set of configurations applied on user selection of presets", + "archTypes": { + "description": "Architecture type of the cluster", "type": "array", "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] } }, - "registryUid": { - "description": "Pack registry uid", - "type": "string" - }, - "schema": { - "description": "Pack schema contains constraints such as data type, format, hints for the pack values", - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } + "cloudAccountMeta": { + "description": "Cloud account meta information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" } } }, - "template": { - "description": "Pack template configuration", + "cloudConfig": { + "type": "object", "properties": { - "manifest": { - "description": "Pack template manifest content", + "cloudType": { "type": "string" }, - "parameters": { - "description": "Pack template parameters", - "properties": { - "inputParameters": { - "description": "Pack template input parameters array", - "type": "array", - "items": { - "description": "Pack template parameter", + "machinePools": { + "description": "Machine pool meta information", + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "infraProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", "properties": { - "description": { - "description": "Pack template parameter description", - "type": "string" - }, - "displayName": { - "description": "Pack template parameter display name", + "cloudType": { "type": "string" }, - "format": { - "description": "Pack template parameter format", + "name": { + "description": "Cluster profile name", "type": "string" }, - "hidden": { - "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", - "type": "boolean" - }, - "listOptions": { - "description": "Pack template parameter list options as string array", + "packs": { + "description": "Cluster profile packs array", "type": "array", "items": { - "type": "string" - } - }, - "name": { - "description": "Pack template parameter name", - "type": "string" - }, - "optional": { - "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", - "type": "boolean" - }, - "options": { - "description": "Pack template parameter options array", - "type": "object", - "additionalProperties": { - "description": "Pack template parameter option", + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", "type": "object", + "required": [ + "layer", + "name" + ], "properties": { - "dependencies": { - "description": "Pack template parameter dependencies", + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { "type": "array", "items": { - "description": "Pack template dependency", + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", "type": "object", "properties": { - "layer": { - "description": "Pack template dependency pack layer", + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", "type": "string" }, "name": { - "description": "Pack template dependency pack name", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, - "readOnly": { - "description": "If true then dependency pack values can't be overridden", - "type": "boolean" + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" } } } }, - "description": { - "description": "Pack template parameter description", + "name": { + "description": "pack name", "type": "string" }, - "label": { - "description": "Pack template parameter label", + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", "type": "string" - } - } - } - }, - "readOnly": { - "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", - "type": "boolean" - }, - "regex": { - "description": "Pack template parameter regex, if set then parameter value must match with specified regex", - "type": "string" - }, - "targetKey": { - "description": "Pack template parameter target key which is mapped to the key defined in the pack values", - "type": "string" - }, - "type": { - "description": "Pack template parameter data type", - "type": "string" - }, - "value": { - "description": "Pack template parameter value", - "type": "string" - } - } - } - }, - "outputParameters": { - "description": "Pack template output parameters array", - "type": "array", - "items": { - "description": "Pack template parameter", - "properties": { - "description": { - "description": "Pack template parameter description", - "type": "string" - }, - "displayName": { - "description": "Pack template parameter display name", - "type": "string" - }, - "format": { - "description": "Pack template parameter format", - "type": "string" - }, - "hidden": { - "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", - "type": "boolean" - }, - "listOptions": { - "description": "Pack template parameter list options as string array", - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "description": "Pack template parameter name", - "type": "string" - }, - "optional": { - "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", - "type": "boolean" - }, - "options": { - "description": "Pack template parameter options array", - "type": "object", - "additionalProperties": { - "description": "Pack template parameter option", - "type": "object", - "properties": { - "dependencies": { - "description": "Pack template parameter dependencies", + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { "type": "array", "items": { - "description": "Pack template dependency", + "description": "PackPreset defines the preset pack values", "type": "object", "properties": { - "layer": { - "description": "Pack template dependency pack layer", - "type": "string" + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false }, "name": { - "description": "Pack template dependency pack name", - "type": "string" + "type": "string", + "x-omitempty": false }, - "readOnly": { - "description": "If true then dependency pack values can't be overridden", - "type": "boolean" + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false } } } }, - "description": { - "description": "Pack template parameter description", + "registryUid": { + "description": "pack registry uid", "type": "string" }, - "label": { - "description": "Pack template parameter label", + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", "type": "string" } } } }, - "readOnly": { - "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", - "type": "boolean" - }, - "regex": { - "description": "Pack template parameter regex, if set then parameter value must match with specified regex", - "type": "string" - }, - "targetKey": { - "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "scope": { + "description": "scope or context(system, tenant or project)", "type": "string" }, "type": { - "description": "Pack template parameter data type", + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", "type": "string" }, - "value": { - "description": "Pack template parameter value", + "uid": { + "description": "Cluster profile uid", "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" } } + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "maintenanceMode": { + "description": "number of machines under maintenance", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32", + "x-omitempty": false } } } }, - "values": { - "description": "Pack template values", + "uid": { + "description": "Cluster's cloud config uid", "type": "string" } } }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values", - "type": "string" - }, - "version": { - "description": "Pack version", - "type": "string" - } - } - }, - "status": { - "description": "Pack status", - "type": "object" - } - } - } - } - } - } - } - } - }, - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Adds a new pack to the specified cluster profile and returns the created pack uid", - "operationId": "v1ClusterProfilesUidPacksAdd", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Pack request payload", - "properties": { - "pack": { - "description": "Pack request payload", - "type": "object", - "required": [ - "name" - ], - "properties": { - "layer": { - "description": "Pack layer", - "type": "string" - }, - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest request payload", - "properties": { - "content": { - "description": "Manifest content", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "registryUid": { - "description": "Pack registry uid", - "type": "string" - }, - "tag": { - "description": "Pack tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "uid": { - "description": "Pack uid", - "type": "string" - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Comma seperated pack meta such as schema, presets", - "name": "includePackMeta", - "in": "query" - } - ] - }, - "/v1/clusterprofiles/{uid}/packs/manifests": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified cluster profile pack manifests", - "operationId": "v1ClusterProfilesUidPacksManifestsGet", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "Cluster profile pack manifests", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster profile pack manifests", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "clusterConfig": { "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" + "hostClusterConfig": { + "properties": { + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" } } }, - "spec": { - "description": "Pack manifests spec", + "clusterProfileTemplate": { + "description": "Cluster profile template meta information", "type": "object", "properties": { - "addonType": { - "description": "Pack add-on type such as logging, monitoring, security etc", - "type": "string" - }, - "annotations": { - "description": "Pack annotations is used to allow pack to add more arbitrary configurations", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "cloudTypes": { - "description": "Pack supported cloud types", - "type": "array", - "items": { - "type": "string" - } - }, - "digest": { - "description": "Pack digest", - "type": "string" - }, - "displayName": { - "description": "Pack display name", - "type": "string" - }, - "eol": { - "description": "Pack end of life, date format: yyyy-MM-dd", - "type": "string" - }, - "group": { - "description": "Pack group", + "cloudType": { "type": "string" }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logoUrl": { - "description": "Pack logo url", + "name": { + "description": "Cluster profile name", "type": "string" }, - "manifests": { - "description": "Pack manifests are additional content as part of the cluster profile", + "packs": { + "description": "Cluster profile packs array", "type": "array", "items": { - "description": "Manifest object", + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "name": { - "description": "Manifest name", + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", "type": "string" }, - "uid": { - "description": "Manifest uid", + "inValidReason": { "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "presets": { - "description": "Pack presets are the set of configurations applied on user selection of presets", - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false }, - "displayName": { - "type": "string", - "x-omitempty": false + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" }, - "group": { + "layer": { "type": "string", - "x-omitempty": false + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] }, - "name": { - "type": "string", - "x-omitempty": false + "logo": { + "description": "path to the pack logo", + "type": "string" }, - "remove": { + "manifests": { "type": "array", "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "Pack registry uid", - "type": "string" - }, - "schema": { - "description": "Pack schema contains constraints such as data type, format, hints for the pack values", - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false + } }, - "hints": { + "presets": { "type": "array", "items": { - "type": "string" - }, - "x-omitempty": false + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } }, - "listOptions": { + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { "type": "array", "items": { - "type": "string" - }, - "x-omitempty": false + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } }, - "name": { - "type": "string", - "x-omitempty": false + "server": { + "description": "pack registry server or helm repo", + "type": "string" }, - "readonly": { - "type": "boolean", - "x-omitempty": false + "tag": { + "description": "pack tag", + "type": "string" }, - "regex": { + "type": { + "description": "type of the pack", "type": "string", - "x-omitempty": false + "enum": [ + "spectro", + "helm", + "manifest" + ] }, - "required": { - "type": "boolean", - "x-omitempty": false + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" }, - "type": { - "type": "string", - "x-omitempty": false + "version": { + "description": "pack version", + "type": "string" } } } }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" }, - "values": { - "description": "Pack values", + "uid": { + "description": "Cluster profile uid", "type": "string" }, "version": { - "description": "Pack version", - "type": "string" + "type": "integer", + "format": "int32" } } }, - "status": { - "description": "Pack status", - "type": "object" + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + } + }, + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } } } - } - } - } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Comma seperated pack meta such as schema, presets", - "name": "includePackMeta", - "in": "query" - } - ] - }, - "/v1/clusterprofiles/{uid}/packs/resolvedValues": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified cluster profile packs resolved values", - "operationId": "v1ClusterProfilesUidPacksResolvedValuesGet", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "Pack resolved values", - "properties": { - "resolved": { - "description": "Pack resolved values map", + }, + "status": { + "description": "Spectro cluster status summary", + "properties": { + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "hourlyRate": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "metrics": { + "description": "Spectro cluster metrics", + "properties": { + "cpu": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "repave": { + "description": "Cluster repave status", + "properties": { + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + }, + "state": { + "type": "string" + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", "type": "object", - "additionalProperties": { - "type": "string" + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } } } } } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Pack params request payload", - "properties": { - "references": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - } - ] + } }, - "/v1/clusterprofiles/{uid}/packs/{packName}": { - "get": { + "/v1/dashboard/clusterprofiles": { + "post": { "security": [ { "ApiKey": [] @@ -66295,760 +65447,497 @@ "tags": [ "v1" ], - "summary": "Returns the specified cluster profile pack", - "operationId": "V1ClusterProfilesUidPacksNameGet", + "summary": "Retrieves a list of cluster profiles filter summary Supported filter fields - [\"profileName\", \"tags\", \"profileType\", \"environment\"] Supported sort fields - [\"profileName\", \"environment\", \"profileType\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "operationId": "v1ClusterProfilesFilterSummary", "parameters": [ + { + "maximum": 20, + "type": "integer", + "format": "int64", + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, + { + "name": "body", + "in": "body", "schema": { - "description": "Pack summary response", - "type": "object", + "description": "Spectro cluster filter summary spec", "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", + "filter": { + "description": "Cluster profile filter spec", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { + "environment": { + "type": "array", + "uniqueItems": true, + "items": { "type": "string" } }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "fips": { "type": "string", - "format": "date-time" + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "profileName": { "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Pack summary spec", - "properties": { - "macros": { - "description": "Pack resolved values", "properties": { - "resolved": { - "description": "Pack resolved values map", - "type": "object", - "additionalProperties": { - "type": "string" - } + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true } } }, - "pack": { - "description": "Pack object", + "profileType": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string", + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ] + } + }, + "scope": { + "type": "string", + "enum": [ + "system", + "tenant", + "project" + ] + }, + "tags": { "type": "object", "properties": { - "addonSubType": { - "description": "Pack add-on sub type such as monitoring, db etc", - "type": "string" - }, - "addonType": { - "description": "Pack add-on type such as logging, monitoring, security etc", - "type": "string" - }, - "annotations": { - "description": "Pack annotations is used to allow pack to add more arbitrary configurations", - "type": "object", - "additionalProperties": { + "beginsWith": { + "type": "array", + "items": { "type": "string" - } + }, + "x-nullable": true }, - "cloudTypes": { - "description": "Pack supported cloud types", + "eq": { "type": "array", "items": { "type": "string" - } - }, - "digest": { - "description": "Pack digest", - "type": "string" + }, + "x-nullable": true }, - "displayName": { - "description": "Pack display name", - "type": "string" + "ignoreCase": { + "type": "boolean", + "default": true }, - "eol": { - "description": "Pack end of life, date format: yyyy-MM-dd", - "type": "string" + "ne": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + } + } + }, + "version": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true }, - "group": { - "description": "Pack group", - "type": "string" + "eq": { + "type": "string", + "x-nullable": true }, - "layer": { + "gt": { "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] + "x-nullable": true }, - "logoUrl": { - "description": "Pack logo url", - "type": "string" + "lt": { + "type": "string", + "x-nullable": true }, - "manifests": { - "description": "Pack manifests are additional content as part of the cluster profile", - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "profileName", + "environment", + "profileType", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster profiles summary items", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "description": "Cluster profile spec summary", + "type": "object", + "properties": { + "draft": { + "description": "Cluster profile template summary", "type": "object", "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "cloudType": { "type": "string" }, - "name": { - "description": "Name of the referent.", - "type": "string" + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } }, - "uid": { - "description": "UID of the referent.", + "type": { "type": "string" } } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "presets": { - "description": "Pack presets are the set of configurations applied on user selection of presets", - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", + }, + "published": { + "description": "Cluster profile template summary", "type": "object", "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false + "cloudType": { + "type": "string" }, - "remove": { + "packs": { "type": "array", "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { + "type": "string" + } + } + }, + "version": { + "description": "Cluster profile's latest version", + "type": "string" + }, + "versions": { + "description": "Cluster profile's list of all the versions", + "type": "array", + "items": { + "description": "Cluster profile with version", + "properties": { + "uid": { "type": "string" }, - "x-omitempty": false + "version": { + "type": "string" + } } } } - }, - "registryUid": { - "description": "Pack registry uid", - "type": "string" - }, - "schema": { - "description": "Pack schema contains constraints such as data type, format, hints for the pack values", - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", + } + }, + "status": { + "description": "ClusterProfileStatusSummary defines the observed state of ClusterProfile", + "type": "object", + "properties": { + "fips": { + "description": "Cluster profile fips compliance status", "properties": { - "format": { + "mode": { "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "type": "array", + "items": { + "type": "string" + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { "type": "string" }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { + "uid": { "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", + } + } + } + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false + }, + "pack": { + "description": "Cluster profile packs summary about the deprecated, disabled, deleted packs count", + "type": "object", + "properties": { + "deleted": { + "description": "Total count of deleted packs in a cluster profile", + "type": "number", "x-omitempty": false }, - "readonly": { - "type": "boolean", + "deprecated": { + "description": "Total count of deprecated packs in a cluster profile", + "type": "number", "x-omitempty": false }, - "regex": { - "type": "string", + "disabled": { + "description": "Total count of disabled packs in a cluster profile", + "type": "number", "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "template": { - "description": "Pack template configuration", - "properties": { - "manifest": { - "description": "Pack template manifest content", - "type": "string" - }, - "parameters": { - "description": "Pack template parameters", - "properties": { - "inputParameters": { - "description": "Pack template input parameters array", - "type": "array", - "items": { - "description": "Pack template parameter", - "properties": { - "description": { - "description": "Pack template parameter description", - "type": "string" - }, - "displayName": { - "description": "Pack template parameter display name", - "type": "string" - }, - "format": { - "description": "Pack template parameter format", - "type": "string" - }, - "hidden": { - "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", - "type": "boolean" - }, - "listOptions": { - "description": "Pack template parameter list options as string array", - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "description": "Pack template parameter name", - "type": "string" - }, - "optional": { - "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", - "type": "boolean" - }, - "options": { - "description": "Pack template parameter options array", - "type": "object", - "additionalProperties": { - "description": "Pack template parameter option", - "type": "object", - "properties": { - "dependencies": { - "description": "Pack template parameter dependencies", - "type": "array", - "items": { - "description": "Pack template dependency", - "type": "object", - "properties": { - "layer": { - "description": "Pack template dependency pack layer", - "type": "string" - }, - "name": { - "description": "Pack template dependency pack name", - "type": "string" - }, - "readOnly": { - "description": "If true then dependency pack values can't be overridden", - "type": "boolean" - } - } - } - }, - "description": { - "description": "Pack template parameter description", - "type": "string" - }, - "label": { - "description": "Pack template parameter label", - "type": "string" - } - } - } - }, - "readOnly": { - "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", - "type": "boolean" - }, - "regex": { - "description": "Pack template parameter regex, if set then parameter value must match with specified regex", - "type": "string" - }, - "targetKey": { - "description": "Pack template parameter target key which is mapped to the key defined in the pack values", - "type": "string" - }, - "type": { - "description": "Pack template parameter data type", - "type": "string" - }, - "value": { - "description": "Pack template parameter value", - "type": "string" - } - } - } - }, - "outputParameters": { - "description": "Pack template output parameters array", - "type": "array", - "items": { - "description": "Pack template parameter", - "properties": { - "description": { - "description": "Pack template parameter description", - "type": "string" - }, - "displayName": { - "description": "Pack template parameter display name", - "type": "string" - }, - "format": { - "description": "Pack template parameter format", - "type": "string" - }, - "hidden": { - "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", - "type": "boolean" - }, - "listOptions": { - "description": "Pack template parameter list options as string array", - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "description": "Pack template parameter name", - "type": "string" - }, - "optional": { - "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", - "type": "boolean" - }, - "options": { - "description": "Pack template parameter options array", - "type": "object", - "additionalProperties": { - "description": "Pack template parameter option", - "type": "object", - "properties": { - "dependencies": { - "description": "Pack template parameter dependencies", - "type": "array", - "items": { - "description": "Pack template dependency", - "type": "object", - "properties": { - "layer": { - "description": "Pack template dependency pack layer", - "type": "string" - }, - "name": { - "description": "Pack template dependency pack name", - "type": "string" - }, - "readOnly": { - "description": "If true then dependency pack values can't be overridden", - "type": "boolean" - } - } - } - }, - "description": { - "description": "Pack template parameter description", - "type": "string" - }, - "label": { - "description": "Pack template parameter label", - "type": "string" - } - } - } - }, - "readOnly": { - "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", - "type": "boolean" - }, - "regex": { - "description": "Pack template parameter regex, if set then parameter value must match with specified regex", - "type": "string" - }, - "targetKey": { - "description": "Pack template parameter target key which is mapped to the key defined in the pack values", - "type": "string" - }, - "type": { - "description": "Pack template parameter data type", - "type": "string" - }, - "value": { - "description": "Pack template parameter value", - "type": "string" - } - } - } - } } - }, - "values": { - "description": "Pack template values", - "type": "string" } } - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values", - "type": "string" - }, - "version": { - "description": "Pack version", - "type": "string" - } - } - }, - "registry": { - "description": "Registry meta", - "type": "object", - "properties": { - "isDefault": { - "type": "boolean", - "x-omitempty": false - }, - "isPrivate": { - "type": "boolean", - "x-omitempty": false - }, - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "scope": { - "type": "string" - }, - "uid": { - "type": "string" } } } } - } - } - } - } - } - }, - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates the specified pack information in the cluster profile", - "operationId": "v1ClusterProfilesUidPacksNameUpdate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Pack update request payload", - "properties": { - "pack": { - "description": "Pack object", + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", "type": "object", - "required": [ - "uid", - "name" - ], "properties": { - "layer": { - "description": "Pack layer", - "type": "string" - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack tag", - "type": "string" - }, - "type": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] + "x-omitempty": false }, - "uid": { - "description": "Pack uid", - "type": "string" + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "delete": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Deletes the specified pack information in the cluster profile", - "operationId": "v1ClusterProfilesUidPacksNameDelete", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Cluster profile pack name", - "name": "packName", - "in": "path", - "required": true - } - ] - }, - "/v1/clusterprofiles/{uid}/packs/{packName}/config": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified cluster profile pack configuration", - "operationId": "v1ClusterProfilesUidPacksConfigGet", - "parameters": [ - { - "type": "string", - "description": "cluster profile uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Cluster profile pack name", - "name": "packName", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Cluster profile pack uid", - "name": "packUid", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of cluster profile pack configurations", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack configuration", - "type": "object", - "properties": { - "spec": { - "type": "object", - "properties": { - "associatedObject": { - "type": "string" - }, - "isValuesOverridden": { - "type": "boolean", - "x-omitempty": false - }, - "manifests": { - "type": "array", - "items": { - "type": "object", - "properties": { - "digest": { - "type": "string" - }, - "isOverridden": { - "type": "boolean", - "x-omitempty": false - }, - "name": { - "type": "string" - }, - "parentUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - }, - "packUid": { - "type": "string" - }, - "scope": { - "type": "string" - }, - "tag": { - "type": "string" - }, - "type": { - "type": "string" - }, - "values": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false } } } @@ -67058,7 +65947,7 @@ } } }, - "/v1/clusterprofiles/{uid}/packs/{packName}/manifests": { + "/v1/dashboard/clusterprofiles/metadata": { "get": { "security": [ { @@ -67071,8 +65960,8 @@ "tags": [ "v1" ], - "summary": "Returns the associated manifests for the specified profile's pack", - "operationId": "v1ClusterProfilesUidPacksUidManifests", + "summary": "Retrieves a list of cluster profiles metadata", + "operationId": "v1ClusterProfilesMetadata", "parameters": [ { "type": "string", @@ -67083,7 +65972,7 @@ ], "responses": { "200": { - "description": "OK", + "description": "An array of cluster summary items", "schema": { "type": "object", "required": [ @@ -67091,86 +65980,30 @@ ], "properties": { "items": { - "description": "Manifests array", "type": "array", "uniqueItems": true, "items": { - "description": "Manifest object", + "description": "Cluster profile filter spec", "properties": { "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "description": "Object identity meta", "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, "name": { - "description": "Name of the resource.", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", "type": "string" } } }, "spec": { - "description": "Manifest spec", - "type": "object", "properties": { - "draft": { - "description": "Published manifest object", - "type": "object", - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "digest": { - "description": "Manifest digest", - "type": "string" - } - } + "cloudType": { + "type": "string" }, - "published": { - "description": "Published manifest object", - "type": "object", - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "digest": { - "description": "Manifest digest", - "type": "string" - } - } + "version": { + "type": "string" } } } @@ -67181,87 +66014,9 @@ } } } - }, - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Adds manifest to the profiles packs and returns the added manifests uid", - "operationId": "v1ClusterProfilesUidPacksNameManifestsAdd", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Manifest request payload", - "properties": { - "content": { - "description": "Manifest content", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Cluster profile pack name", - "name": "packName", - "in": "path", - "required": true - } - ] + } }, - "/v1/clusterprofiles/{uid}/packs/{packName}/manifests/{manifestUid}": { + "/v1/dashboard/clusterprofiles/{uid}": { "get": { "security": [ { @@ -67274,8 +66029,8 @@ "tags": [ "v1" ], - "summary": "Returns the specified cluster profile pack manifest", - "operationId": "v1ClusterProfilesUidPacksNameManifestsUidGet", + "summary": "Retrieves a specified cluster profile summary", + "operationId": "v1ClusterProfilesUidSummary", "parameters": [ { "type": "string", @@ -67286,16 +66041,17 @@ ], "responses": { "200": { - "description": "OK", + "description": "Cluster profile summary response", "schema": { - "description": "Manifest object", + "description": "Cluster profile summary", + "type": "object", "properties": { "metadata": { "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -67312,7 +66068,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -67324,153 +66080,246 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, - "spec": { - "description": "Manifest spec", + "specSummary": { + "description": "Cluster profile spec summary", "type": "object", "properties": { "draft": { - "description": "Published manifest object", + "description": "Cluster profile template summary", "type": "object", "properties": { - "content": { - "description": "Manifest content in yaml", + "cloudType": { "type": "string" }, - "digest": { - "description": "Manifest digest", + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { "type": "string" } } }, "published": { - "description": "Published manifest object", + "description": "Cluster profile template summary", "type": "object", "properties": { - "content": { - "description": "Manifest content in yaml", + "cloudType": { "type": "string" }, - "digest": { - "description": "Manifest digest", + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "type": { "type": "string" } } + }, + "version": { + "description": "Cluster profile's latest version", + "type": "string" + }, + "versions": { + "description": "Cluster profile's list of all the versions", + "type": "array", + "items": { + "description": "Cluster profile with version", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } } } - } - } - } - } - } - }, - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates the specified manifest of the profile's pack", - "operationId": "v1ClusterProfilesUidPacksNameManifestsUidUpdate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Manifest request payload", - "properties": { - "content": { - "description": "Manifest content", - "type": "string" }, - "name": { - "description": "Manifest name", - "type": "string" + "status": { + "description": "ClusterProfileStatusSummary defines the observed state of ClusterProfile", + "type": "object", + "properties": { + "fips": { + "description": "Cluster profile fips compliance status", + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "type": "array", + "items": { + "type": "string" + } + }, + "inUseClusters": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false + }, + "pack": { + "description": "Cluster profile packs summary about the deprecated, disabled, deleted packs count", + "type": "object", + "properties": { + "deleted": { + "description": "Total count of deleted packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "deprecated": { + "description": "Total count of deprecated packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "disabled": { + "description": "Total count of disabled packs in a cluster profile", + "type": "number", + "x-omitempty": false + } + } + } + } } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "delete": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Deletes the specified cluster profile pack manifest", - "operationId": "v1ClusterProfilesUidPacksNameManifestsUidDelete", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" } } }, "parameters": [ { "type": "string", - "description": "Cluster profile uid", "name": "uid", "in": "path", "required": true - }, - { - "type": "string", - "description": "Cluster profile pack name", - "name": "packName", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "Cluster profile pack manifest uid", - "name": "manifestUid", - "in": "path", - "required": true } ] }, - "/v1/clusterprofiles/{uid}/publish": { - "patch": { + "/v1/dashboard/edgehosts/search": { + "post": { "security": [ { "ApiKey": [] @@ -67479,756 +66328,288 @@ "Authorization": [] } ], - "description": "Publish the draft cluster profile with next revision, the current draft cluster profile will be marked to published\nand the draft cluster profile will be set to null in the cluster profile template.\n", "tags": [ "v1" ], - "summary": "Publishes the specified cluster profile", - "operationId": "v1ClusterProfilesPublish", + "summary": "Retrieves a list of Edgehosts summary with provided search filter. Supported fields as per schema /v1/dashboard/edgehosts/search/schema", + "operationId": "v1DashboardEdgehostsSearch", "parameters": [ + { + "maximum": 20, + "type": "integer", + "format": "int64", + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Cluster profile published successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/clusterprofiles/{uid}/spc/download": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "produces": [ - "application/octet-stream" - ], - "tags": [ - "v1" - ], - "summary": "Downloads the specified cluster profile", - "operationId": "v1ClusterProfilesUidSpcDownload", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Download cluster profile archive file", - "schema": { - "type": "string", - "format": "binary" - }, - "headers": { - "Content-Disposition": { - "type": "string" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/clusterprofiles/{uid}/validate/packs": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Validates specified cluster profile packs", - "operationId": "v1ClusterProfilesUidValidatePacks", - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" }, { "name": "body", "in": "body", "schema": { - "description": "Cluster profile template spec", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack request payload", - "type": "object", - "required": [ - "name" - ], - "properties": { - "layer": { - "description": "Pack layer", - "type": "string" - }, - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest request payload", - "properties": { - "content": { - "description": "Manifest content", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "registryUid": { - "description": "Pack registry uid", - "type": "string" - }, - "tag": { - "description": "Pack tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "uid": { - "description": "Pack uid", - "type": "string" - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - }, - "type": { - "type": "string", - "default": "cluster", - "enum": [ - "cluster", - "infra", - "add-on", - "system" - ] - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Cluster profile packs validation response", - "schema": { - "description": "Cluster profile validator response", - "type": "object", + "description": "Spectro cluster search filter summary spec", "properties": { - "packs": { - "description": "Constraint validator response", - "type": "object", + "filter": { "properties": { - "results": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filterGroups": { "type": "array", "uniqueItems": true, "items": { - "description": "Constraint validator result", - "type": "object", "properties": { - "displayName": { - "type": "string" + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true }, - "errors": { + "filters": { "type": "array", "uniqueItems": true, "items": { - "type": "object", "properties": { - "code": { - "type": "string" + "condition": { + "properties": { + "bool": { + "properties": { + "value": { + "type": "boolean" + } + } + }, + "date": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + } + } + }, + "float": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "int": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "keyValue": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "string": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + } + } }, - "message": { + "property": { "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "int", + "float", + "bool", + "date", + "keyValue" + ] } } } - }, - "name": { - "type": "string" } } } } } - } - } - } - } - } - } - }, - "/v1/clusterprofiles/{uid}/variables": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieve a list of variables defined for the cluster profile", - "operationId": "V1ClusterProfilesUidVariablesGet", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "object", - "properties": { - "variables": { - "description": "List of unique variable fields with schema constraints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Unique variable field with schema definition", - "type": "object", - "required": [ - "name" - ], - "properties": { - "defaultValue": { - "description": "The default value of the variable", - "type": "string" - }, - "description": { - "description": "Variable description", - "type": "string" - }, - "displayName": { - "description": "Unique display name of the variable", - "type": "string" - }, - "format": { - "description": "Format type of the variable value", - "type": "string", - "default": "string", - "enum": [ - "string", - "number", - "boolean", - "ipv4", - "ipv4cidr", - "ipv6", - "version" - ] - }, - "hidden": { - "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "immutable": { - "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "isSensitive": { - "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "name": { - "description": "Variable name", - "type": "string" - }, - "regex": { - "description": "Regular expression pattern which the variable value must match", - "type": "string" - }, - "required": { - "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - } - } - }, - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Update the variables defined for a cluster profile", - "operationId": "V1ClusterProfilesUidVariablesPut", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "variables": { - "description": "List of unique variable fields with schema constraints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Unique variable field with schema definition", - "type": "object", - "required": [ - "name" - ], - "properties": { - "defaultValue": { - "description": "The default value of the variable", - "type": "string" - }, - "description": { - "description": "Variable description", - "type": "string" - }, - "displayName": { - "description": "Unique display name of the variable", - "type": "string" - }, - "format": { - "description": "Format type of the variable value", - "type": "string", - "default": "string", - "enum": [ - "string", - "number", - "boolean", - "ipv4", - "ipv4cidr", - "ipv6", - "version" - ] - }, - "hidden": { - "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "immutable": { - "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "isSensitive": { - "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "name": { - "description": "Variable name", - "type": "string" - }, - "regex": { - "description": "Regular expression pattern which the variable value must match", - "type": "string" - }, - "required": { - "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "delete": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Deletes the specified cluster profile variables", - "operationId": "V1ClusterProfilesUidVariablesDelete", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "required": [ - "variables" - ], - "properties": { - "variables": { - "description": "Array of variable names", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" - } - } - }, - "patch": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Update specific variables defined for a cluster profile", - "operationId": "V1ClusterProfilesUidVariablesPatch", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "variables": { - "description": "List of unique variable fields with schema constraints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Unique variable field with schema definition", - "type": "object", - "required": [ - "name" - ], - "properties": { - "defaultValue": { - "description": "The default value of the variable", - "type": "string" - }, - "description": { - "description": "Variable description", - "type": "string" - }, - "displayName": { - "description": "Unique display name of the variable", - "type": "string" - }, - "format": { - "description": "Format type of the variable value", - "type": "string", - "default": "string", - "enum": [ - "string", - "number", - "boolean", - "ipv4", - "ipv4cidr", - "ipv6", - "version" - ] - }, - "hidden": { - "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "immutable": { - "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "isSensitive": { - "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", - "type": "boolean", - "x-omitempty": false - }, - "name": { - "description": "Variable name", - "type": "string" - }, - "regex": { - "description": "Regular expression pattern which the variable value must match", - "type": "string" - }, - "required": { - "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster profile uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/dashboard/appDeployments": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of application deployments filter summary Supported filter fields - [\"appDeploymentName\", \"clusterUid\", \"tags\"] Supported sort fields - [\"appDeploymentName\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", - "operationId": "v1DashboardAppDeployments", - "parameters": [ - { - "maximum": 20, - "type": "integer", - "format": "int64", - "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { - "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Application deployment filter summary spec", - "properties": { - "filter": { - "description": "Application deployment filter spec", - "properties": { - "appDeploymentName": { - "type": "object", - "properties": { - "beginsWith": { - "type": "string", - "x-nullable": true - }, - "contains": { - "type": "string", - "x-nullable": true - }, - "eq": { - "type": "string", - "x-nullable": true - }, - "ignoreCase": { - "type": "boolean", - "default": true - }, - "ne": { - "type": "string", - "x-nullable": true - } - } - }, - "clusterUids": { - "type": "object", - "properties": { - "beginsWith": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - }, - "eq": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - }, - "ignoreCase": { - "type": "boolean", - "default": true - }, - "ne": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - } - } - }, - "tags": { - "type": "object", - "properties": { - "beginsWith": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - }, - "eq": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - }, - "ignoreCase": { - "type": "boolean", - "default": true - }, - "ne": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - } - } - } - } }, "sort": { "type": "array", @@ -68238,7 +66619,10 @@ "field": { "type": "string", "enum": [ - "appDeploymentName", + "environment", + "clusterName", + "clusterState", + "healthState", "creationTimestamp", "lastModifiedTimestamp" ], @@ -68267,15 +66651,17 @@ ], "responses": { "200": { - "description": "An array of application deployment summary items", + "description": "An array of edgehost summary items", "schema": { "type": "object", + "required": [ + "items" + ], "properties": { - "appDeployments": { + "items": { "type": "array", "uniqueItems": true, "items": { - "description": "Application deployment summary", "type": "object", "properties": { "metadata": { @@ -68283,7 +66669,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -68300,7 +66686,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -68312,814 +66698,87 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Application deployment spec summary", "type": "object", "properties": { - "config": { - "description": "Application deployment config summary", - "properties": { - "target": { - "description": "Application deployment target config summary", - "properties": { - "clusterRef": { - "description": "Application deployment cluster reference", + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Edge host clusterprofile template summary", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packs": { + "type": "array", + "items": { + "description": "Pack ref summary", "properties": { - "deploymentClusterType": { - "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "addonType": { + "type": "string" + }, + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "displayName": { + "type": "string" + }, + "layer": { "type": "string", "enum": [ - "virtual", - "host" + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" ] }, + "logoUrl": { + "type": "string" + }, "name": { - "description": "Application deployment source cluster name", "type": "string" }, - "uid": { - "description": "Application deployment source cluster uid", + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { "type": "string" } } } - } - } - } - }, - "profile": { - "description": "Application deployment profile summary", - "properties": { - "metadata": { - "description": "Application deployment profile metadata summary", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "type": "string" - } - } - }, - "template": { - "description": "Application profile template summary", - "type": "object", - "properties": { - "appTiers": { - "type": "array", - "items": { - "description": "Application profile's tier summary", - "properties": { - "name": { - "type": "string" - }, - "source": { - "description": "Application profile's tier source information", - "properties": { - "addonSubType": { - "type": "string" - }, - "addonType": { - "type": "string" - }, - "logoUrl": { - "type": "string" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "status": { - "description": "Application deployment status summary", - "type": "object", - "properties": { - "cluster": { - "description": "Application deployment cluster status", - "properties": { - "health": { - "description": "Application deployment cluster health status", - "properties": { - "state": { - "type": "string" - } - } - }, - "state": { - "type": "string" - } - } - }, - "notifications": { - "description": "Application deployment notifications", - "properties": { - "isAvailable": { - "type": "boolean", - "x-omitempty": false - } - } - }, - "state": { - "type": "string" - } - } - } - } - } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/appProfiles": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of application profiles filter summary Supported filter fields - [\"profileName\", \"tags\"] Supported sort fields - [\"profileName\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", - "operationId": "v1DashboardAppProfiles", - "parameters": [ - { - "maximum": 20, - "type": "integer", - "format": "int64", - "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { - "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Application profile filter summary spec", - "properties": { - "filter": { - "description": "Application profile filter spec", - "properties": { - "profileName": { - "type": "object", - "properties": { - "beginsWith": { - "type": "string", - "x-nullable": true - }, - "contains": { - "type": "string", - "x-nullable": true - }, - "eq": { - "type": "string", - "x-nullable": true - }, - "ignoreCase": { - "type": "boolean", - "default": true - }, - "ne": { - "type": "string", - "x-nullable": true - } - } - }, - "tags": { - "type": "object", - "properties": { - "beginsWith": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - }, - "eq": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - }, - "ignoreCase": { - "type": "boolean", - "default": true - }, - "ne": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - } - } - }, - "version": { - "type": "object", - "properties": { - "beginsWith": { - "type": "string", - "x-nullable": true - }, - "eq": { - "type": "string", - "x-nullable": true - }, - "gt": { - "type": "string", - "x-nullable": true - }, - "lt": { - "type": "string", - "x-nullable": true - }, - "ne": { - "type": "string", - "x-nullable": true - } - } - } - } - }, - "sort": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "field": { - "type": "string", - "enum": [ - "profileName", - "creationTimestamp", - "lastModifiedTimestamp" - ], - "x-nullable": true - }, - "order": { - "type": "string", - "default": "asc", - "enum": [ - "asc", - "desc" - ] - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of application profiles summary items", - "schema": { - "type": "object", - "properties": { - "appProfiles": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Application profile summary", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Application profile spec summary", - "type": "object", - "properties": { - "parentUid": { - "type": "string" - }, - "template": { - "description": "Application profile template summary", - "type": "object", - "properties": { - "appTiers": { - "type": "array", - "items": { - "description": "Application profile's tier summary", - "properties": { - "name": { - "type": "string" - }, - "source": { - "description": "Application profile's tier source information", - "properties": { - "addonSubType": { - "type": "string" - }, - "addonType": { - "type": "string" - }, - "logoUrl": { - "type": "string" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - } - }, - "version": { - "type": "string" - }, - "versions": { - "description": "Application profile's list of all the versions", - "type": "array", - "items": { - "description": "Application profile version", - "type": "object", - "properties": { - "uid": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/appProfiles/metadata": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of application profile metadata", - "operationId": "v1DashboardAppProfilesMetadata", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of application profile summary items", - "schema": { - "type": "object", - "properties": { - "appProfiles": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Application profile metadata summary", - "type": "object", - "properties": { - "metadata": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "properties": { - "version": { - "type": "string" - } - } - } - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/appliances/metadata": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of edgehosts summary", - "operationId": "v1EdgeHostsMetadata", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Edge host metadata spec", - "properties": { - "filter": { - "description": "Edge hosts metadata filter spec", - "properties": { - "name": { - "type": "object", - "properties": { - "beginsWith": { - "type": "string", - "x-nullable": true - }, - "contains": { - "type": "string", - "x-nullable": true - }, - "eq": { - "type": "string", - "x-nullable": true - }, - "ignoreCase": { - "type": "boolean", - "default": true - }, - "ne": { - "type": "string", - "x-nullable": true - } - } - }, - "states": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string", - "enum": [ - "ready", - "unpaired", - "in-use" - ] - } - } - } - }, - "sort": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "field": { - "type": "string", - "enum": [ - "name", - "state", - "creationTimestamp", - "lastModifiedTimestamp" - ], - "x-nullable": true - }, - "order": { - "type": "string", - "default": "asc", - "enum": [ - "asc", - "desc" - ] - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of edgehost summary items", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "clusterProfileTemplates": { - "type": "array", - "items": { - "description": "Edge host clusterprofile template summary", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packs": { - "type": "array", - "items": { - "description": "Pack ref summary", - "properties": { - "addonType": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "displayName": { - "type": "string" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logoUrl": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packUid": { - "type": "string" - }, - "tag": { - "type": "string" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" } } } @@ -69346,6 +67005,32 @@ } } } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } } } } @@ -69353,7 +67038,7 @@ } } }, - "/v1/dashboard/cloudaccounts/metadata": { + "/v1/dashboard/edgehosts/search/schema": { "get": { "security": [ { @@ -69366,14 +67051,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of cloud accounts metadata", - "operationId": "v1DashboardCloudAccountsMetadata", + "summary": "Retrieves a schema for the Edgehost search filter", + "operationId": "v1DashboardEdgehostsSearchSchemaGet", "parameters": [ - { - "type": "string", - "name": "environment", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -69383,62 +67063,77 @@ ], "responses": { "200": { - "description": "An array of cloud accounts summary items", + "description": "An array of schema items", "schema": { - "type": "object", - "required": [ - "items" - ], "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cloud account metadata summary", + "schema": { + "properties": { "properties": { - "kind": { - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", + "type": "array", + "items": { "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "default": { "type": "string", - "format": "date-time" + "x-order": 6 }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "displayName": { "type": "string", - "format": "date-time" + "x-order": 2 }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + "enum": { + "type": "array", + "items": { "type": "string" - } + }, + "x-omitempty": true, + "x-order": 4 }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" + "enumValues": { + "type": "array", + "items": { + "properties": { + "displayValue": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "x-omitempty": true, + "x-order": 5 + }, + "hideDisplay": { + "type": "boolean", + "x-order": 1 + }, + "maxFloatVal": { + "type": "number", + "format": "float64", + "x-order": 10 + }, + "maxIntVal": { + "type": "integer", + "format": "int32", + "x-order": 8 + }, + "minFloatVal": { + "type": "number", + "format": "float64", + "x-order": 9 + }, + "minIntVal": { + "type": "integer", + "format": "int32", + "x-order": 7 }, "name": { - "description": "Name of the resource.", - "type": "string" + "type": "string", + "x-order": 0 }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" + "type": { + "type": "string", + "x-order": 3 } } } @@ -69451,7 +67146,7 @@ } } }, - "/v1/dashboard/clustergroups/{uid}/hostClusters": { + "/v1/dashboard/pcgs/search": { "post": { "security": [ { @@ -69464,20 +67159,14 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of cluster summary for a given cluster group", - "operationId": "v1ClusterGroupUidHostClustersSummary", + "summary": "Retrieves a list of PCG summary with provided search filter. Supported fields as per schema /v1/dashboard/pcgs/search/schema", + "operationId": "v1DashboardPcgsSearchSummary", "parameters": [ { - "type": "string", - "name": "uid", - "in": "path", - "required": true - }, - { + "maximum": 20, "type": "integer", "format": "int64", - "default": 50, - "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", "name": "limit", "in": "query" }, @@ -69801,15 +67490,18 @@ "type": "array", "uniqueItems": true, "items": { - "description": "Spectro cluster summary", + "description": "Overlord defintiion", "type": "object", "properties": { + "kind": { + "type": "string" + }, "metadata": { "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -69826,7 +67518,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -69838,867 +67530,179 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, - "specSummary": { - "description": "Spectro cluster spec summary", + "spec": { + "description": "Overload spec", "type": "object", "properties": { - "archTypes": { - "description": "Architecture type of the cluster", - "type": "array", - "items": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } + "cloudAccountUid": { + "type": "string", + "x-omitempty": false }, - "cloudAccountMeta": { - "description": "Cloud account meta information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "ipAddress": { + "type": "string" }, - "cloudConfig": { - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "machinePools": { - "description": "Machine pool meta information", - "type": "array", - "items": { + "ipPools": { + "type": "array", + "items": { + "description": "IP Pool entity definition", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { - "cloudType": { - "type": "string" + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "healthy": { - "description": "number of healthy machines", - "type": "integer", - "format": "int32", - "x-omitempty": false + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "infraProfileTemplate": { - "description": "Cluster profile template meta information", + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "pool": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", "type": "object", "properties": { - "cloudType": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", "type": "string" }, - "name": { - "description": "Cluster profile name", + "gateway": { + "description": "Gateway is the gateway ip address", "type": "string" }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "items": { "type": "string" - }, - "version": { - "description": "pack version", + } + }, + "search": { + "type": "array", + "items": { "type": "string" } } } }, - "scope": { - "description": "scope or context(system, tenant or project)", - "type": "string" + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "type": "integer", + "format": "int32" }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "start": { + "description": "Start is the first ip address that can be rendered", "type": "string" }, - "uid": { - "description": "Cluster profile uid", + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" } } }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "maintenanceMode": { - "description": "number of machines under maintenance", - "type": "integer", - "format": "int32", - "x-omitempty": false + "priavetGatewayUid": { + "type": "string" }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32", + "restrictToSingleCluster": { + "description": "if true, restricts this IP pool to be used by single cluster at any time", + "type": "boolean", "x-omitempty": false } } - } - }, - "uid": { - "description": "Cluster's cloud config uid", - "type": "string" - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "hostClusterConfig": { - "properties": { - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - } - } - } - }, - "clusterProfileTemplate": { - "description": "Cluster profile template meta information", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "description": "Cluster profile name", - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + }, + "status": { + "description": "IP Pool status", "type": "object", - "required": [ - "layer", - "name" - ], "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { + "allottedIps": { "type": "array", + "uniqueItems": true, "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { "type": "string" } }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { + "associatedClusters": { "type": "array", + "uniqueItems": true, "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } + "type": "string" } }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" + "inUse": { + "type": "boolean", + "x-omitempty": false } } } - }, - "scope": { - "description": "scope or context(system, tenant or project)", - "type": "string" - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" } } }, - "clusterProfileTemplates": { - "type": "array", - "items": { - "description": "Cluster profile template meta information", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "description": "Cluster profile name", - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" - } - } - } - }, - "scope": { - "description": "scope or context(system, tenant or project)", - "type": "string" - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" - } - } - } + "isSelfHosted": { + "type": "boolean" }, - "projectMeta": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "isSystem": { + "type": "boolean" + }, + "spectroClusterUid": { + "type": "string", + "x-omitempty": false + }, + "tenantUid": { + "type": "string" } } }, "status": { - "description": "Spectro cluster status summary", + "description": "Overload status", + "type": "object", "properties": { - "clusterImport": { - "type": "object", - "properties": { - "importLink": { - "description": "import link to download and install ally-lite, palette-lite", - "type": "string" - }, - "isBrownfield": { - "description": "Deprecated. Use the 'spec.clusterType'", - "type": "boolean", - "x-omitempty": false - }, - "state": { - "description": "cluster import status", - "type": "string" - } - } - }, - "cost": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "fips": { - "properties": { - "mode": { - "type": "string", - "default": "none", - "enum": [ - "full", - "none", - "partial", - "unknown" - ] - } - } - }, "health": { "description": "Spectro cluster health status", "properties": { @@ -70755,130 +67759,23 @@ } } }, - "hourlyRate": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } + "isActive": { + "type": "boolean", + "x-omitempty": false }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "coordinates": { - "type": "array", - "items": { - "type": "number", - "format": "float64" - } - }, - "countryCode": { - "type": "string" - }, - "countryName": { - "type": "string" - }, - "regionCode": { - "type": "string" - }, - "regionName": { - "type": "string" - } - } + "isReady": { + "type": "boolean", + "x-omitempty": false }, - "metrics": { - "description": "Spectro cluster metrics", - "properties": { - "cpu": { - "description": "Compute metrics", - "type": "object", - "properties": { - "lastUpdatedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "limit": { - "type": "number", - "x-omitempty": false - }, - "request": { - "type": "number", - "x-omitempty": false - }, - "total": { - "type": "number", - "x-omitempty": false - }, - "unit": { - "type": "string" - }, - "usage": { - "type": "number", - "x-omitempty": false - } - } - }, - "memory": { - "description": "Compute metrics", - "type": "object", - "properties": { - "lastUpdatedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "limit": { - "type": "number", - "x-omitempty": false - }, - "request": { - "type": "number", - "x-omitempty": false - }, - "total": { - "type": "number", - "x-omitempty": false - }, - "unit": { - "type": "string" - }, - "usage": { - "type": "number", - "x-omitempty": false - } - } - } + "kubectlCommands": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" } }, "notifications": { - "description": "Spectro cluster notifications", + "description": "Cluster notifications status", "properties": { "isAvailable": { "type": "boolean", @@ -70886,132 +67783,435 @@ } } }, - "repave": { - "description": "Cluster repave status", - "properties": { - "state": { - "type": "string", - "default": "Pending", - "enum": [ - "Pending", - "Approved", - "Reverted" - ] - } - } - }, "state": { "type": "string" + } + } + } + } + } + }, + "listmeta": { + "description": "ListMeta describes metadata for the resource listing", + "type": "object", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + } + } + } + } + } + } + } + }, + "/v1/dashboard/pcgs/search/schema": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a schema for the PCG search filter", + "operationId": "v1DashboardPcgSearchSchemaGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of schema items", + "schema": { + "properties": { + "schema": { + "properties": { + "properties": { + "type": "array", + "items": { + "properties": { + "default": { + "type": "string", + "x-order": 6 }, - "virtual": { - "properties": { - "appDeployments": { - "description": "list of apps deployed on the virtual cluster", - "type": "array", - "items": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "displayName": { + "type": "string", + "x-order": 2 + }, + "enum": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": true, + "x-order": 4 + }, + "enumValues": { + "type": "array", + "items": { + "properties": { + "displayValue": { + "type": "string" + }, + "value": { + "type": "string" } - }, - "clusterGroup": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } + } + }, + "x-omitempty": true, + "x-order": 5 + }, + "hideDisplay": { + "type": "boolean", + "x-order": 1 + }, + "maxFloatVal": { + "type": "number", + "format": "float64", + "x-order": 10 + }, + "maxIntVal": { + "type": "integer", + "format": "int32", + "x-order": 8 + }, + "minFloatVal": { + "type": "number", + "format": "float64", + "x-order": 9 + }, + "minIntVal": { + "type": "integer", + "format": "int32", + "x-order": 7 + }, + "name": { + "type": "string", + "x-order": 0 + }, + "type": { + "type": "string", + "x-order": 3 + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/dashboard/projects": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "operationId": "v1ProjectsFilterSummary", + "parameters": [ + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Project filter summary spec", + "properties": { + "filter": { + "description": "Project filter spec", + "properties": { + "name": { + "type": "object", + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "type": "boolean", + "default": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "name", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of project filter summary items", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Project summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "type": "object", + "properties": { + "logoUrl": { + "type": "string" + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "users": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" } + } + } + } + } + }, + "status": { + "description": "Project status summary", + "type": "object", + "properties": { + "clustersHealth": { + "description": "Spectro Clusters health data", + "type": "object", + "properties": { + "errored": { + "type": "integer", + "format": "int32", + "x-omitempty": false }, - "hostCluster": { - "description": "Object resource reference", + "healthy": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "running": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "unhealthy": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + }, + "status": { + "description": "Project status", + "properties": { + "cleanUpStatus": { + "description": "Project cleanup status", "type": "object", "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" + "cleanedResources": { + "type": "array", + "items": { + "type": "string" + } }, - "uid": { - "type": "string" - } - } - }, - "lifecycleStatus": { - "properties": { "msg": { - "description": "error or success msg of lifecycle", "type": "string" }, - "status": { - "description": "lifecycle status", - "type": "string", - "enum": [ - "Pausing", - "Paused", - "Resuming", - "Running", - "Error" - ] + "state": { + "type": "string" } } }, - "state": { - "description": "cluster virtual host status", - "type": "string" + "isDisabled": { + "type": "boolean" + } + } + }, + "usage": { + "description": "Project usage summary", + "type": "object", + "properties": { + "alloyCpuCores": { + "type": "number", + "x-omitempty": false }, - "virtualClusters": { - "description": "list of virtual clusters deployed on the cluster", + "clusters": { "type": "array", "items": { - "description": "Object resource reference", + "description": "Cluster usage summary", "type": "object", "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" + "cpuCores": { + "type": "number", + "x-omitempty": false }, - "projectUid": { - "type": "string" + "isAlloy": { + "type": "boolean", + "x-omitempty": false }, - "tenantUid": { + "name": { "type": "string" }, "uid": { @@ -71019,6 +68219,10 @@ } } } + }, + "pureCpuCores": { + "type": "number", + "x-omitempty": false } } } @@ -71059,8 +68263,8 @@ } } }, - "/v1/dashboard/clustergroups/{uid}/virtualClusters": { - "post": { + "/v1/dashboard/projects/metadata": { + "get": { "security": [ { "ApiKey": [] @@ -71072,322 +68276,295 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of cluster summary for a given cluster group", - "operationId": "v1ClusterGroupUidVirtualClustersSummary", + "summary": "Retrieves a list of projects metadata", + "operationId": "v1ProjectsMetadata", "parameters": [ { "type": "string", - "name": "uid", - "in": "path", - "required": true - }, - { - "type": "integer", - "format": "int64", - "default": 50, - "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", + "description": "Name of the project", + "name": "name", "in": "query" }, { "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of project metadata items", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Project metadata", + "properties": { + "metadata": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/dashboard/spectroclusters/cost": { + "post": { + "security": [ + { + "ApiKey": [] }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves spectro clusters cloud cost summary information", + "operationId": "v1DashboardSpectroClustersCostSummary", + "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Spectro cluster search filter summary spec", + "description": "Spectro cluster cloud cost summary spec", + "type": "object", "properties": { "filter": { + "description": "Spectro cluster cloud cost summary filter", + "type": "object", "properties": { - "conjunction": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true + "format": "date-time" }, - "filterGroups": { + "projects": { "type": "array", "uniqueItems": true, "items": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "filters": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "condition": { - "properties": { - "bool": { - "properties": { - "value": { - "type": "boolean" - } - } - }, - "date": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte", - "range" - ] - } - } - }, - "float": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "number", - "format": "float64" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte" - ] - } - } - }, - "int": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "integer" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte" - ] - } - } - }, - "keyValue": { - "properties": { - "ignoreCase": { - "type": "boolean" - }, - "key": { - "type": "string" - }, - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "contains", - "beginsWith" - ] - } - } - }, - "string": { - "properties": { - "ignoreCase": { - "type": "boolean" - }, - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "contains", - "beginsWith" - ] - } - } - } - } - }, - "property": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "string", - "int", - "float", - "bool", - "date", - "keyValue" - ] - } - } - } - } - } + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" } } } }, - "sort": { + "options": { + "description": "Spectro cluster cloud cost summary options", + "type": "object", + "properties": { + "groupBy": { + "type": "string", + "default": "project", + "enum": [ + "tenant", + "project", + "cloud", + "cluster" + ] + }, + "period": { + "type": "integer", + "format": "int32", + "default": 1440 + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of resources cloud cost summary items", + "schema": { + "description": "Resources cloud cost summary information", + "type": "object", + "properties": { + "resources": { "type": "array", - "uniqueItems": true, "items": { + "description": "Resource cloud cost summary information", + "type": "object", "properties": { - "field": { - "type": "string", - "enum": [ - "environment", - "clusterName", - "clusterState", - "healthState", - "creationTimestamp", - "lastModifiedTimestamp" + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cloud cost data point information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" ], - "x-nullable": true + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } }, - "order": { - "type": "string", - "default": "asc", - "enum": [ - "asc", - "desc" - ] + "total": { + "description": "Resource total cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } } } } + }, + "total": { + "description": "Resource total cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } } } } + } + } + } + }, + "/v1/dashboard/spectroclusters/filters/workspace": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of running, non rbac configured clusters in a workspace", + "operationId": "v1SpectroClustersFiltersWorkspace", + "parameters": [ + { + "type": "integer", + "format": "int64", + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" }, { "type": "string", @@ -71417,7 +68594,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -71434,7 +68611,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -71446,11 +68623,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -71570,11 +68747,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -71730,7 +68907,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -71771,11 +68948,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -71850,11 +69027,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -72072,11 +69249,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -72486,7 +69663,7 @@ } }, "notifications": { - "description": "Spectro cluster notifications", + "description": "Cluster notifications status", "properties": { "isAvailable": { "type": "boolean", @@ -72667,8 +69844,8 @@ } } }, - "/v1/dashboard/clusterprofiles": { - "post": { + "/v1/dashboard/spectroclusters/metadata": { + "get": { "security": [ { "ApiKey": [] @@ -72680,186 +69857,168 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of cluster profiles filter summary Supported filter fields - [\"profileName\", \"tags\", \"profileType\", \"environment\"] Supported sort fields - [\"profileName\", \"environment\", \"profileType\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", - "operationId": "v1ClusterProfilesFilterSummary", + "summary": "Retrieves a list of cluster summary metadata", + "operationId": "v1SpectroClustersMetadataGet", "parameters": [ { - "maximum": 20, - "type": "integer", - "format": "int64", - "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { + "enum": [ + "hostclusters", + "strictHostclusters" + ], "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", + "name": "quickFilter", "in": "query" }, { - "name": "body", - "in": "body", + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", "schema": { - "description": "Spectro cluster filter summary spec", + "type": "object", + "required": [ + "items" + ], "properties": { - "filter": { - "description": "Cluster profile filter spec", - "properties": { - "environment": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "fips": { - "type": "string", - "default": "none", - "enum": [ - "full", - "none", - "partial", - "unknown" - ] - }, - "profileName": { - "type": "object", - "properties": { - "beginsWith": { - "type": "string", - "x-nullable": true - }, - "contains": { - "type": "string", - "x-nullable": true - }, - "eq": { - "type": "string", - "x-nullable": true - }, - "ignoreCase": { - "type": "boolean", - "default": true - }, - "ne": { - "type": "string", - "x-nullable": true + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" } - } - }, - "profileType": { - "type": "array", - "uniqueItems": true, - "items": { + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", - "default": "cluster", - "enum": [ - "cluster", - "infra", - "add-on", - "system" - ] + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" } + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of cluster summary", + "operationId": "v1SpectroClustersMetadata", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro cluster metadata spec", + "properties": { + "filter": { + "description": "Spectro cluster filter spec", + "properties": { + "environment": { + "type": "string" }, - "scope": { - "type": "string", - "enum": [ - "system", - "tenant", - "project" - ] + "includeVirtual": { + "type": "boolean", + "default": false }, - "tags": { - "type": "object", - "properties": { - "beginsWith": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - }, - "eq": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - }, - "ignoreCase": { - "type": "boolean", - "default": true - }, - "ne": { - "type": "array", - "items": { - "type": "string" - }, - "x-nullable": true - } - } + "isAlloy": { + "description": "isAlloy is renamed to isImported", + "type": "boolean", + "default": false }, - "version": { + "isImportReadOnly": { + "type": "boolean", + "default": true + }, + "isImported": { + "type": "boolean", + "default": false + }, + "name": { "type": "object", "properties": { "beginsWith": { "type": "string", "x-nullable": true }, - "eq": { + "contains": { "type": "string", "x-nullable": true }, - "gt": { + "eq": { "type": "string", "x-nullable": true }, - "lt": { - "type": "string", - "x-nullable": true + "ignoreCase": { + "type": "boolean", + "default": true }, "ne": { "type": "string", "x-nullable": true } } + }, + "state": { + "type": "string" } } }, "sort": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "field": { - "type": "string", - "enum": [ - "profileName", - "environment", - "profileType", - "creationTimestamp", - "lastModifiedTimestamp" - ], - "x-nullable": true - }, - "order": { - "type": "string", - "default": "asc", - "enum": [ - "asc", - "desc" - ] - } - } - } + "type": "string", + "enum": [ + "environment", + "state", + "name" + ], + "x-nullable": true } } } @@ -72873,7 +70032,7 @@ ], "responses": { "200": { - "description": "An array of cluster profiles summary items", + "description": "An array of cluster summary items", "schema": { "type": "object", "required": [ @@ -72884,656 +70043,46 @@ "type": "array", "uniqueItems": true, "items": { - "description": "Cluster profile summary", + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } + "additionalProperties": { + "type": "string" } }, - "specSummary": { - "description": "Cluster profile spec summary", - "type": "object", - "properties": { - "draft": { - "description": "Cluster profile template summary", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "packs": { - "type": "array", - "items": { - "description": "Pack ref summary", - "properties": { - "addonType": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "displayName": { - "type": "string" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logoUrl": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packUid": { - "type": "string" - }, - "tag": { - "type": "string" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - }, - "type": { - "type": "string" - } - } - }, - "published": { - "description": "Cluster profile template summary", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "packs": { - "type": "array", - "items": { - "description": "Pack ref summary", - "properties": { - "addonType": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "displayName": { - "type": "string" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logoUrl": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packUid": { - "type": "string" - }, - "tag": { - "type": "string" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - }, - "type": { - "type": "string" - } - } - }, - "version": { - "description": "Cluster profile's latest version", - "type": "string" - }, - "versions": { - "description": "Cluster profile's list of all the versions", - "type": "array", - "items": { - "description": "Cluster profile with version", - "properties": { - "uid": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - } + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "status": { - "description": "ClusterProfileStatusSummary defines the observed state of ClusterProfile", - "type": "object", - "properties": { - "fips": { - "description": "Cluster profile fips compliance status", - "properties": { - "mode": { - "type": "string", - "default": "none", - "enum": [ - "full", - "none", - "partial", - "unknown" - ] - } - } - }, - "inUseClusterUids": { - "description": "Deprecated. Use inUseClusters", - "type": "array", - "items": { - "type": "string" - } - }, - "inUseClusters": { - "type": "array", - "items": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "isPublished": { - "type": "boolean", - "x-omitempty": false - }, - "pack": { - "description": "Cluster profile packs summary about the deprecated, disabled, deleted packs count", - "type": "object", - "properties": { - "deleted": { - "description": "Total count of deleted packs in a cluster profile", - "type": "number", - "x-omitempty": false - }, - "deprecated": { - "description": "Total count of deprecated packs in a cluster profile", - "type": "number", - "x-omitempty": false - }, - "disabled": { - "description": "Total count of disabled packs in a cluster profile", - "type": "number", - "x-omitempty": false - } - } - } - } - } - } - } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/clusterprofiles/metadata": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of cluster profiles metadata", - "operationId": "v1ClusterProfilesMetadata", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of cluster summary items", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster profile filter spec", - "properties": { - "metadata": { - "description": "Object identity meta", + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } + "additionalProperties": { + "type": "string" } }, - "spec": { - "properties": { - "cloudType": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/clusterprofiles/{uid}": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a specified cluster profile summary", - "operationId": "v1ClusterProfilesUidSummary", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Cluster profile summary response", - "schema": { - "description": "Cluster profile summary", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "specSummary": { - "description": "Cluster profile spec summary", - "type": "object", - "properties": { - "draft": { - "description": "Cluster profile template summary", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "packs": { - "type": "array", - "items": { - "description": "Pack ref summary", - "properties": { - "addonType": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "displayName": { - "type": "string" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logoUrl": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packUid": { - "type": "string" - }, - "tag": { - "type": "string" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - }, - "type": { - "type": "string" - } - } - }, - "published": { - "description": "Cluster profile template summary", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "packs": { - "type": "array", - "items": { - "description": "Pack ref summary", - "properties": { - "addonType": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "displayName": { - "type": "string" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logoUrl": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packUid": { - "type": "string" - }, - "tag": { - "type": "string" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - }, - "type": { - "type": "string" - } - } - }, - "version": { - "description": "Cluster profile's latest version", - "type": "string" - }, - "versions": { - "description": "Cluster profile's list of all the versions", - "type": "array", - "items": { - "description": "Cluster profile with version", - "properties": { - "uid": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - } - }, - "status": { - "description": "ClusterProfileStatusSummary defines the observed state of ClusterProfile", - "type": "object", - "properties": { - "fips": { - "description": "Cluster profile fips compliance status", - "properties": { - "mode": { - "type": "string", - "default": "none", - "enum": [ - "full", - "none", - "partial", - "unknown" - ] - } - } - }, - "inUseClusterUids": { - "description": "Deprecated. Use inUseClusters", - "type": "array", - "items": { + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } - }, - "inUseClusters": { - "type": "array", - "items": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "isPublished": { - "type": "boolean", - "x-omitempty": false - }, - "pack": { - "description": "Cluster profile packs summary about the deprecated, disabled, deleted packs count", - "type": "object", - "properties": { - "deleted": { - "description": "Total count of deleted packs in a cluster profile", - "type": "number", - "x-omitempty": false - }, - "deprecated": { - "description": "Total count of deprecated packs in a cluster profile", - "type": "number", - "x-omitempty": false - }, - "disabled": { - "description": "Total count of disabled packs in a cluster profile", - "type": "number", - "x-omitempty": false - } - } } } } @@ -73541,17 +70090,9 @@ } } } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] + } }, - "/v1/dashboard/edgehosts/search": { + "/v1/dashboard/spectroclusters/metadata/search": { "post": { "security": [ { @@ -73564,30 +70105,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Edgehosts summary with provided search filter. Supported fields as per schema /v1/dashboard/edgehosts/search/schema", - "operationId": "v1DashboardEdgehostsSearch", + "summary": "Retrieves a list of cluster metadata with provided search filter spec Supported sort fields - [\"environment\", \"clusterName\", \"clusterState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "operationId": "v1SpectroClustersMetadataSearch", "parameters": [ - { - "maximum": 20, - "type": "integer", - "format": "int64", - "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { - "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" - }, { "name": "body", "in": "body", @@ -73884,7 +70404,7 @@ ], "responses": { "200": { - "description": "An array of edgehost summary items", + "description": "An array of cluster summary meta items", "schema": { "type": "object", "required": [ @@ -73895,6 +70415,7 @@ "type": "array", "uniqueItems": true, "items": { + "description": "Spectro cluster meta summary", "type": "object", "properties": { "metadata": { @@ -73902,7 +70423,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -73919,7 +70440,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -73931,245 +70452,67 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, - "spec": { + "specSummary": { + "description": "Spectro cluster meta summary", "type": "object", "properties": { - "clusterProfileTemplates": { + "archType": { + "description": "Architecture type of the cluster", "type": "array", "items": { - "description": "Edge host clusterprofile template summary", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packs": { - "type": "array", - "items": { - "description": "Pack ref summary", - "properties": { - "addonType": { - "type": "string" - }, - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "displayName": { - "type": "string" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logoUrl": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packUid": { - "type": "string" - }, - "tag": { - "type": "string" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "type": "string" - } - } + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] } }, - "device": { - "description": "DeviceSpec defines the desired state of Device", + "cloudAccountUid": { + "type": "string" + }, + "cloudRegion": { + "type": "string" + }, + "cloudType": { + "type": "string" + }, + "clusterType": { + "type": "string" + }, + "importMode": { + "type": "string" + }, + "location": { + "description": "Cluster location information", "type": "object", "properties": { - "archType": { - "description": "Architecture type of the edge host", - "type": "string", - "default": "amd64", - "enum": [ - "arm64", - "amd64" - ] + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } }, - "cpu": { - "type": "object", - "properties": { - "cores": { - "description": "number of cpu cores", - "type": "integer", - "format": "int32" - } - } - }, - "disks": { - "type": "array", - "items": { - "type": "object", - "properties": { - "controller": { - "type": "string" - }, - "partitions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "fileSystemType": { - "type": "string" - }, - "freeSpace": { - "type": "integer", - "format": "int32" - }, - "mountPoint": { - "type": "string" - }, - "totalSpace": { - "type": "integer", - "format": "int32" - }, - "usedSpace": { - "type": "integer", - "format": "int32" - } - } - } - }, - "size": { - "description": "Size in GB", - "type": "integer", - "format": "int32" - }, - "vendor": { - "type": "string" - } - } - } - }, - "gpus": { - "type": "array", - "items": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "model": { - "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "vendor": { - "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - } - }, - "memory": { - "type": "object", - "properties": { - "sizeInMB": { - "description": "memory size in bytes", - "type": "integer", - "format": "int64" - } - } + "countryCode": { + "type": "string" }, - "nics": { - "type": "array", - "items": { - "type": "object", - "properties": { - "dns": { - "type": "array", - "items": { - "type": "string" - } - }, - "gateway": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - }, - "macAddr": { - "type": "string" - }, - "nicName": { - "type": "string" - }, - "subnet": { - "type": "string" - } - } - } + "countryName": { + "type": "string" }, - "os": { - "type": "object", - "properties": { - "family": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - }, - "host": { - "description": "Host specifications", - "properties": { - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the Host", + "regionCode": { "type": "string" }, - "macAddress": { + "regionName": { "type": "string" } } @@ -74185,54 +70528,67 @@ } } }, - "type": { - "type": "string" + "tags": { + "type": "array", + "items": { + "type": "string" + } } } }, "status": { - "type": "object", + "description": "Spectro cluster meta status summary", "properties": { - "health": { - "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "cost": { + "description": "Cluster meta Cost information", + "type": "object", "properties": { - "agentVersion": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { "type": "string", + "default": "none", "enum": [ - "healthy", - "unhealthy" + "full", + "none", + "partial", + "unknown" ] } } }, - "inUseClusters": { - "type": "array", - "items": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } + "health": { + "description": "Cluster meta health information", + "type": "object", + "properties": { + "isHeartBeatFailed": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "type": "string" } } }, "state": { - "type": "string", - "enum": [ - "ready", - "unpaired", - "in-use" - ] + "type": "string" + }, + "updates": { + "description": "Cluster meta updates information", + "type": "object", + "properties": { + "isUpdatesPending": { + "type": "boolean", + "x-omitempty": false + } + } } } } @@ -74271,7 +70627,7 @@ } } }, - "/v1/dashboard/edgehosts/search/schema": { + "/v1/dashboard/spectroclusters/metadata/search/schema": { "get": { "security": [ { @@ -74284,8 +70640,8 @@ "tags": [ "v1" ], - "summary": "Retrieves a schema for the Edgehost search filter", - "operationId": "v1DashboardEdgehostsSearchSchemaGet", + "summary": "Retrieves a schema for the cluster metadata search filter", + "operationId": "v1SpectroClustersMetadataSearchSchema", "parameters": [ { "type": "string", @@ -74296,7 +70652,7 @@ ], "responses": { "200": { - "description": "An array of schema items", + "description": "An array of cluster meta schema items", "schema": { "properties": { "schema": { @@ -74379,8 +70735,8 @@ } } }, - "/v1/dashboard/pcgs/search": { - "post": { + "/v1/dashboard/spectroclusters/repaveStatus": { + "get": { "security": [ { "ApiKey": [] @@ -74392,8 +70748,8 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of PCG summary with provided search filter. Supported fields as per schema /v1/dashboard/pcgs/search/schema", - "operationId": "v1DashboardPcgsSearchSummary", + "summary": "Retrieves a list of clusters with the desired repave state", + "operationId": "v1DashboardSpectroClustersRepaveList", "parameters": [ { "maximum": 20, @@ -74417,291 +70773,15 @@ "in": "query" }, { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro cluster search filter summary spec", - "properties": { - "filter": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "filterGroups": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "filters": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "condition": { - "properties": { - "bool": { - "properties": { - "value": { - "type": "boolean" - } - } - }, - "date": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte", - "range" - ] - } - } - }, - "float": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "number", - "format": "float64" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte" - ] - } - } - }, - "int": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "integer" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte" - ] - } - } - }, - "keyValue": { - "properties": { - "ignoreCase": { - "type": "boolean" - }, - "key": { - "type": "string" - }, - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "contains", - "beginsWith" - ] - } - } - }, - "string": { - "properties": { - "ignoreCase": { - "type": "boolean" - }, - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "contains", - "beginsWith" - ] - } - } - } - } - }, - "property": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "string", - "int", - "float", - "bool", - "date", - "keyValue" - ] - } - } - } - } - } - } - } - } - }, - "sort": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "field": { - "type": "string", - "enum": [ - "environment", - "clusterName", - "clusterState", - "healthState", - "creationTimestamp", - "lastModifiedTimestamp" - ], - "x-nullable": true - }, - "order": { - "type": "string", - "default": "asc", - "enum": [ - "asc", - "desc" - ] - } - } - } - } - } - } + "enum": [ + "Pending", + "Approved", + "Reverted" + ], + "type": "string", + "default": "Pending", + "name": "repaveState", + "in": "query" }, { "type": "string", @@ -74723,18 +70803,15 @@ "type": "array", "uniqueItems": true, "items": { - "description": "Overlord defintiion", + "description": "Spectro cluster summary", "type": "object", "properties": { - "kind": { - "type": "string" - }, "metadata": { "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -74751,7 +70828,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -74763,695 +70840,1192 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, - "spec": { - "description": "Overload spec", + "specSummary": { + "description": "Spectro cluster spec summary", "type": "object", "properties": { - "cloudAccountUid": { - "type": "string", - "x-omitempty": false - }, - "ipAddress": { - "type": "string" - }, - "ipPools": { + "archTypes": { + "description": "Architecture type of the cluster", "type": "array", "items": { - "description": "IP Pool entity definition", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + }, + "cloudAccountMeta": { + "description": "Cloud account meta information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "cloudConfig": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "machinePools": { + "description": "Machine pool meta information", + "type": "array", + "items": { "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", + "cloudType": { "type": "string" }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "pool": { - "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "infraProfileTemplate": { + "description": "Cluster profile template meta information", "type": "object", "properties": { - "end": { - "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "cloudType": { "type": "string" }, - "gateway": { - "description": "Gateway is the gateway ip address", + "name": { + "description": "Cluster profile name", "type": "string" }, - "nameserver": { - "description": "Nameserver define search domains and nameserver addresses", - "type": "object", - "properties": { - "addresses": { - "type": "array", - "items": { + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", "type": "string" - } - }, - "search": { - "type": "array", - "items": { + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", "type": "string" } } } }, - "prefix": { - "description": "Prefix is the mask of the network as integer (max 128)", - "type": "integer", - "format": "int32" + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" }, - "start": { - "description": "Start is the first ip address that can be rendered", + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", "type": "string" }, - "subnet": { - "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "uid": { + "description": "Cluster profile uid", "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" } } }, - "priavetGatewayUid": { - "type": "string" - }, - "restrictToSingleCluster": { - "description": "if true, restricts this IP pool to be used by single cluster at any time", + "isControlPlane": { + "description": "whether this pool is for control plane", "type": "boolean", "x-omitempty": false - } - } - }, - "status": { - "description": "IP Pool status", - "type": "object", - "properties": { - "allottedIps": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } }, - "associatedClusters": { + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", - "uniqueItems": true, "items": { "type": "string" } }, - "inUse": { - "type": "boolean", + "maintenanceMode": { + "description": "number of machines under maintenance", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32", "x-omitempty": false } } } + }, + "uid": { + "description": "Cluster's cloud config uid", + "type": "string" } } }, - "isSelfHosted": { - "type": "boolean" - }, - "isSystem": { - "type": "boolean" - }, - "spectroClusterUid": { - "type": "string", - "x-omitempty": false + "clusterConfig": { + "type": "object", + "properties": { + "hostClusterConfig": { + "properties": { + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + } + } + } }, - "tenantUid": { - "type": "string" - } - } - }, - "status": { - "description": "Overload status", - "type": "object", - "properties": { - "health": { - "description": "Spectro cluster health status", + "clusterProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", "properties": { - "agentVersion": { + "cloudType": { "type": "string" }, - "conditions": { + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", "type": "array", - "uniqueItems": true, "items": { - "description": "Spectro cluster health condition", + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], "properties": { - "message": { - "type": "string" - }, - "relatedObject": { - "description": "Object for which the resource is related", + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } + "additionalProperties": { + "type": "string" } }, - "type": { + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "isActive": { - "type": "boolean", - "x-omitempty": false - }, - "isReady": { - "type": "boolean", - "x-omitempty": false - }, - "kubectlCommands": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "state": { - "type": "string" - } - } - } - } - } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/pcgs/search/schema": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a schema for the PCG search filter", - "operationId": "v1DashboardPcgSearchSchemaGet", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of schema items", - "schema": { - "properties": { - "schema": { - "properties": { - "properties": { - "type": "array", - "items": { - "properties": { - "default": { - "type": "string", - "x-order": 6 - }, - "displayName": { - "type": "string", - "x-order": 2 - }, - "enum": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": true, - "x-order": 4 + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } }, - "enumValues": { + "clusterProfileTemplates": { "type": "array", "items": { + "description": "Cluster profile template meta information", + "type": "object", "properties": { - "displayValue": { + "cloudType": { "type": "string" }, - "value": { + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + } + } + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" } } - }, - "x-omitempty": true, - "x-order": 5 - }, - "hideDisplay": { - "type": "boolean", - "x-order": 1 - }, - "maxFloatVal": { - "type": "number", - "format": "float64", - "x-order": 10 - }, - "maxIntVal": { - "type": "integer", - "format": "int32", - "x-order": 8 - }, - "minFloatVal": { - "type": "number", - "format": "float64", - "x-order": 9 - }, - "minIntVal": { - "type": "integer", - "format": "int32", - "x-order": 7 - }, - "name": { - "type": "string", - "x-order": 0 + } }, - "type": { - "type": "string", - "x-order": 3 + "projectMeta": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } } } - } - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/projects": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "operationId": "v1ProjectsFilterSummary", - "parameters": [ - { - "type": "integer", - "format": "int64", - "default": 50, - "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { - "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Project filter summary spec", - "properties": { - "filter": { - "description": "Project filter spec", - "properties": { - "name": { - "type": "object", - "properties": { - "beginsWith": { - "type": "string", - "x-nullable": true - }, - "contains": { - "type": "string", - "x-nullable": true - }, - "eq": { - "type": "string", - "x-nullable": true - }, - "ignoreCase": { - "type": "boolean", - "default": true - }, - "ne": { - "type": "string", - "x-nullable": true - } - } - } - } - }, - "sort": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "field": { - "type": "string", - "enum": [ - "name", - "creationTimestamp", - "lastModifiedTimestamp" - ], - "x-nullable": true }, - "order": { - "type": "string", - "default": "asc", - "enum": [ - "asc", - "desc" - ] - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of project filter summary items", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Project summary", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", + "status": { + "description": "Spectro cluster status summary", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "clusterImport": { "type": "object", - "additionalProperties": { - "type": "string" + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } } }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "cost": { + "description": "Resource Cost information", "type": "object", - "additionalProperties": { - "type": "string" + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } } }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "specSummary": { - "type": "object", - "properties": { - "logoUrl": { - "type": "string" + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } }, - "teams": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "type": { + "type": "string" + } + } } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" } } }, - "users": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" + "hourlyRate": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false } } - } - } - }, - "status": { - "description": "Project status summary", - "type": "object", - "properties": { - "clustersHealth": { - "description": "Spectro Clusters health data", + }, + "location": { + "description": "Cluster location information", "type": "object", "properties": { - "errored": { - "type": "integer", - "format": "int32", - "x-omitempty": false + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } }, - "healthy": { - "type": "integer", - "format": "int32", - "x-omitempty": false + "countryCode": { + "type": "string" }, - "running": { - "type": "integer", - "format": "int32", - "x-omitempty": false + "countryName": { + "type": "string" }, - "unhealthy": { - "type": "integer", - "format": "int32", - "x-omitempty": false + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" } } }, - "status": { - "description": "Project status", + "metrics": { + "description": "Spectro cluster metrics", "properties": { - "cleanUpStatus": { - "description": "Project cleanup status", + "cpu": { + "description": "Compute metrics", "type": "object", "properties": { - "cleanedResources": { - "type": "array", - "items": { - "type": "string" - } + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "msg": { - "type": "string" + "limit": { + "type": "number", + "x-omitempty": false }, - "state": { + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false } } }, - "isDisabled": { - "type": "boolean" + "memory": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } } } }, - "usage": { - "description": "Project usage summary", - "type": "object", + "notifications": { + "description": "Cluster notifications status", "properties": { - "alloyCpuCores": { - "type": "number", + "isAvailable": { + "type": "boolean", "x-omitempty": false - }, - "clusters": { + } + } + }, + "repave": { + "description": "Cluster repave status", + "properties": { + "state": { + "type": "string", + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ] + } + } + }, + "state": { + "type": "string" + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", "type": "array", "items": { - "description": "Cluster usage summary", + "description": "Object resource reference", "type": "object", "properties": { - "cpuCores": { - "type": "number", - "x-omitempty": false - }, - "isAlloy": { - "type": "boolean", - "x-omitempty": false + "kind": { + "type": "string" }, "name": { "type": "string" }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, "uid": { "type": "string" } } } }, - "pureCpuCores": { - "type": "number", - "x-omitempty": false - } - } - } - } - } + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } } } }, @@ -75487,8 +72061,8 @@ } } }, - "/v1/dashboard/projects/metadata": { - "get": { + "/v1/dashboard/spectroclusters/resources/consumption": { + "post": { "security": [ { "ApiKey": [] @@ -75500,14 +72074,103 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of projects metadata", - "operationId": "v1ProjectsMetadata", + "summary": "Retrieves spectro clusters resource consumption", + "operationId": "v1SpectroClustersResourcesConsumption", "parameters": [ { - "type": "string", - "description": "Name of the project", - "name": "name", - "in": "query" + "name": "body", + "in": "body", + "schema": { + "description": "Resource consumption spec", + "type": "object", + "properties": { + "filter": { + "description": "Resource consumption filter", + "type": "object", + "properties": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "options": { + "description": "Resource consumption options", + "type": "object", + "properties": { + "enableSummaryView": { + "type": "boolean", + "default": true + }, + "groupBy": { + "type": "string", + "default": "namespace", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "cloud" + ] + }, + "period": { + "type": "integer", + "format": "int32", + "default": 60 + } + } + } + } + } }, { "type": "string", @@ -75518,23 +72181,98 @@ ], "responses": { "200": { - "description": "An array of project metadata items", + "description": "An array of resource consumption data items", "schema": { + "description": "Resources consumption information", "type": "object", - "required": [ - "items" - ], "properties": { - "items": { + "cpuUnit": { + "type": "string" + }, + "memoryUnit": { + "type": "string" + }, + "resources": { "type": "array", - "uniqueItems": true, "items": { - "description": "Project metadata", + "description": "Resource consumption information", + "type": "object", "properties": { - "metadata": { - "description": "Object identity meta", + "associatedResources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Resource cosumption data point", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "entity": { "type": "object", + "required": [ + "uid" + ], "properties": { + "kind": { + "type": "string" + }, "name": { "type": "string" }, @@ -75542,6 +72280,82 @@ "type": "string" } } + }, + "total": { + "description": "Resource total cosumption data", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "total": { + "description": "Resource total cosumption data", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } } } } @@ -75552,7 +72366,7 @@ } } }, - "/v1/dashboard/spectroclusters/cost": { + "/v1/dashboard/spectroclusters/resources/cost": { "post": { "security": [ { @@ -75565,18 +72379,18 @@ "tags": [ "v1" ], - "summary": "Retrieves spectro clusters cloud cost summary information", - "operationId": "v1DashboardSpectroClustersCostSummary", + "summary": "Retrieves spectro clusters resources cost summary information", + "operationId": "v1SpectroClustersResourcesCostSummary", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Spectro cluster cloud cost summary spec", + "description": "Resource cost summary spec", "type": "object", "properties": { "filter": { - "description": "Spectro cluster cloud cost summary filter", + "description": "Resource cost summary filter", "type": "object", "properties": { "clouds": { @@ -75586,11 +72400,32 @@ "type": "string" } }, + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "endTime": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "projects": { "type": "array", "uniqueItems": true, @@ -75613,23 +72448,30 @@ } }, "options": { - "description": "Spectro cluster cloud cost summary options", + "description": "Resource cost summary options", "type": "object", "properties": { + "enableSummaryView": { + "type": "boolean", + "default": true + }, "groupBy": { "type": "string", - "default": "project", + "default": "cluster", "enum": [ "tenant", "project", - "cloud", - "cluster" + "workspace", + "cluster", + "namespace", + "deployment", + "cloud" ] }, "period": { "type": "integer", "format": "int32", - "default": 1440 + "default": 60 } } } @@ -75645,25 +72487,50 @@ ], "responses": { "200": { - "description": "An array of resources cloud cost summary items", + "description": "An array of resources cost summary items", "schema": { - "description": "Resources cloud cost summary information", + "description": "Resources cost summary information", "type": "object", "properties": { "resources": { "type": "array", "items": { - "description": "Resource cloud cost summary information", + "description": "Resource cost summary information", "type": "object", "properties": { + "associatedResources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, "data": { "type": "array", "uniqueItems": true, "items": { - "description": "Cloud cost data point information", + "description": "Resource cost data point", "type": "object", "properties": { - "compute": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { "type": "number", "format": "float64", "x-omitempty": false @@ -75703,10 +72570,15 @@ } }, "total": { - "description": "Resource total cloud cost information", + "description": "Resource total cost information", "type": "object", "properties": { - "compute": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { "type": "number", "format": "float64", "x-omitempty": false @@ -75727,10 +72599,15 @@ } }, "total": { - "description": "Resource total cloud cost information", + "description": "Resource total cost information", "type": "object", "properties": { - "compute": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { "type": "number", "format": "float64", "x-omitempty": false @@ -75753,8 +72630,8 @@ } } }, - "/v1/dashboard/spectroclusters/filters/workspace": { - "get": { + "/v1/dashboard/spectroclusters/resources/usage": { + "post": { "security": [ { "ApiKey": [] @@ -75766,29 +72643,141 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of running, non rbac configured clusters in a workspace", - "operationId": "v1SpectroClustersFiltersWorkspace", + "summary": "Retrieves spectro clusters resources usage summary information", + "operationId": "v1SpectroClustersResourcesUsageSummary", "parameters": [ { - "type": "integer", - "format": "int64", - "default": 50, - "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { - "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" + "name": "body", + "in": "body", + "schema": { + "description": "Resource usage summary spec", + "type": "object", + "properties": { + "filter": { + "description": "Resource usage summary filter", + "type": "object", + "properties": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "pods": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workload": { + "description": "Workload resource filter", + "type": "object", + "properties": { + "names": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "default": "all", + "enum": [ + "deployment", + "statefulset", + "daemonset", + "all" + ] + } + } + }, + "workspaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "options": { + "description": "Resource usage summary options", + "type": "object", + "properties": { + "enableSummaryView": { + "type": "boolean", + "default": true + }, + "groupBy": { + "type": "string", + "default": "cluster", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "deployment", + "statefulset", + "daemonset", + "pod", + "cloud" + ] + }, + "includeMeteringInfo": { + "type": "boolean", + "default": false + }, + "period": { + "type": "integer", + "format": "int32", + "default": 60 + } + } + } + } + } }, { "type": "string", @@ -75799,138 +72788,602 @@ ], "responses": { "200": { - "description": "An array of cluster summary items", + "description": "An array of resources usage summary items", "schema": { + "description": "Resources usage summary information", "type": "object", - "required": [ - "items" - ], "properties": { - "items": { + "cpuUnit": { + "type": "string" + }, + "memoryUnit": { + "type": "string" + }, + "resources": { "type": "array", - "uniqueItems": true, "items": { - "description": "Spectro cluster summary", + "description": "Resource usage summary information", "type": "object", "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { + "associatedResources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + }, + "name": { + "type": "string" + }, + "uid": { "type": "string" } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" + } + } + }, + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Resource usage data point", + "type": "object", + "properties": { + "baremetal": { + "description": "min and max count for machines \u0026 edgehost for the given period", + "type": "object", + "properties": { + "activeEdgehosts": { + "type": "number", + "format": "int64" + }, + "activeMachines": { + "type": "number", + "format": "int64" + }, + "maxEdgehosts": { + "type": "number", + "format": "int64" + }, + "maxMachines": { + "type": "number", + "format": "int64" + } + } + }, + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "edgehost": { + "description": "min and max count for machines \u0026 edgehost for the given period", + "type": "object", + "properties": { + "activeEdgehosts": { + "type": "number", + "format": "int64" + }, + "activeMachines": { + "type": "number", + "format": "int64" + }, + "maxEdgehosts": { + "type": "number", + "format": "int64" + }, + "maxMachines": { + "type": "number", + "format": "int64" + } + } + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" }, "name": { - "description": "Name of the resource.", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", "type": "string" } } - }, - "specSummary": { - "description": "Spectro cluster spec summary", - "type": "object", + } + } + } + } + } + } + } + } + } + }, + "/v1/dashboard/spectroclusters/search": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of cluster summary with provided search filter spec Supported sort fields - [\"environment\", \"clusterName\", \"memoryUsage\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "operationId": "v1SpectroClustersSearchFilterSummary", + "parameters": [ + { + "maximum": 20, + "type": "integer", + "format": "int64", + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "name": "limit", + "in": "query" + }, + { + "type": "integer", + "format": "int64", + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "name": "offset", + "in": "query" + }, + { + "type": "string", + "description": "continue token to paginate the subsequent data items", + "name": "continue", + "in": "query" + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro cluster search filter summary spec", + "properties": { + "filter": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filterGroups": { + "type": "array", + "uniqueItems": true, + "items": { "properties": { - "archTypes": { - "description": "Architecture type of the cluster", + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "filters": { "type": "array", + "uniqueItems": true, "items": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - }, - "cloudAccountMeta": { - "description": "Cloud account meta information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "cloudConfig": { - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "machinePools": { - "description": "Machine pool meta information", - "type": "array", - "items": { - "type": "object", + "properties": { + "condition": { "properties": { - "cloudType": { - "type": "string" + "bool": { + "properties": { + "value": { + "type": "boolean" + } + } }, - "healthy": { - "description": "number of healthy machines", - "type": "integer", - "format": "int32", - "x-omitempty": false + "date": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ] + } + } }, - "infraProfileTemplate": { - "description": "Cluster profile template meta information", - "type": "object", + "float": { "properties": { - "cloudType": { - "type": "string" + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "number", + "format": "float64" + } + } + } }, - "name": { - "description": "Cluster profile name", + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "int": { + "properties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "integer" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ] + } + } + }, + "keyValue": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { "type": "string" }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + }, + "string": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "properties": { + "conjunction": { + "type": "string", + "enum": [ + "and", + "or" + ], + "x-nullable": true + }, + "values": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + }, + "negation": { + "type": "boolean" + }, + "operator": { + "type": "string", + "enum": [ + "eq", + "contains", + "beginsWith" + ] + } + } + } + } + }, + "property": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "string", + "int", + "float", + "bool", + "date", + "keyValue" + ] + } + } + } + } + } + } + } + } + }, + "sort": { + "type": "array", + "uniqueItems": true, + "items": { + "properties": { + "field": { + "type": "string", + "enum": [ + "environment", + "clusterName", + "clusterState", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "x-nullable": true + }, + "order": { + "type": "string", + "default": "asc", + "enum": [ + "asc", + "desc" + ] + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "specSummary": { + "description": "Spectro cluster spec summary", + "type": "object", + "properties": { + "archTypes": { + "description": "Architecture type of the cluster", + "type": "array", + "items": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + }, + "cloudAccountMeta": { + "description": "Cloud account meta information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "cloudConfig": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "machinePools": { + "description": "Machine pool meta information", + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "infraProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { "type": "string" } }, @@ -75971,11 +73424,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -76131,7 +73584,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -76172,11 +73625,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -76251,11 +73704,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -76473,11 +73926,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -76887,7 +74340,7 @@ } }, "notifications": { - "description": "Spectro cluster notifications", + "description": "Cluster notifications status", "properties": { "isAvailable": { "type": "boolean", @@ -77068,7 +74521,7 @@ } } }, - "/v1/dashboard/spectroclusters/metadata": { + "/v1/dashboard/spectroclusters/search/export": { "get": { "security": [ { @@ -77078,19 +74531,27 @@ "Authorization": [] } ], + "produces": [ + "application/octet-stream" + ], "tags": [ "v1" ], - "summary": "Retrieves a list of cluster summary metadata", - "operationId": "v1SpectroClustersMetadataGet", + "summary": "Export and download the list of cluster summary with matching search filter and download as a file(csv)", + "operationId": "v1DashboardClustersSearchSummaryExportGet", "parameters": [ + { + "type": "string", + "name": "encodedFilter", + "in": "query" + }, { "enum": [ - "hostclusters", - "strictHostclusters" + "csv" ], "type": "string", - "name": "quickFilter", + "default": "csv", + "name": "format", "in": "query" }, { @@ -77102,60 +74563,16 @@ ], "responses": { "200": { - "description": "An array of cluster summary items", + "description": "OK", "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - } - } + "type": "file" + }, + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" } } } @@ -77170,168 +74587,24 @@ "Authorization": [] } ], + "produces": [ + "application/octet-stream" + ], "tags": [ "v1" ], - "summary": "Retrieves a list of cluster summary", - "operationId": "v1SpectroClustersMetadata", + "summary": "Export the list of cluster summary with matching search filter and download as a file(csv) Supported sort fields - [\"environment\", \"clusterName\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "operationId": "v1DashboardClustersSearchSummaryExport", "parameters": [ { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro cluster metadata spec", - "properties": { - "filter": { - "description": "Spectro cluster filter spec", - "properties": { - "environment": { - "type": "string" - }, - "includeVirtual": { - "type": "boolean", - "default": false - }, - "isAlloy": { - "description": "isAlloy is renamed to isImported", - "type": "boolean", - "default": false - }, - "isImportReadOnly": { - "type": "boolean", - "default": true - }, - "isImported": { - "type": "boolean", - "default": false - }, - "name": { - "type": "object", - "properties": { - "beginsWith": { - "type": "string", - "x-nullable": true - }, - "contains": { - "type": "string", - "x-nullable": true - }, - "eq": { - "type": "string", - "x-nullable": true - }, - "ignoreCase": { - "type": "boolean", - "default": true - }, - "ne": { - "type": "string", - "x-nullable": true - } - } - }, - "state": { - "type": "string" - } - } - }, - "sort": { - "type": "string", - "enum": [ - "environment", - "state", - "name" - ], - "x-nullable": true - } - } - } - }, - { + "enum": [ + "csv" + ], "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of cluster summary items", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/spectroclusters/metadata/search": { - "post": { - "security": [ - { - "ApiKey": [] + "default": "csv", + "name": "format", + "in": "query" }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of cluster metadata with provided search filter spec Supported sort fields - [\"environment\", \"clusterName\", \"clusterState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", - "operationId": "v1SpectroClustersMetadataSearch", - "parameters": [ { "name": "body", "in": "body", @@ -77628,222 +74901,70 @@ ], "responses": { "200": { - "description": "An array of cluster summary meta items", + "description": "download file", + "schema": { + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" + } + } + } + } + } + }, + "/v1/dashboard/spectroclusters/search/input": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a supported input values for the cluster search filter", + "operationId": "v1DashboardSpectroClustersSearchInput", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster search filter input items", "schema": { - "type": "object", - "required": [ - "items" - ], "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Spectro cluster meta summary", - "type": "object", + "inputs": { + "type": "object", + "additionalProperties": { "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + "values": { + "type": "array", + "items": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "specSummary": { - "description": "Spectro cluster meta summary", - "type": "object", - "properties": { - "archType": { - "description": "Architecture type of the cluster", - "type": "array", - "items": { - "type": "string", - "default": "amd64", - "enum": [ - "arm64", - "amd64" - ] - } - }, - "cloudAccountUid": { - "type": "string" - }, - "cloudRegion": { - "type": "string" - }, - "cloudType": { - "type": "string" - }, - "clusterType": { - "type": "string" - }, - "importMode": { - "type": "string" - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "coordinates": { - "type": "array", - "items": { - "type": "number", - "format": "float64" - } - }, - "countryCode": { - "type": "string" - }, - "countryName": { - "type": "string" - }, - "regionCode": { - "type": "string" - }, - "regionName": { - "type": "string" - } - } - }, - "projectMeta": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "tags": { - "type": "array", - "items": { + }, + "uid": { "type": "string" } } - } - }, - "status": { - "description": "Spectro cluster meta status summary", - "properties": { - "cost": { - "description": "Cluster meta Cost information", - "type": "object", - "properties": { - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "fips": { - "properties": { - "mode": { - "type": "string", - "default": "none", - "enum": [ - "full", - "none", - "partial", - "unknown" - ] - } - } - }, - "health": { - "description": "Cluster meta health information", - "type": "object", - "properties": { - "isHeartBeatFailed": { - "type": "boolean", - "x-omitempty": false - }, - "state": { - "type": "string" - } - } - }, - "state": { - "type": "string" - }, - "updates": { - "description": "Cluster meta updates information", - "type": "object", - "properties": { - "isUpdatesPending": { - "type": "boolean", - "x-omitempty": false - } - } - } - } + }, + "x-omitempty": true } } } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } } } } @@ -77851,7 +74972,7 @@ } } }, - "/v1/dashboard/spectroclusters/metadata/search/schema": { + "/v1/dashboard/spectroclusters/search/schema": { "get": { "security": [ { @@ -77864,8 +74985,8 @@ "tags": [ "v1" ], - "summary": "Retrieves a schema for the cluster metadata search filter", - "operationId": "v1SpectroClustersMetadataSearchSchema", + "summary": "Retrieves a schema for the cluster search filter", + "operationId": "v1SpectroClustersSearchSchema", "parameters": [ { "type": "string", @@ -77876,7 +74997,7 @@ ], "responses": { "200": { - "description": "An array of cluster meta schema items", + "description": "An array of cluster filter schema items", "schema": { "properties": { "schema": { @@ -77959,7 +75080,7 @@ } } }, - "/v1/dashboard/spectroclusters/repaveStatus": { + "/v1/dashboard/spectroclusters/vms": { "get": { "security": [ { @@ -77972,41 +75093,9 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of clusters with the desired repave state", - "operationId": "v1DashboardSpectroClustersRepaveList", + "summary": "Retrieves a list of Virtual machine enabled clusters", + "operationId": "V1DashboardVMEnabledClustersList", "parameters": [ - { - "maximum": 20, - "type": "integer", - "format": "int64", - "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { - "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" - }, - { - "enum": [ - "Pending", - "Approved", - "Reverted" - ], - "type": "string", - "default": "Pending", - "name": "repaveState", - "in": "query" - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -78016,7 +75105,7 @@ ], "responses": { "200": { - "description": "An array of cluster summary items", + "description": "An array of schema items", "schema": { "type": "object", "required": [ @@ -78027,1404 +75116,1492 @@ "type": "array", "uniqueItems": true, "items": { - "description": "Spectro cluster summary", + "description": "VM Dashboard enabled Spectro cluster", "type": "object", "properties": { "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, "name": { - "description": "Name of the resource.", + "type": "string" + }, + "projectUid": { "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", "type": "string" } } }, - "specSummary": { - "description": "Spectro cluster spec summary", + "spec": { + "description": "Spectro cluster spec", "type": "object", "properties": { - "archTypes": { - "description": "Architecture type of the cluster", - "type": "array", - "items": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - }, - "cloudAccountMeta": { - "description": "Cloud account meta information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "cloudConfig": { + "cloudType": { + "type": "string" + } + } + }, + "status": { + "description": "Spectro cluster status", + "properties": { + "clusterState": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/dashboard/spectroclusters/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster summary", + "operationId": "v1SpectroClustersSummaryUid", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An spectro cluster summary", + "schema": { + "description": "Spectro cluster summary", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Spectro cluster spec summary", + "type": "object", + "properties": { + "archTypes": { + "description": "Architecture types of the cluster", + "type": "array", + "items": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + }, + "cloudConfig": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "machinePools": { + "description": "Machine pool meta information", + "type": "array", + "items": { "type": "object", "properties": { "cloudType": { "type": "string" }, - "machinePools": { - "description": "Machine pool meta information", - "type": "array", - "items": { - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "healthy": { - "description": "number of healthy machines", - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "infraProfileTemplate": { - "description": "Cluster profile template meta information", + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "infraProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", "type": "object", + "required": [ + "layer", + "name" + ], "properties": { - "cloudType": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", "type": "string" }, - "name": { - "description": "Cluster profile name", + "inValidReason": { "type": "string" }, - "packs": { - "description": "Cluster profile packs array", + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { "type": "array", "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", "type": "object", - "required": [ - "layer", - "name" - ], "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, - "inValidReason": { + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" + "displayName": { + "type": "string", + "x-omitempty": false }, - "layer": { + "group": { "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] + "x-omitempty": false }, - "logo": { - "description": "path to the pack logo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "manifests": { + "remove": { "type": "array", "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { "type": "string" - } + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false }, - "presets": { + "hints": { "type": "array", "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" + "type": "string" + }, + "x-omitempty": false }, - "schema": { + "listOptions": { "type": "array", "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } + "type": "string" + }, + "x-omitempty": false }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "tag": { - "description": "pack tag", - "type": "string" + "readonly": { + "type": "boolean", + "x-omitempty": false }, - "type": { - "description": "type of the pack", + "regex": { "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] + "x-omitempty": false }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" + "required": { + "type": "boolean", + "x-omitempty": false }, - "version": { - "description": "pack version", - "type": "string" + "type": { + "type": "string", + "x-omitempty": false } } } }, - "scope": { - "description": "scope or context(system, tenant or project)", + "server": { + "description": "pack registry server or helm repo", "type": "string" }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "tag": { + "description": "pack tag", "type": "string" }, - "uid": { - "description": "Cluster profile uid", + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", "type": "string" }, "version": { - "type": "integer", - "format": "int32" + "description": "pack version", + "type": "string" } } - }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "maintenanceMode": { - "description": "number of machines under maintenance", - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32", - "x-omitempty": false } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" } } }, - "uid": { - "description": "Cluster's cloud config uid", - "type": "string" - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "hostClusterConfig": { - "properties": { - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" } + }, + "maintenanceMode": { + "description": "number of machines under maintenance", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32", + "x-omitempty": false } } - }, - "clusterProfileTemplate": { - "description": "Cluster profile template meta information", + } + }, + "uid": { + "description": "Cluster's cloud config uid", + "type": "string" + } + } + }, + "cloudaccount": { + "description": "Cloud account meta information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "clusterProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", "type": "object", + "required": [ + "layer", + "name" + ], "properties": { - "cloudType": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", "type": "string" }, - "name": { - "description": "Cluster profile name", + "inValidReason": { "type": "string" }, - "packs": { - "description": "Cluster profile packs array", + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { "type": "array", "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", "type": "object", - "required": [ - "layer", - "name" - ], "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, - "inValidReason": { + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" + "displayName": { + "type": "string", + "x-omitempty": false }, - "layer": { + "group": { "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] + "x-omitempty": false }, - "logo": { - "description": "path to the pack logo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "manifests": { + "remove": { "type": "array", "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { "type": "string" - } + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false }, - "presets": { + "hints": { "type": "array", "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" + "type": "string" + }, + "x-omitempty": false }, - "schema": { + "listOptions": { "type": "array", "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } + "type": "string" + }, + "x-omitempty": false }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "tag": { - "description": "pack tag", - "type": "string" + "readonly": { + "type": "boolean", + "x-omitempty": false }, - "type": { - "description": "type of the pack", + "regex": { "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] + "x-omitempty": false }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" + "required": { + "type": "boolean", + "x-omitempty": false }, - "version": { - "description": "pack version", - "type": "string" + "type": { + "type": "string", + "x-omitempty": false } } } }, - "scope": { - "description": "scope or context(system, tenant or project)", + "server": { + "description": "pack registry server or helm repo", "type": "string" }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "tag": { + "description": "pack tag", "type": "string" }, - "uid": { - "description": "Cluster profile uid", + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", "type": "string" }, "version": { - "type": "integer", - "format": "int32" + "description": "pack version", + "type": "string" } } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" }, - "clusterProfileTemplates": { + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", "type": "array", "items": { - "description": "Cluster profile template meta information", + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", "type": "object", + "required": [ + "layer", + "name" + ], "properties": { - "cloudType": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", "type": "string" }, - "name": { - "description": "Cluster profile name", + "inValidReason": { "type": "string" }, - "packs": { - "description": "Cluster profile packs array", + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { "type": "array", "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", "type": "object", - "required": [ - "layer", - "name" - ], "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, - "inValidReason": { + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" + "displayName": { + "type": "string", + "x-omitempty": false }, - "layer": { + "group": { "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] + "x-omitempty": false }, - "logo": { - "description": "path to the pack logo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "manifests": { + "remove": { "type": "array", "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { "type": "string" - } + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false }, - "presets": { + "hints": { "type": "array", "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" + "type": "string" + }, + "x-omitempty": false }, - "schema": { + "listOptions": { "type": "array", "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } + "type": "string" + }, + "x-omitempty": false }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "tag": { - "description": "pack tag", - "type": "string" + "readonly": { + "type": "boolean", + "x-omitempty": false }, - "type": { - "description": "type of the pack", + "regex": { "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] + "x-omitempty": false }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" + "required": { + "type": "boolean", + "x-omitempty": false }, - "version": { - "description": "pack version", - "type": "string" + "type": { + "type": "string", + "x-omitempty": false } } } }, - "scope": { - "description": "scope or context(system, tenant or project)", + "server": { + "description": "pack registry server or helm repo", "type": "string" }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "tag": { + "description": "pack tag", "type": "string" }, - "uid": { - "description": "Cluster profile uid", + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", "type": "string" }, "version": { - "type": "integer", - "format": "int32" + "description": "pack version", + "type": "string" } } } }, - "projectMeta": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" } } - }, - "status": { + } + } + } + }, + "status": { + "description": "Spectro cluster status summary", + "properties": { + "abortTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "addOnServices": { + "type": "array", + "items": { "description": "Spectro cluster status summary", "properties": { - "clusterImport": { - "type": "object", + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "apiEndpoints": { + "type": "array", + "items": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", "properties": { - "importLink": { - "description": "import link to download and install ally-lite, palette-lite", + "message": { "type": "string" }, - "isBrownfield": { - "description": "Deprecated. Use the 'spec.clusterType'", - "type": "boolean", - "x-omitempty": false - }, - "state": { - "description": "cluster import status", - "type": "string" - } - } - }, - "cost": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", + "relatedObject": { + "description": "Object for which the resource is related", "type": "object", "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false + "name": { + "type": "string" }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false + "uid": { + "type": "string" } } }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false + "type": { + "type": "string" } } - }, - "fips": { - "properties": { - "mode": { - "type": "string", - "default": "none", - "enum": [ - "full", - "none", - "partial", - "unknown" - ] - } + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "hourlyRate": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false } - }, - "health": { - "description": "Spectro cluster health status", + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "kubeMeta": { + "description": "Spectro cluster kube meta", + "type": "object", + "properties": { + "hasKubeConfig": { + "type": "boolean", + "x-omitempty": false + }, + "hasKubeConfigClient": { + "type": "boolean", + "x-omitempty": false + }, + "hasManifest": { + "type": "boolean", + "x-omitempty": false + }, + "kubernetesVersion": { + "type": "string" + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "metrics": { + "description": "Spectro cluster metrics", + "properties": { + "cpu": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], "properties": { - "agentVersion": { - "type": "string" - }, - "conditions": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Spectro cluster health condition", - "properties": { - "message": { - "type": "string" - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { + "lastProbeTime": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" }, - "state": { - "type": "string" - } - } - }, - "hourlyRate": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "coordinates": { - "type": "array", - "items": { - "type": "number", - "format": "float64" - } + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "countryCode": { + "message": { + "description": "Human-readable message indicating details about last transition.", "type": "string" }, - "countryName": { + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", "type": "string" }, - "regionCode": { + "status": { "type": "string" }, - "regionName": { + "type": { "type": "string" } } }, - "metrics": { - "description": "Spectro cluster metrics", - "properties": { - "cpu": { - "description": "Compute metrics", - "type": "object", - "properties": { - "lastUpdatedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "limit": { - "type": "number", - "x-omitempty": false - }, - "request": { - "type": "number", - "x-omitempty": false - }, - "total": { - "type": "number", - "x-omitempty": false - }, - "unit": { - "type": "string" - }, - "usage": { - "type": "number", - "x-omitempty": false - } - } - }, - "memory": { - "description": "Compute metrics", - "type": "object", - "properties": { - "lastUpdatedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "limit": { - "type": "number", - "x-omitempty": false - }, - "request": { - "type": "number", - "x-omitempty": false - }, - "total": { - "type": "number", - "x-omitempty": false - }, - "unit": { - "type": "string" - }, - "usage": { - "type": "number", - "x-omitempty": false - } - } - } - } - }, - "notifications": { - "description": "Spectro cluster notifications", - "properties": { - "isAvailable": { - "type": "boolean", - "x-omitempty": false - } - } - }, - "repave": { - "description": "Cluster repave status", - "properties": { - "state": { - "type": "string", - "default": "Pending", - "enum": [ - "Pending", - "Approved", - "Reverted" - ] - } - } - }, - "state": { - "type": "string" + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "virtual": { - "properties": { - "appDeployments": { - "description": "list of apps deployed on the virtual cluster", - "type": "array", - "items": { - "description": "Object resource reference", + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { "type": "object", + "required": [ + "type", + "status" + ], "properties": { - "kind": { - "type": "string" + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "name": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", "type": "string" }, - "projectUid": { + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", "type": "string" }, - "tenantUid": { + "status": { "type": "string" }, - "uid": { + "type": { "type": "string" } } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" } - }, - "clusterGroup": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "hostCluster": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "lifecycleStatus": { - "properties": { - "msg": { - "description": "error or success msg of lifecycle", - "type": "string" - }, - "status": { - "description": "lifecycle status", - "type": "string", - "enum": [ - "Pausing", - "Paused", - "Resuming", - "Running", - "Error" - ] - } - } - }, - "state": { - "description": "cluster virtual host status", - "type": "string" - }, - "virtualClusters": { - "description": "list of virtual clusters deployed on the cluster", - "type": "array", - "items": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } } } } } } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" } } } - } - } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/spectroclusters/resources/consumption": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves spectro clusters resource consumption", - "operationId": "v1SpectroClustersResourcesConsumption", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Resource consumption spec", - "type": "object", - "properties": { - "filter": { - "description": "Resource consumption filter", - "type": "object", - "properties": { - "clouds": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "includeMasterMachines": { - "type": "boolean" }, - "namespaces": { + "services": { "type": "array", - "uniqueItems": true, "items": { - "type": "string" + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } + } + } + } } }, - "projects": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" + "spcApply": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchAppliedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } } }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" + "state": { + "description": "current operational state", + "type": "string" }, - "workspaces": { + "upgrades": { "type": "array", - "uniqueItems": true, "items": { - "type": "string" + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } } - } - } - }, - "options": { - "description": "Resource consumption options", - "type": "object", - "properties": { - "enableSummaryView": { - "type": "boolean", - "default": true - }, - "groupBy": { - "type": "string", - "default": "namespace", - "enum": [ - "tenant", - "project", - "workspace", - "cluster", - "namespace", - "cloud" - ] }, - "period": { - "type": "integer", - "format": "int32", - "default": 60 - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of resource consumption data items", - "schema": { - "description": "Resources consumption information", - "type": "object", - "properties": { - "cpuUnit": { - "type": "string" - }, - "memoryUnit": { - "type": "string" - }, - "resources": { - "type": "array", - "items": { - "description": "Resource consumption information", - "type": "object", - "properties": { - "associatedResources": { - "type": "array", - "items": { + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", "type": "object", - "required": [ - "uid" - ], "properties": { "kind": { "type": "string" @@ -79432,59 +76609,91 @@ "name": { "type": "string" }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, "uid": { "type": "string" } } - } - }, - "data": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Resource cosumption data point", + }, + "hostCluster": { + "description": "Object resource reference", "type": "object", "properties": { - "allotted": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } + "kind": { + "type": "string" }, - "timestamp": { - "type": "number", - "format": "int64" + "name": { + "type": "string" }, - "usage": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - } + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" } } } } - }, - "entity": { + } + }, + "workspaces": { + "type": "array", + "items": { "type": "object", "required": [ "uid" @@ -79500,82 +76709,6 @@ "type": "string" } } - }, - "total": { - "description": "Resource total cosumption data", - "type": "object", - "properties": { - "allotted": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "usage": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - } - } - }, - "total": { - "description": "Resource total cosumption data", - "type": "object", - "properties": { - "allotted": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "usage": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - } } } } @@ -79584,10 +76717,18 @@ } } } - } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] }, - "/v1/dashboard/spectroclusters/resources/cost": { - "post": { + "/v1/dashboard/spectroclusters/{uid}/cost": { + "get": { "security": [ { "ApiKey": [] @@ -79599,100 +76740,30 @@ "tags": [ "v1" ], - "summary": "Retrieves spectro clusters resources cost summary information", - "operationId": "v1SpectroClustersResourcesCostSummary", + "summary": "Retrieves the specified cluster cost summary", + "operationId": "v1SpectroClustersUidCostSummary", "parameters": [ { - "name": "body", - "in": "body", - "schema": { - "description": "Resource cost summary spec", - "type": "object", - "properties": { - "filter": { - "description": "Resource cost summary filter", - "type": "object", - "properties": { - "clouds": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "includeMasterMachines": { - "type": "boolean" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "projects": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "workspaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - }, - "options": { - "description": "Resource cost summary options", - "type": "object", - "properties": { - "enableSummaryView": { - "type": "boolean", - "default": true - }, - "groupBy": { - "type": "string", - "default": "cluster", - "enum": [ - "tenant", - "project", - "workspace", - "cluster", - "namespace", - "deployment", - "cloud" - ] - }, - "period": { - "type": "integer", - "format": "int32", - "default": 60 - } - } - } - } - } + "type": "string", + "format": "date-time", + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "name": "startTime", + "in": "query" + }, + { + "type": "string", + "format": "date-time", + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "name": "endTime", + "in": "query" + }, + { + "minimum": 60, + "type": "integer", + "format": "int32", + "description": "period in minutes, group the data point by the specified period", + "name": "period", + "in": "query" }, { "type": "string", @@ -79703,50 +76774,89 @@ ], "responses": { "200": { - "description": "An array of resources cost summary items", + "description": "An spectro cluster cost summary", "schema": { - "description": "Resources cost summary information", "type": "object", "properties": { - "resources": { - "type": "array", - "items": { - "description": "Resource cost summary information", - "type": "object", - "properties": { - "associatedResources": { - "type": "array", - "items": { + "cluster": { + "description": "Spectro cluster cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Spectro cluster cloud cost information", + "type": "object", + "properties": { + "cost": { + "description": "Resource Cost information", "type": "object", - "required": [ - "uid" - ], "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } }, - "uid": { - "type": "string" + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "data": { + "type": "array", + "items": { + "description": "Cloud cost data point information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } } } } - }, - "data": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Resource cost data point", + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", "type": "object", "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { + "compute": { "type": "number", "format": "float64", "x-omitempty": false @@ -79756,98 +76866,58 @@ "format": "float64", "x-omitempty": false }, - "timestamp": { - "type": "number", - "format": "int64" - }, "total": { "type": "number", "format": "float64", "x-omitempty": false } } - } - }, - "entity": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "total": { - "description": "Resource total cost information", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false } } - } - } - }, - "total": { - "description": "Resource total cost information", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false + "name": { + "type": "string" }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false + "uid": { + "type": "string" } } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "period": { + "type": "integer", + "format": "int32" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" } } } } } - } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] }, - "/v1/dashboard/spectroclusters/resources/usage": { - "post": { + "/v1/dashboard/spectroclusters/{uid}/overview": { + "get": { "security": [ { "ApiKey": [] @@ -79859,1871 +76929,1545 @@ "tags": [ "v1" ], - "summary": "Retrieves spectro clusters resources usage summary information", - "operationId": "v1SpectroClustersResourcesUsageSummary", + "summary": "Returns the specified cluster summary overview", + "operationId": "v1SpectroClustersSummaryUidOverview", "parameters": [ { - "name": "body", - "in": "body", + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An spectro cluster summary overview", "schema": { - "description": "Resource usage summary spec", + "description": "Spectro cluster summary", "type": "object", "properties": { - "filter": { - "description": "Resource usage summary filter", + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { - "clouds": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { "type": "string" } }, - "endTime": { + "creationTimestamp": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" }, - "includeMasterMachines": { - "type": "boolean" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "pods": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "projects": { - "type": "array", - "uniqueItems": true, - "items": { + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { "type": "string" } }, - "startTime": { + "lastModifiedTimestamp": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" }, - "workload": { - "description": "Workload resource filter", - "type": "object", - "properties": { - "names": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "type": { - "type": "string", - "default": "all", - "enum": [ - "deployment", - "statefulset", - "daemonset", - "all" - ] - } - } + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" }, - "workspaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" } } }, - "options": { - "description": "Resource usage summary options", + "spec": { + "description": "Spectro cluster spec summary", "type": "object", "properties": { - "enableSummaryView": { - "type": "boolean", - "default": true - }, - "groupBy": { - "type": "string", - "default": "cluster", - "enum": [ - "tenant", - "project", - "workspace", - "cluster", - "namespace", - "deployment", - "statefulset", - "daemonset", - "pod", - "cloud" - ] - }, - "includeMeteringInfo": { - "type": "boolean", - "default": false - }, - "period": { - "type": "integer", - "format": "int32", - "default": 60 - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of resources usage summary items", - "schema": { - "description": "Resources usage summary information", - "type": "object", - "properties": { - "cpuUnit": { - "type": "string" - }, - "memoryUnit": { - "type": "string" - }, - "resources": { - "type": "array", - "items": { - "description": "Resource usage summary information", - "type": "object", - "properties": { - "associatedResources": { - "type": "array", - "items": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "data": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Resource usage data point", - "type": "object", - "properties": { - "baremetal": { - "description": "min and max count for machines \u0026 edgehost for the given period", - "type": "object", - "properties": { - "activeEdgehosts": { - "type": "number", - "format": "int64" - }, - "activeMachines": { - "type": "number", - "format": "int64" - }, - "maxEdgehosts": { - "type": "number", - "format": "int64" - }, - "maxMachines": { - "type": "number", - "format": "int64" - } - } - }, - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "edgehost": { - "description": "min and max count for machines \u0026 edgehost for the given period", - "type": "object", - "properties": { - "activeEdgehosts": { - "type": "number", - "format": "int64" - }, - "activeMachines": { - "type": "number", - "format": "int64" - }, - "maxEdgehosts": { - "type": "number", - "format": "int64" - }, - "maxMachines": { - "type": "number", - "format": "int64" - } - } - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "timestamp": { - "type": "number", - "format": "int64" - } - } - } - }, - "entity": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/spectroclusters/search": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of cluster summary with provided search filter spec Supported sort fields - [\"environment\", \"clusterName\", \"memoryUsage\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", - "operationId": "v1SpectroClustersSearchFilterSummary", - "parameters": [ - { - "maximum": 20, - "type": "integer", - "format": "int64", - "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", - "name": "limit", - "in": "query" - }, - { - "type": "integer", - "format": "int64", - "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", - "name": "offset", - "in": "query" - }, - { - "type": "string", - "description": "continue token to paginate the subsequent data items", - "name": "continue", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro cluster search filter summary spec", - "properties": { - "filter": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "filterGroups": { + "archTypes": { + "description": "Architecture types of the cluster", "type": "array", - "uniqueItems": true, "items": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "filters": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "condition": { - "properties": { - "bool": { - "properties": { - "value": { - "type": "boolean" - } - } - }, - "date": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte", - "range" - ] - } - } - }, - "float": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + }, + "cloudConfig": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "machinePools": { + "description": "Machine pool meta information", + "type": "array", + "items": { + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "healthy": { + "description": "number of healthy machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "infraProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "number", - "format": "float64" - } - } + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" } }, - "negation": { - "type": "boolean" + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte" - ] - } - } - }, - "int": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "integer" - } - } - } + "inValidReason": { + "type": "string" }, - "negation": { + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", "type": "boolean" }, - "operator": { + "layer": { "type": "string", "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte" + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" ] - } - } - }, - "keyValue": { - "properties": { - "ignoreCase": { - "type": "boolean" }, - "key": { + "logo": { + "description": "path to the pack logo", "type": "string" }, - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", "type": "string" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "contains", - "beginsWith" - ] - } - } - }, - "string": { - "properties": { - "ignoreCase": { - "type": "boolean" - }, - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } } }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "contains", - "beginsWith" - ] - } - } - } - } - }, - "property": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "string", - "int", - "float", - "bool", - "date", - "keyValue" - ] - } - } - } - } - } - } - } - } - }, - "sort": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "field": { - "type": "string", - "enum": [ - "environment", - "clusterName", - "clusterState", - "healthState", - "creationTimestamp", - "lastModifiedTimestamp" - ], - "x-nullable": true - }, - "order": { - "type": "string", - "default": "asc", - "enum": [ - "asc", - "desc" - ] - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of cluster summary items", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Spectro cluster summary", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "specSummary": { - "description": "Spectro cluster spec summary", - "type": "object", - "properties": { - "archTypes": { - "description": "Architecture type of the cluster", - "type": "array", - "items": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - }, - "cloudAccountMeta": { - "description": "Cloud account meta information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "cloudConfig": { - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "machinePools": { - "description": "Machine pool meta information", - "type": "array", - "items": { - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "healthy": { - "description": "number of healthy machines", - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "infraProfileTemplate": { - "description": "Cluster profile template meta information", - "type": "object", - "properties": { - "cloudType": { + "name": { + "description": "pack name", "type": "string" }, - "name": { - "description": "Cluster profile name", + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", "type": "string" }, - "packs": { - "description": "Cluster profile packs array", + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { "type": "array", "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "description": "PackPreset defines the preset pack values", "type": "object", - "required": [ - "layer", - "name" - ], "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" + "add": { + "type": "string", + "x-omitempty": false }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" + "displayName": { + "type": "string", + "x-omitempty": false }, - "layer": { + "group": { "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] + "x-omitempty": false }, - "logo": { - "description": "path to the pack logo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "manifests": { + "remove": { "type": "array", "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { "type": "string" - } + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false }, - "presets": { + "hints": { "type": "array", "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" + "type": "string" + }, + "x-omitempty": false }, - "schema": { + "listOptions": { "type": "array", "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } + "type": "string" + }, + "x-omitempty": false }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "tag": { - "description": "pack tag", - "type": "string" + "readonly": { + "type": "boolean", + "x-omitempty": false }, - "type": { - "description": "type of the pack", + "regex": { "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] + "x-omitempty": false }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" + "required": { + "type": "boolean", + "x-omitempty": false }, - "version": { - "description": "pack version", - "type": "string" + "type": { + "type": "string", + "x-omitempty": false } } } }, - "scope": { - "description": "scope or context(system, tenant or project)", + "server": { + "description": "pack registry server or helm repo", "type": "string" }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "tag": { + "description": "pack tag", "type": "string" }, - "uid": { - "description": "Cluster profile uid", + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", "type": "string" }, "version": { - "type": "integer", - "format": "int32" + "description": "pack version", + "type": "string" } } - }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "maintenanceMode": { - "description": "number of machines under maintenance", - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32", - "x-omitempty": false - } - } - } - }, - "uid": { - "description": "Cluster's cloud config uid", - "type": "string" - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "hostClusterConfig": { - "properties": { - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" } } - } - } - }, - "clusterProfileTemplate": { - "description": "Cluster profile template meta information", - "type": "object", - "properties": { - "cloudType": { - "type": "string" }, - "name": { - "description": "Cluster profile name", - "type": "string" + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false }, - "packs": { - "description": "Cluster profile packs array", + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { + "type": "string" + } + }, + "maintenanceMode": { + "description": "number of machines under maintenance", + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } + }, + "uid": { + "description": "Cluster's cloud config uid", + "type": "string" + } + } + }, + "cloudaccount": { + "description": "Cloud account meta information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "clusterProfileTemplate": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "type": "object", + "required": [ + "layer", + "name" + ], + "properties": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", "type": "string" }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" }, - "layer": { + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] + "x-omitempty": false }, - "logo": { - "description": "path to the pack logo", - "type": "string" + "displayName": { + "type": "string", + "x-omitempty": false }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } + "group": { + "type": "string", + "x-omitempty": false }, "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" + "type": "string", + "x-omitempty": false }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { + "remove": { + "type": "array", + "items": { "type": "string" - } + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false }, - "presets": { + "hints": { "type": "array", "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" + "type": "string" + }, + "x-omitempty": false }, - "schema": { + "listOptions": { "type": "array", "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } + "type": "string" + }, + "x-omitempty": false }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "tag": { - "description": "pack tag", - "type": "string" + "readonly": { + "type": "boolean", + "x-omitempty": false }, - "type": { - "description": "type of the pack", + "regex": { "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] + "x-omitempty": false }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" + "required": { + "type": "boolean", + "x-omitempty": false }, - "version": { - "description": "pack version", - "type": "string" + "type": { + "type": "string", + "x-omitempty": false } } } }, - "scope": { - "description": "scope or context(system, tenant or project)", + "server": { + "description": "pack registry server or helm repo", "type": "string" }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "tag": { + "description": "pack tag", "type": "string" }, - "uid": { - "description": "Cluster profile uid", + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", "type": "string" }, "version": { - "type": "integer", - "format": "int32" + "description": "pack version", + "type": "string" } } + } + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" + } + } + }, + "clusterProfileTemplates": { + "type": "array", + "items": { + "description": "Cluster profile template meta information", + "type": "object", + "properties": { + "cloudType": { + "type": "string" }, - "clusterProfileTemplates": { + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", "type": "array", "items": { - "description": "Cluster profile template meta information", + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", "type": "object", + "required": [ + "layer", + "name" + ], "properties": { - "cloudType": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", "type": "string" }, - "name": { - "description": "Cluster profile name", + "inValidReason": { "type": "string" }, - "packs": { - "description": "Cluster profile packs array", + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { "type": "array", "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", "type": "object", - "required": [ - "layer", - "name" - ], "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, - "inValidReason": { + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" + } + } + } + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "description": "params passed as env variables to be consumed at installation time", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "presets": { + "type": "array", + "items": { + "description": "PackPreset defines the preset pack values", + "type": "object", + "properties": { + "add": { + "type": "string", + "x-omitempty": false }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" + "displayName": { + "type": "string", + "x-omitempty": false }, - "layer": { + "group": { "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] + "x-omitempty": false }, - "logo": { - "description": "path to the pack logo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "manifests": { + "remove": { "type": "array", "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { "type": "string" - } + }, + "x-omitempty": false + } + } + } + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "type": "array", + "items": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "type": "object", + "properties": { + "format": { + "type": "string", + "x-omitempty": false }, - "presets": { + "hints": { "type": "array", "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" + "type": "string" + }, + "x-omitempty": false }, - "schema": { + "listOptions": { "type": "array", "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } + "type": "string" + }, + "x-omitempty": false }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" + "name": { + "type": "string", + "x-omitempty": false }, - "tag": { - "description": "pack tag", - "type": "string" + "readonly": { + "type": "boolean", + "x-omitempty": false }, - "type": { - "description": "type of the pack", + "regex": { "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] + "x-omitempty": false }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" + "required": { + "type": "boolean", + "x-omitempty": false }, - "version": { - "description": "pack version", - "type": "string" + "type": { + "type": "string", + "x-omitempty": false } } } }, - "scope": { - "description": "scope or context(system, tenant or project)", + "server": { + "description": "pack registry server or helm repo", "type": "string" }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "tag": { + "description": "pack tag", "type": "string" }, - "uid": { - "description": "Cluster profile uid", + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", "type": "string" }, "version": { - "type": "integer", - "format": "int32" + "description": "pack version", + "type": "string" } } } }, - "projectMeta": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "type": "integer", + "format": "int32" } } - }, - "status": { + } + } + } + }, + "status": { + "description": "Spectro cluster status summary", + "properties": { + "abortTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "addOnServices": { + "type": "array", + "items": { "description": "Spectro cluster status summary", "properties": { - "clusterImport": { - "type": "object", - "properties": { - "importLink": { - "description": "import link to download and install ally-lite, palette-lite", - "type": "string" - }, - "isBrownfield": { - "description": "Deprecated. Use the 'spec.clusterType'", - "type": "boolean", - "x-omitempty": false - }, - "state": { - "description": "cluster import status", - "type": "string" - } - } + "endpoint": { + "type": "string" }, - "cost": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } + "name": { + "type": "string" + } + } + } + }, + "apiEndpoints": { + "type": "array", + "items": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" }, - "fips": { - "properties": { - "mode": { - "type": "string", - "default": "none", - "enum": [ - "full", - "none", - "partial", - "unknown" - ] - } - } + "port": { + "description": "The port on which the API server is serving.", + "type": "integer", + "format": "int32" + } + } + } + }, + "clusterImport": { + "type": "object", + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + } + }, + "conditions": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "health": { - "description": "Spectro cluster health status", + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "cost": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "fips": { + "properties": { + "mode": { + "type": "string", + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ] + } + } + }, + "health": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Spectro cluster health condition", "properties": { - "agentVersion": { + "message": { "type": "string" }, - "conditions": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Spectro cluster health condition", - "properties": { - "message": { - "type": "string" - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "hourlyRate": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", + "relatedObject": { + "description": "Object for which the resource is related", "type": "object", "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false + "name": { + "type": "string" }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false + "uid": { + "type": "string" } } }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false + "type": { + "type": "string" } } - }, - "location": { - "description": "Cluster location information", + } + }, + "lastHeartBeatTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + }, + "hourlyRate": { + "description": "Resource Cost information", + "type": "object", + "properties": { + "cloud": { + "description": "Cloud cost information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "kubeMeta": { + "description": "Spectro cluster kube meta", + "type": "object", + "properties": { + "hasKubeConfig": { + "type": "boolean", + "x-omitempty": false + }, + "hasKubeConfigClient": { + "type": "boolean", + "x-omitempty": false + }, + "hasManifest": { + "type": "boolean", + "x-omitempty": false + }, + "kubernetesVersion": { + "type": "string" + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "items": { + "type": "number", + "format": "float64" + } + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + } + }, + "metrics": { + "description": "Spectro cluster metrics", + "properties": { + "cpu": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Compute metrics", + "type": "object", + "properties": { + "lastUpdatedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + } + } + } + }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { "type": "object", + "required": [ + "type", + "status" + ], "properties": { - "coordinates": { - "type": "array", - "items": { - "type": "number", - "format": "float64" - } + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "countryCode": { - "type": "string" + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "countryName": { + "message": { + "description": "Human-readable message indicating details about last transition.", "type": "string" }, - "regionCode": { + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", "type": "string" }, - "regionName": { + "status": { "type": "string" - } - } - }, - "metrics": { - "description": "Spectro cluster metrics", - "properties": { - "cpu": { - "description": "Compute metrics", - "type": "object", - "properties": { - "lastUpdatedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "limit": { - "type": "number", - "x-omitempty": false - }, - "request": { - "type": "number", - "x-omitempty": false - }, - "total": { - "type": "number", - "x-omitempty": false - }, - "unit": { - "type": "string" - }, - "usage": { - "type": "number", - "x-omitempty": false - } - } }, - "memory": { - "description": "Compute metrics", - "type": "object", - "properties": { - "lastUpdatedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "limit": { - "type": "number", - "x-omitempty": false - }, - "request": { - "type": "number", - "x-omitempty": false - }, - "total": { - "type": "number", - "x-omitempty": false - }, - "unit": { - "type": "string" - }, - "usage": { - "type": "number", - "x-omitempty": false - } - } - } - } - }, - "notifications": { - "description": "Spectro cluster notifications", - "properties": { - "isAvailable": { - "type": "boolean", - "x-omitempty": false - } - } - }, - "repave": { - "description": "Cluster repave status", - "properties": { - "state": { - "type": "string", - "default": "Pending", - "enum": [ - "Pending", - "Approved", - "Reverted" - ] + "type": { + "type": "string" } } }, - "state": { - "type": "string" + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "virtual": { - "properties": { - "appDeployments": { - "description": "list of apps deployed on the virtual cluster", - "type": "array", - "items": { - "description": "Object resource reference", + "manifests": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { "type": "object", + "required": [ + "type", + "status" + ], "properties": { - "kind": { - "type": "string" + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "name": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", "type": "string" }, - "projectUid": { + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", "type": "string" }, - "tenantUid": { + "status": { "type": "string" }, - "uid": { + "type": { "type": "string" } } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" } - }, - "clusterGroup": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" + } + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } + } } } - }, - "hostCluster": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" } + } + } + } + } + } + }, + "spcApply": { + "type": "object", + "properties": { + "actionType": { + "type": "string", + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ] + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchAppliedTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } + } + }, + "state": { + "description": "current operational state", + "type": "string" + }, + "upgrades": { + "type": "array", + "items": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "object", + "properties": { + "reason": { + "type": "array", + "items": { + "type": "string" + } + }, + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + }, + "virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" }, - "lifecycleStatus": { - "properties": { - "msg": { - "description": "error or success msg of lifecycle", - "type": "string" - }, - "status": { - "description": "lifecycle status", - "type": "string", - "enum": [ - "Pausing", - "Paused", - "Resuming", - "Running", - "Error" - ] - } - } + "name": { + "type": "string" }, - "state": { - "description": "cluster virtual host status", + "projectUid": { "type": "string" }, - "virtualClusters": { - "description": "list of virtual clusters deployed on the cluster", - "type": "array", - "items": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "clusterGroup": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "hostCluster": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "lifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "type": "string", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ] + } + } + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "type": "array", + "items": { + "description": "Object resource reference", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" } } } } } - } - } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false + "workspaces": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } } } } @@ -81731,65 +78475,17 @@ } } } - } - }, - "/v1/dashboard/spectroclusters/search/export": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "produces": [ - "application/octet-stream" - ], - "tags": [ - "v1" - ], - "summary": "Export and download the list of cluster summary with matching search filter and download as a file(csv)", - "operationId": "v1DashboardClustersSearchSummaryExportGet", - "parameters": [ - { - "type": "string", - "name": "encodedFilter", - "in": "query" - }, - { - "enum": [ - "csv" - ], - "type": "string", - "default": "csv", - "name": "format", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "file" - }, - "headers": { - "Content-Disposition": { - "type": "string" - }, - "Content-Type": { - "type": "string" - } - } - } - } }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/dashboard/spectroclusters/{uid}/resources/consumption": { "post": { "security": [ { @@ -81799,272 +78495,249 @@ "Authorization": [] } ], - "produces": [ - "application/octet-stream" - ], "tags": [ "v1" ], - "summary": "Export the list of cluster summary with matching search filter and download as a file(csv) Supported sort fields - [\"environment\", \"clusterName\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", - "operationId": "v1DashboardClustersSearchSummaryExport", + "summary": "Retrieves specified spectro cluster resource consumption", + "operationId": "v1SpectroClustersUidResourcesConsumption", "parameters": [ - { - "enum": [ - "csv" - ], - "type": "string", - "default": "csv", - "name": "format", - "in": "query" - }, { "name": "body", "in": "body", "schema": { - "description": "Spectro cluster search filter summary spec", + "description": "Resource consumption spec", + "type": "object", "properties": { "filter": { + "description": "Resource consumption filter", + "type": "object", "properties": { - "conjunction": { + "clouds": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true + "format": "date-time" }, - "filterGroups": { + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "projects": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "workspaces": { "type": "array", "uniqueItems": true, "items": { + "type": "string" + } + } + } + }, + "options": { + "description": "Resource consumption options", + "type": "object", + "properties": { + "enableSummaryView": { + "type": "boolean", + "default": true + }, + "groupBy": { + "type": "string", + "default": "namespace", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "cloud" + ] + }, + "period": { + "type": "integer", + "format": "int32", + "default": 60 + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of resource consumption data items", + "schema": { + "description": "Resources consumption information", + "type": "object", + "properties": { + "cpuUnit": { + "type": "string" + }, + "memoryUnit": { + "type": "string" + }, + "resources": { + "type": "array", + "items": { + "description": "Resource consumption information", + "type": "object", + "properties": { + "associatedResources": { + "type": "array", + "items": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "data": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Resource cosumption data point", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "timestamp": { + "type": "number", + "format": "int64" + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "entity": { + "type": "object", + "required": [ + "uid" + ], "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true + "kind": { + "type": "string" }, - "filters": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "condition": { - "properties": { - "bool": { - "properties": { - "value": { - "type": "boolean" - } - } - }, - "date": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte", - "range" - ] - } - } - }, - "float": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "number", - "format": "float64" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte" - ] - } - } - }, - "int": { - "properties": { - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "integer" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "gt", - "gte", - "lt", - "lte" - ] - } - } - }, - "keyValue": { - "properties": { - "ignoreCase": { - "type": "boolean" - }, - "key": { - "type": "string" - }, - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "contains", - "beginsWith" - ] - } - } - }, - "string": { - "properties": { - "ignoreCase": { - "type": "boolean" - }, - "match": { - "properties": { - "conjunction": { - "type": "string", - "enum": [ - "and", - "or" - ], - "x-nullable": true - }, - "values": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - }, - "negation": { - "type": "boolean" - }, - "operator": { - "type": "string", - "enum": [ - "eq", - "contains", - "beginsWith" - ] - } - } - } - } - }, - "property": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "string", - "int", - "float", - "bool", - "date", - "keyValue" - ] - } + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "total": { + "description": "Resource total cosumption data", + "type": "object", + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false } } } @@ -82073,214 +78746,39 @@ } } }, - "sort": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "field": { - "type": "string", - "enum": [ - "environment", - "clusterName", - "clusterState", - "healthState", - "creationTimestamp", - "lastModifiedTimestamp" - ], - "x-nullable": true - }, - "order": { - "type": "string", - "default": "asc", - "enum": [ - "asc", - "desc" - ] - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "download file", - "schema": { - "type": "string", - "format": "binary" - }, - "headers": { - "Content-Disposition": { - "type": "string" - } - } - } - } - } - }, - "/v1/dashboard/spectroclusters/search/input": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a supported input values for the cluster search filter", - "operationId": "v1DashboardSpectroClustersSearchInput", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of cluster search filter input items", - "schema": { - "properties": { - "inputs": { + "total": { + "description": "Resource total cosumption data", "type": "object", - "additionalProperties": { - "properties": { - "values": { - "type": "array", - "items": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "properties": { + "allotted": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false }, - "x-omitempty": true + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false + } } - } - } - } - } - } - } - } - } - }, - "/v1/dashboard/spectroclusters/search/schema": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a schema for the cluster search filter", - "operationId": "v1SpectroClustersSearchSchema", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of cluster filter schema items", - "schema": { - "properties": { - "schema": { - "properties": { - "properties": { - "type": "array", - "items": { - "properties": { - "default": { - "type": "string", - "x-order": 6 - }, - "displayName": { - "type": "string", - "x-order": 2 - }, - "enum": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": true, - "x-order": 4 - }, - "enumValues": { - "type": "array", - "items": { - "properties": { - "displayValue": { - "type": "string" - }, - "value": { - "type": "string" - } - } - }, - "x-omitempty": true, - "x-order": 5 - }, - "hideDisplay": { - "type": "boolean", - "x-order": 1 - }, - "maxFloatVal": { - "type": "number", - "format": "float64", - "x-order": 10 - }, - "maxIntVal": { - "type": "integer", - "format": "int32", - "x-order": 8 - }, - "minFloatVal": { - "type": "number", - "format": "float64", - "x-order": 9 - }, - "minIntVal": { - "type": "integer", - "format": "int32", - "x-order": 7 - }, - "name": { - "type": "string", - "x-order": 0 - }, - "type": { - "type": "string", - "x-order": 3 - } + }, + "usage": { + "description": "Resource cosumption data", + "type": "object", + "properties": { + "cpu": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "memory": { + "type": "number", + "format": "float64", + "x-omitempty": false } } } @@ -82290,10 +78788,18 @@ } } } - } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] }, - "/v1/dashboard/spectroclusters/vms": { - "get": { + "/v1/dashboard/spectroclusters/{uid}/workloads": { + "post": { "security": [ { "ApiKey": [] @@ -82305,87 +78811,32 @@ "tags": [ "v1" ], - "summary": "Retrieves a list of Virtual machine enabled clusters", - "operationId": "V1DashboardVMEnabledClustersList", + "summary": "Retrieves specified cluster workloads", + "operationId": "v1DashboardSpectroClustersUidWorkloads", "parameters": [ { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of schema items", + "name": "body", + "in": "body", "schema": { + "description": "Cluster workloads spec", "type": "object", - "required": [ - "items" - ], "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "VM Dashboard enabled Spectro cluster", - "type": "object", - "properties": { - "metadata": { - "properties": { - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Spectro cluster spec", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - } - } - }, - "status": { - "description": "Spectro cluster status", - "properties": { - "clusterState": { - "type": "string" - } - } + "filter": { + "description": "Cluster workloads filter", + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" } } } } } } - } - } - } - }, - "/v1/dashboard/spectroclusters/{uid}": { - "get": { - "security": [ - { - "ApiKey": [] }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified cluster summary", - "operationId": "v1SpectroClustersSummaryUid", - "parameters": [ { "type": "string", "description": "Scope the request to the specified project uid", @@ -82395,976 +78846,298 @@ ], "responses": { "200": { - "description": "An spectro cluster summary", + "description": "An array of cluster workloads", "schema": { - "description": "Spectro cluster summary", + "description": "Cluster workload summary", "type": "object", "properties": { "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "description": "ObjectMeta input entity for object creation", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } }, "spec": { - "description": "Spectro cluster spec summary", + "description": "Cluster workload spec", "type": "object", "properties": { - "archTypes": { - "description": "Architecture types of the cluster", + "clusterroleBindings": { "type": "array", "items": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - }, - "cloudConfig": { - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "machinePools": { - "description": "Machine pool meta information", - "type": "array", - "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", "type": "object", "properties": { - "cloudType": { - "type": "string" - }, - "healthy": { - "description": "number of healthy machines", - "type": "integer", - "format": "int32", - "x-omitempty": false + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "infraProfileTemplate": { - "description": "Cluster profile template meta information", + "entity": { + "description": "Cluster workload ref", "type": "object", "properties": { - "cloudType": { + "kind": { "type": "string" }, "name": { - "description": "Cluster profile name", - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" - } - } - } - }, - "scope": { - "description": "scope or context(system, tenant or project)", - "type": "string" - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", "type": "string" }, "uid": { - "description": "Cluster profile uid", "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" } } }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { + "type": "object", + "additionalProperties": { "type": "string" } }, - "maintenanceMode": { - "description": "number of machines under maintenance", - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32", - "x-omitempty": false + "namespace": { + "type": "string" } } - } - }, - "uid": { - "description": "Cluster's cloud config uid", - "type": "string" - } - } - }, - "cloudaccount": { - "description": "Cloud account meta information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "clusterProfileTemplate": { - "description": "Cluster profile template meta information", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "description": "Cluster profile name", - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + }, + "spec": { + "description": "Cluster RBAC binding", "type": "object", - "required": [ - "layer", - "name" - ], "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { + "namespace": { "type": "string" }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } }, - "manifests": { + "subjects": { "type": "array", + "uniqueItems": true, "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "description": "Cluster role ref", "type": "object", "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, "name": { - "description": "Name of the referent.", "type": "string" }, - "uid": { - "description": "UID of the referent.", + "namespace": { "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] } } } }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + } + } + }, + "cronJobs": { + "type": "array", + "items": { + "description": "Cluster workload cronjob summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "params": { - "description": "params passed as env variables to be consumed at installation time", + "entity": { + "description": "Cluster workload ref", "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" } } }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" } }, - "server": { - "description": "pack registry server or helm repo", + "namespace": { "type": "string" - }, - "tag": { - "description": "pack tag", + } + } + }, + "spec": { + "description": "Cluster workload cronjob spec", + "type": "object", + "properties": { + "schedule": { "type": "string" - }, - "type": { - "description": "type of the pack", + } + } + }, + "status": { + "description": "Cluster workload cronjob status", + "type": "object", + "properties": { + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" + "format": "date-time" } } } - }, - "scope": { - "description": "scope or context(system, tenant or project)", - "type": "string" - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" } } }, - "clusterProfileTemplates": { + "daemonSets": { "type": "array", "items": { - "description": "Cluster profile template meta information", + "description": "Cluster workload daemonset summary", "type": "object", "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "description": "Cluster profile name", - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { + }, + "name": { + "type": "string" + }, + "uid": { "type": "string" } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", + } + }, + "labels": { + "type": "object", + "additionalProperties": { "type": "string" } + }, + "namespace": { + "type": "string" } } }, - "scope": { - "description": "scope or context(system, tenant or project)", - "type": "string" - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" - } - } - } - } - } - }, - "status": { - "description": "Spectro cluster status summary", - "properties": { - "abortTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "addOnServices": { - "type": "array", - "items": { - "description": "Spectro cluster status summary", - "properties": { - "endpoint": { - "type": "string" - }, - "name": { - "type": "string" - } - } - } - }, - "apiEndpoints": { - "type": "array", - "items": { - "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", - "type": "object", - "required": [ - "host", - "port" - ], - "properties": { - "host": { - "description": "The hostname on which the API server is serving.", - "type": "string" - }, - "port": { - "description": "The port on which the API server is serving.", - "type": "integer", - "format": "int32" + "status": { + "description": "Cluster workload daemonset status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32" + }, + "currentScheduled": { + "type": "integer", + "format": "int32" + }, + "desiredScheduled": { + "type": "integer", + "format": "int32" + }, + "misScheduled": { + "type": "integer", + "format": "int32" + }, + "ready": { + "type": "integer", + "format": "int32" + }, + "updatedScheduled": { + "type": "integer", + "format": "int32" + } + } } } } }, - "clusterImport": { - "type": "object", - "properties": { - "importLink": { - "description": "import link to download and install ally-lite, palette-lite", - "type": "string" - }, - "isBrownfield": { - "description": "Deprecated. Use the 'spec.clusterType'", - "type": "boolean", - "x-omitempty": false - }, - "state": { - "description": "cluster import status", - "type": "string" - } - } - }, - "conditions": { + "deployments": { "type": "array", "items": { + "description": "Cluster workload deployment summary", "type": "object", - "required": [ - "type", - "status" - ], "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "cost": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "fips": { - "properties": { - "mode": { - "type": "string", - "default": "none", - "enum": [ - "full", - "none", - "partial", - "unknown" - ] - } - } - }, - "health": { - "description": "Spectro cluster health status", - "properties": { - "agentVersion": { - "type": "string" - }, - "conditions": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Spectro cluster health condition", + "metadata": { + "description": "Cluster workload metadata", + "type": "object", "properties": { - "message": { - "type": "string" + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "relatedObject": { - "description": "Object for which the resource is related", + "entity": { + "description": "Cluster workload ref", "type": "object", "properties": { "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] + "type": "string" }, "name": { "type": "string" @@ -83374,245 +79147,122 @@ } } }, - "type": { + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { "type": "string" } } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "hourlyRate": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "kubeMeta": { - "description": "Spectro cluster kube meta", - "type": "object", - "properties": { - "hasKubeConfig": { - "type": "boolean", - "x-omitempty": false - }, - "hasKubeConfigClient": { - "type": "boolean", - "x-omitempty": false - }, - "hasManifest": { - "type": "boolean", - "x-omitempty": false - }, - "kubernetesVersion": { - "type": "string" - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "coordinates": { - "type": "array", - "items": { - "type": "number", - "format": "float64" - } - }, - "countryCode": { - "type": "string" - }, - "countryName": { - "type": "string" - }, - "regionCode": { - "type": "string" - }, - "regionName": { - "type": "string" - } - } - }, - "metrics": { - "description": "Spectro cluster metrics", - "properties": { - "cpu": { - "description": "Compute metrics", - "type": "object", - "properties": { - "lastUpdatedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "limit": { - "type": "number", - "x-omitempty": false - }, - "request": { - "type": "number", - "x-omitempty": false - }, - "total": { - "type": "number", - "x-omitempty": false - }, - "unit": { - "type": "string" - }, - "usage": { - "type": "number", - "x-omitempty": false - } - } - }, - "memory": { - "description": "Compute metrics", - "type": "object", - "properties": { - "lastUpdatedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "limit": { - "type": "number", - "x-omitempty": false - }, - "request": { - "type": "number", - "x-omitempty": false - }, - "total": { - "type": "number", - "x-omitempty": false - }, - "unit": { - "type": "string" - }, - "usage": { - "type": "number", - "x-omitempty": false + }, + "status": { + "description": "Cluster workload deployment status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } } } } } }, - "notifications": { - "description": "Spectro cluster notifications", - "properties": { - "isAvailable": { - "type": "boolean", - "x-omitempty": false - } - } - }, - "packs": { + "jobs": { "type": "array", "items": { + "description": "Cluster workload job summary", "type": "object", "properties": { - "condition": { + "metadata": { + "description": "Cluster workload metadata", "type": "object", - "required": [ - "type", - "status" - ], "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { + "creationTimestamp": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } }, - "status": { - "type": "string" + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "type": { + "namespace": { "type": "string" } } }, - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "manifests": { - "type": "array", - "items": { - "type": "object", - "properties": { - "condition": { + "status": { + "description": "Cluster workload job status", + "type": "object", + "properties": { + "completionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "conditions": { + "type": "array", + "items": { + "description": "Cluster workload condition", "type": "object", - "required": [ - "type", - "status" - ], "properties": { - "lastProbeTime": { + "lastTransitionTime": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" }, - "lastTransitionTime": { + "lastUpdateTime": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" }, "message": { - "description": "Human-readable message indicating details about last transition.", "type": "string" }, "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", "type": "string" }, "status": { @@ -83622,265 +79272,505 @@ "type": "string" } } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - }, - "profileUid": { - "type": "string" - }, - "services": { - "type": "array", - "items": { - "type": "object", - "properties": { - "host": { - "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", - "type": "string" - }, - "name": { - "description": "name of the loadbalancer service", - "type": "string" - }, - "ports": { - "description": "port this service exposed", - "type": "array", - "items": { - "type": "object", - "required": [ - "port" - ], - "properties": { - "port": { - "description": "The port that will be exposed by this service.", - "type": "integer", - "format": "int32" - }, - "protocol": { - "type": "string" - } - } - } } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "succeeded": { + "type": "integer", + "format": "int32" } } - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" } } } }, - "services": { + "pods": { "type": "array", "items": { + "description": "Cluster workload pod summary", "type": "object", "properties": { - "host": { - "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", - "type": "string" - }, - "name": { - "description": "name of the loadbalancer service", - "type": "string" - }, - "ports": { - "description": "port this service exposed", - "type": "array", - "items": { - "type": "object", - "required": [ - "port" - ], - "properties": { - "port": { - "description": "The port that will be exposed by this service.", - "type": "integer", - "format": "int32" - }, - "protocol": { + "metadata": { + "description": "Cluster workload pod metadata", + "type": "object", + "properties": { + "associatedRefs": { + "type": "array", + "items": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { "type": "string" } + }, + "machineUid": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "nodename": { + "type": "string" } } - } - } - } - }, - "spcApply": { - "type": "object", - "properties": { - "actionType": { - "type": "string", - "enum": [ - "DownloadAndInstall", - "DownloadAndInstallLater" - ] - }, - "canBeApplied": { - "description": "If it is true then Agent can apply the changes to the palette", - "type": "boolean", - "x-omitempty": false - }, - "crdDigest": { - "type": "string" - }, - "lastModifiedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchAppliedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "spcHash": { - "type": "string" - }, - "spcInfraHash": { - "type": "string" + }, + "spec": { + "description": "Cluster workload pod spec", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + } + }, + "volumes": { + "type": "array", + "items": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "status": { + "description": "Cluster workload pod status", + "type": "object", + "properties": { + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container status", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + } + }, + "phase": { + "type": "string" + }, + "podIp": { + "type": "string" + }, + "qosClass": { + "type": "string" + } + } + } } } }, - "state": { - "description": "current operational state", - "type": "string" - }, - "upgrades": { + "roleBindings": { "type": "array", "items": { - "description": "Upgrades represent the reason of the last upgrade that took place", + "description": "Cluster workload rbac binding summary", "type": "object", "properties": { - "reason": { - "type": "array", - "items": { - "type": "string" + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } } }, - "timestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } } } } }, - "virtual": { - "properties": { - "appDeployments": { - "description": "list of apps deployed on the virtual cluster", - "type": "array", - "items": { - "description": "Object resource reference", + "statefulSets": { + "type": "array", + "items": { + "description": "Cluster workload statefulset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", "type": "object", "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "projectUid": { - "type": "string" + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } }, - "tenantUid": { - "type": "string" + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "uid": { + "namespace": { "type": "string" } } - } - }, - "clusterGroup": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "hostCluster": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "lifecycleStatus": { - "properties": { - "msg": { - "description": "error or success msg of lifecycle", - "type": "string" - }, - "status": { - "description": "lifecycle status", - "type": "string", - "enum": [ - "Pausing", - "Paused", - "Resuming", - "Running", - "Error" - ] + }, + "status": { + "description": "Cluster workload statefulset status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } } } - }, - "state": { - "description": "cluster virtual host status", - "type": "string" - }, - "virtualClusters": { - "description": "list of virtual clusters deployed on the cluster", - "type": "array", - "items": { - "description": "Object resource reference", + } + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/clusterrolebinding": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves specified cluster workload clusterrolebindings", + "operationId": "v1DashboardSpectroClustersUidWorkloadsClusterRoleBinding", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Cluster workloads filter", + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload clusterrolebindings", + "schema": { + "description": "Cluster workload rbac bindings summary", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", "type": "object", "properties": { "kind": { @@ -83889,36 +79779,75 @@ "name": { "type": "string" }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, "uid": { "type": "string" } } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" } } - } - }, - "workspaces": { - "type": "array", - "items": { + }, + "spec": { + "description": "Cluster RBAC binding", "type": "object", - "required": [ - "uid" - ], "properties": { - "kind": { + "namespace": { "type": "string" }, - "name": { - "type": "string" + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } }, - "uid": { - "type": "string" + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] } } } @@ -83939,8 +79868,8 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/cost": { - "get": { + "/v1/dashboard/spectroclusters/{uid}/workloads/cronjob": { + "post": { "security": [ { "ApiKey": [] @@ -83952,30 +79881,31 @@ "tags": [ "v1" ], - "summary": "Retrieves the specified cluster cost summary", - "operationId": "v1SpectroClustersUidCostSummary", + "summary": "Retrieves specified cluster workload cronjobs", + "operationId": "v1DashboardSpectroClustersUidWorkloadsCronJob", "parameters": [ { - "type": "string", - "format": "date-time", - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "name": "startTime", - "in": "query" - }, - { - "type": "string", - "format": "date-time", - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "name": "endTime", - "in": "query" - }, - { - "minimum": 60, - "type": "integer", - "format": "int32", - "description": "period in minutes, group the data point by the specified period", - "name": "period", - "in": "query" + "name": "body", + "in": "body", + "schema": { + "description": "Cluster workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Cluster workloads filter", + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } }, { "type": "string", @@ -83986,133 +79916,74 @@ ], "responses": { "200": { - "description": "An spectro cluster cost summary", + "description": "An array of cluster workload cronjobs", "schema": { + "description": "Cluster workload cronjobs summary", "type": "object", "properties": { - "cluster": { - "description": "Spectro cluster cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Spectro cluster cloud cost information", - "type": "object", - "properties": { - "cost": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "data": { - "type": "array", - "items": { - "description": "Cloud cost data point information", + "cronJobs": { + "type": "array", + "items": { + "description": "Cluster workload cronjob summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", "type": "object", "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false + "kind": { + "type": "string" }, - "timestamp": { - "type": "number", - "format": "int64" + "name": { + "type": "string" }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false + "uid": { + "type": "string" } } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" } } - } - }, - "cost": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } + }, + "spec": { + "description": "Cluster workload cronjob spec", + "type": "object", + "properties": { + "schedule": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload cronjob status", + "type": "object", + "properties": { + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false } } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" } } - }, - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "period": { - "type": "integer", - "format": "int32" - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" } } } @@ -84128,8 +79999,8 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/overview": { - "get": { + "/v1/dashboard/spectroclusters/{uid}/workloads/daemonset": { + "post": { "security": [ { "ApiKey": [] @@ -84141,9 +80012,32 @@ "tags": [ "v1" ], - "summary": "Returns the specified cluster summary overview", - "operationId": "v1SpectroClustersSummaryUidOverview", + "summary": "Retrieves specified cluster workload daemonsets", + "operationId": "v1DashboardSpectroClustersUidWorkloadsDaemonSet", "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Cluster workloads filter", + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + } + } + }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -84153,793 +80047,382 @@ ], "responses": { "200": { - "description": "An spectro cluster summary overview", + "description": "An array of cluster workload daemonsets", "schema": { - "description": "Spectro cluster summary", + "description": "Cluster workload daemonset summary", "type": "object", "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" + "daemonSets": { + "type": "array", + "items": { + "description": "Cluster workload daemonset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload daemonset status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32" + }, + "currentScheduled": { + "type": "integer", + "format": "int32" + }, + "desiredScheduled": { + "type": "integer", + "format": "int32" + }, + "misScheduled": { + "type": "integer", + "format": "int32" + }, + "ready": { + "type": "integer", + "format": "int32" + }, + "updatedScheduled": { + "type": "integer", + "format": "int32" + } + } } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" } } - }, - "spec": { - "description": "Spectro cluster spec summary", + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/deployment": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves specified cluster workload deployments", + "operationId": "v1DashboardSpectroClustersUidWorkloadsDeployment", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Cluster workloads filter", "type": "object", "properties": { - "archTypes": { - "description": "Architecture types of the cluster", + "namespaces": { "type": "array", + "uniqueItems": true, "items": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] + "type": "string" } - }, - "cloudConfig": { - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "machinePools": { - "description": "Machine pool meta information", - "type": "array", - "items": { - "type": "object", - "properties": { - "cloudType": { + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload deployments", + "schema": { + "description": "Cluster workload deployments summary", + "type": "object", + "properties": { + "deployments": { + "type": "array", + "items": { + "description": "Cluster workload deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { "type": "string" }, - "healthy": { - "description": "number of healthy machines", + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload deployment status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { "type": "integer", "format": "int32", "x-omitempty": false }, - "infraProfileTemplate": { - "description": "Cluster profile template meta information", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "description": "Cluster profile name", - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" - } - } - } - }, - "scope": { - "description": "scope or context(system, tenant or project)", - "type": "string" - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" - } - } - }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean", + "ready": { + "type": "integer", + "format": "int32", "x-omitempty": false }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "maintenanceMode": { - "description": "number of machines under maintenance", + "total": { "type": "integer", "format": "int32", "x-omitempty": false }, - "size": { - "description": "size of the pool, number of machines", + "updated": { "type": "integer", "format": "int32", "x-omitempty": false } } } - }, - "uid": { - "description": "Cluster's cloud config uid", - "type": "string" } } - }, - "cloudaccount": { - "description": "Cloud account meta information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/job": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves specified cluster workload jobs", + "operationId": "v1DashboardSpectroClustersUidWorkloadsJob", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Cluster workloads filter", + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" } - }, - "clusterProfileTemplate": { - "description": "Cluster profile template meta information", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "description": "Cluster profile name", - "type": "string" - }, - "packs": { - "description": "Cluster profile packs array", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload jobs", + "schema": { + "description": "Cluster workload jobs summary", + "type": "object", + "properties": { + "jobs": { + "type": "array", + "items": { + "description": "Cluster workload job summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", "type": "object", - "required": [ - "layer", - "name" - ], "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", + "kind": { "type": "string" }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", "type": "string" }, - "version": { - "description": "pack version", + "uid": { "type": "string" } } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" } - }, - "scope": { - "description": "scope or context(system, tenant or project)", - "type": "string" - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" } - } - }, - "clusterProfileTemplates": { - "type": "array", - "items": { - "description": "Cluster profile template meta information", + }, + "status": { + "description": "Cluster workload job status", "type": "object", "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "description": "Cluster profile name", - "type": "string" + "completionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "packs": { - "description": "Cluster profile packs array", + "conditions": { "type": "array", "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "description": "Cluster workload condition", "type": "object", - "required": [ - "layer", - "name" - ], "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } + "format": "date-time" }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } + "lastUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "registryUid": { - "description": "pack registry uid", + "message": { "type": "string" }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", + "reason": { "type": "string" }, - "tag": { - "description": "pack tag", + "status": { "type": "string" }, "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", "type": "string" } } } }, - "scope": { - "description": "scope or context(system, tenant or project)", - "type": "string" - }, - "type": { - "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "version": { + "succeeded": { "type": "integer", "format": "int32" } @@ -84947,439 +80430,210 @@ } } } - }, - "status": { - "description": "Spectro cluster status summary", + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/namespace": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves specified cluster workload namespaces", + "operationId": "v1DashboardSpectroClustersUidWorkloadsNamespace", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Cluster workloads filter", + "type": "object", "properties": { - "abortTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "addOnServices": { - "type": "array", - "items": { - "description": "Spectro cluster status summary", - "properties": { - "endpoint": { - "type": "string" - }, - "name": { - "type": "string" - } - } - } - }, - "apiEndpoints": { + "namespaces": { "type": "array", + "uniqueItems": true, "items": { - "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", - "type": "object", - "required": [ - "host", - "port" - ], - "properties": { - "host": { - "description": "The hostname on which the API server is serving.", - "type": "string" - }, - "port": { - "description": "The port on which the API server is serving.", - "type": "integer", - "format": "int32" - } - } - } - }, - "clusterImport": { - "type": "object", - "properties": { - "importLink": { - "description": "import link to download and install ally-lite, palette-lite", - "type": "string" - }, - "isBrownfield": { - "description": "Deprecated. Use the 'spec.clusterType'", - "type": "boolean", - "x-omitempty": false - }, - "state": { - "description": "cluster import status", - "type": "string" - } + "type": "string" } - }, - "conditions": { - "type": "array", - "items": { + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload namespaces", + "schema": { + "description": "Cluster workload namespaces summary", + "properties": { + "namespaces": { + "type": "array", + "items": { + "description": "Cluster workload namespace summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", "type": "object", - "required": [ - "type", - "status" - ], "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { + "creationTimestamp": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "status": { + "namespace": { "type": "string" - }, - "type": { + } + } + }, + "status": { + "description": "Cluster workload namespace status", + "type": "object", + "properties": { + "phase": { "type": "string" } } } - }, - "cost": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "fips": { - "properties": { - "mode": { - "type": "string", - "default": "none", - "enum": [ - "full", - "none", - "partial", - "unknown" - ] - } - } - }, - "health": { - "description": "Spectro cluster health status", - "properties": { - "agentVersion": { - "type": "string" - }, - "conditions": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Spectro cluster health condition", - "properties": { - "message": { - "type": "string" - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "hourlyRate": { - "description": "Resource Cost information", - "type": "object", - "properties": { - "cloud": { - "description": "Cloud cost information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "kubeMeta": { - "description": "Spectro cluster kube meta", - "type": "object", - "properties": { - "hasKubeConfig": { - "type": "boolean", - "x-omitempty": false - }, - "hasKubeConfigClient": { - "type": "boolean", - "x-omitempty": false - }, - "hasManifest": { - "type": "boolean", - "x-omitempty": false - }, - "kubernetesVersion": { - "type": "string" - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "coordinates": { - "type": "array", - "items": { - "type": "number", - "format": "float64" - } - }, - "countryCode": { - "type": "string" - }, - "countryName": { - "type": "string" - }, - "regionCode": { - "type": "string" - }, - "regionName": { - "type": "string" - } - } - }, - "metrics": { - "description": "Spectro cluster metrics", - "properties": { - "cpu": { - "description": "Compute metrics", - "type": "object", - "properties": { - "lastUpdatedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "limit": { - "type": "number", - "x-omitempty": false - }, - "request": { - "type": "number", - "x-omitempty": false - }, - "total": { - "type": "number", - "x-omitempty": false - }, - "unit": { - "type": "string" - }, - "usage": { - "type": "number", - "x-omitempty": false - } - } - }, - "memory": { - "description": "Compute metrics", - "type": "object", - "properties": { - "lastUpdatedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "limit": { - "type": "number", - "x-omitempty": false - }, - "request": { - "type": "number", - "x-omitempty": false - }, - "total": { - "type": "number", - "x-omitempty": false - }, - "unit": { - "type": "string" - }, - "usage": { - "type": "number", - "x-omitempty": false - } - } - } - } - }, - "notifications": { - "description": "Spectro cluster notifications", - "properties": { - "isAvailable": { - "type": "boolean", - "x-omitempty": false - } - } - }, - "packs": { + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/pod": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves specified cluster workload pods", + "operationId": "v1DashboardSpectroClustersUidWorkloadsPod", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Cluster workloads filter", + "type": "object", + "properties": { + "namespaces": { "type": "array", + "uniqueItems": true, "items": { + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload pods", + "schema": { + "description": "Cluster workload pods summary", + "properties": { + "pods": { + "type": "array", + "items": { + "description": "Cluster workload pod summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload pod metadata", "type": "object", "properties": { - "condition": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "manifests": { + "associatedRefs": { "type": "array", "items": { + "description": "Cluster workload ref", "type": "object", "properties": { - "condition": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } + "kind": { + "type": "string" }, "name": { "type": "string" @@ -85390,41 +80644,105 @@ } } }, - "name": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "machineUid": { "type": "string" }, - "profileUid": { + "namespace": { "type": "string" }, - "services": { + "nodename": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster workload pod spec", + "type": "object", + "properties": { + "containers": { "type": "array", "items": { + "description": "Cluster workload pod container", "type": "object", "properties": { - "host": { - "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "image": { "type": "string" }, "name": { - "description": "name of the loadbalancer service", "type": "string" }, - "ports": { - "description": "port this service exposed", - "type": "array", - "items": { - "type": "object", - "required": [ - "port" - ], - "properties": { - "port": { - "description": "The port that will be exposed by this service.", - "type": "integer", - "format": "int32" - }, - "protocol": { - "type": "string" + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } } } } @@ -85432,123 +80750,177 @@ } } }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" + "volumes": { + "type": "array", + "items": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } } } - } - }, - "services": { - "type": "array", - "items": { + }, + "status": { + "description": "Cluster workload pod status", "type": "object", "properties": { - "host": { - "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", - "type": "string" - }, - "name": { - "description": "name of the loadbalancer service", - "type": "string" - }, - "ports": { - "description": "port this service exposed", + "containers": { "type": "array", "items": { + "description": "Cluster workload pod container status", "type": "object", - "required": [ - "port" - ], "properties": { - "port": { - "description": "The port that will be exposed by this service.", - "type": "integer", - "format": "int32" + "image": { + "type": "string" }, - "protocol": { + "name": { "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } } } } + }, + "phase": { + "type": "string" + }, + "podIp": { + "type": "string" + }, + "qosClass": { + "type": "string" } } } - }, - "spcApply": { - "type": "object", - "properties": { - "actionType": { - "type": "string", - "enum": [ - "DownloadAndInstall", - "DownloadAndInstallLater" - ] - }, - "canBeApplied": { - "description": "If it is true then Agent can apply the changes to the palette", - "type": "boolean", - "x-omitempty": false - }, - "crdDigest": { - "type": "string" - }, - "lastModifiedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchAppliedTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "spcHash": { - "type": "string" - }, - "spcInfraHash": { - "type": "string" - } - } - }, - "state": { - "description": "current operational state", - "type": "string" - }, - "upgrades": { + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/rolebinding": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves specified cluster workload rolebindings", + "operationId": "v1DashboardSpectroClustersUidWorkloadsRoleBinding", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Cluster workloads filter", + "type": "object", + "properties": { + "namespaces": { "type": "array", + "uniqueItems": true, "items": { - "description": "Upgrades represent the reason of the last upgrade that took place", + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload rolebindings", + "schema": { + "description": "Cluster workload rbac bindings summary", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", "type": "object", "properties": { - "reason": { - "type": "array", - "items": { - "type": "string" - } - }, - "timestamp": { + "creationTimestamp": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" - } - } - } - }, - "virtual": { - "properties": { - "appDeployments": { - "description": "list of apps deployed on the virtual cluster", - "type": "array", - "items": { - "description": "Object resource reference", + }, + "entity": { + "description": "Cluster workload ref", "type": "object", "properties": { "kind": { @@ -85557,126 +80929,75 @@ "name": { "type": "string" }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, "uid": { "type": "string" } } - } - }, - "clusterGroup": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "hostCluster": { - "description": "Object resource reference", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "lifecycleStatus": { - "properties": { - "msg": { - "description": "error or success msg of lifecycle", + }, + "labels": { + "type": "object", + "additionalProperties": { "type": "string" - }, - "status": { - "description": "lifecycle status", - "type": "string", - "enum": [ - "Pausing", - "Paused", - "Resuming", - "Running", - "Error" - ] } + }, + "namespace": { + "type": "string" } - }, - "state": { - "description": "cluster virtual host status", - "type": "string" - }, - "virtualClusters": { - "description": "list of virtual clusters deployed on the cluster", - "type": "array", - "items": { - "description": "Object resource reference", + } + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", "type": "object", "properties": { "kind": { - "type": "string" + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] }, "name": { "type": "string" - }, - "projectUid": { - "type": "string" - }, - "tenantUid": { - "type": "string" - }, - "uid": { - "type": "string" } } - } - } - } - }, - "workspaces": { - "type": "array", - "items": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "kind": { - "type": "string" }, - "name": { - "type": "string" + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } }, - "uid": { - "type": "string" + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] } } } @@ -85697,7 +81018,7 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/resources/consumption": { + "/v1/dashboard/spectroclusters/{uid}/workloads/statefulset": { "post": { "security": [ { @@ -85710,94 +81031,26 @@ "tags": [ "v1" ], - "summary": "Retrieves specified spectro cluster resource consumption", - "operationId": "v1SpectroClustersUidResourcesConsumption", + "summary": "Retrieves specified cluster workload statefulsets", + "operationId": "v1DashboardSpectroClustersUidWorkloadsStatefulSet", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Resource consumption spec", + "description": "Cluster workloads spec", "type": "object", "properties": { "filter": { - "description": "Resource consumption filter", + "description": "Cluster workloads filter", "type": "object", "properties": { - "clouds": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "includeMasterMachines": { - "type": "boolean" - }, "namespaces": { "type": "array", "uniqueItems": true, "items": { "type": "string" } - }, - "projects": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "workspaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - }, - "options": { - "description": "Resource consumption options", - "type": "object", - "properties": { - "enableSummaryView": { - "type": "boolean", - "default": true - }, - "groupBy": { - "type": "string", - "default": "namespace", - "enum": [ - "tenant", - "project", - "workspace", - "cluster", - "namespace", - "cloud" - ] - }, - "period": { - "type": "integer", - "format": "int32", - "default": 60 } } } @@ -85813,138 +81066,78 @@ ], "responses": { "200": { - "description": "An array of resource consumption data items", + "description": "An array of cluster workload statefulsets", "schema": { - "description": "Resources consumption information", + "description": "Cluster workload statefulsets summary", "type": "object", "properties": { - "cpuUnit": { - "type": "string" - }, - "memoryUnit": { - "type": "string" - }, - "resources": { + "statefulSets": { "type": "array", "items": { - "description": "Resource consumption information", + "description": "Cluster workload statefulset summary", "type": "object", "properties": { - "associatedResources": { - "type": "array", - "items": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "data": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Resource cosumption data point", - "type": "object", - "properties": { - "allotted": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "timestamp": { - "type": "number", - "format": "int64" - }, - "usage": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - }, - "entity": { + "metadata": { + "description": "Cluster workload metadata", "type": "object", - "required": [ - "uid" - ], "properties": { - "kind": { - "type": "string" + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "name": { - "type": "string" + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } }, - "uid": { + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { "type": "string" } } }, - "total": { - "description": "Resource total cosumption data", + "status": { + "description": "Cluster workload statefulset status", "type": "object", "properties": { - "allotted": { - "description": "Resource cosumption data", + "replicas": { + "description": "Cluster workload replica status", "type": "object", "properties": { - "cpu": { - "type": "number", - "format": "float64", + "available": { + "type": "integer", + "format": "int32", "x-omitempty": false }, - "memory": { - "type": "number", - "format": "float64", + "ready": { + "type": "integer", + "format": "int32", "x-omitempty": false - } - } - }, - "usage": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", + }, + "total": { + "type": "integer", + "format": "int32", "x-omitempty": false }, - "memory": { - "type": "number", - "format": "float64", + "updated": { + "type": "integer", + "format": "int32", "x-omitempty": false } } @@ -85953,44 +81146,6 @@ } } } - }, - "total": { - "description": "Resource total cosumption data", - "type": "object", - "properties": { - "allotted": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "usage": { - "description": "Resource cosumption data", - "type": "object", - "properties": { - "cpu": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "memory": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } } } } @@ -86006,8 +81161,8 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/workloads": { - "post": { + "/v1/dashboard/workspaces": { + "get": { "security": [ { "ApiKey": [] @@ -86019,32 +81174,9 @@ "tags": [ "v1" ], - "summary": "Retrieves specified cluster workloads", - "operationId": "v1DashboardSpectroClustersUidWorkloads", + "summary": "Retrieves a list of workspace", + "operationId": "v1DashboardWorkspacesList", "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster workloads spec", - "type": "object", - "properties": { - "filter": { - "description": "Cluster workloads filter", - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - } - } - }, { "type": "string", "description": "Scope the request to the specified project uid", @@ -86054,344 +81186,237 @@ ], "responses": { "200": { - "description": "An array of cluster workloads", + "description": "An array of workspace", "schema": { - "description": "Cluster workload summary", "type": "object", + "required": [ + "items" + ], "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } + "cpuUnit": { + "type": "string" }, - "spec": { - "description": "Cluster workload spec", - "type": "object", - "properties": { - "clusterroleBindings": { - "type": "array", - "items": { - "description": "Cluster workload rbac binding summary", - "type": "object", + "items": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace information", + "properties": { + "meta": { + "description": "Deprecated. Workspace meta data", "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { + "clusterNames": { + "description": "Deprecated. Use clusterRefs", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "name": { + "type": "string" + }, + "uid": { "type": "string" } - }, - "namespace": { - "type": "string" } } }, - "spec": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } + "creationTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" } + }, + "uid": { + "type": "string" } } - } - }, - "cronJobs": { - "type": "array", - "items": { - "description": "Cluster workload cronjob summary", + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { - "metadata": { - "description": "Cluster workload metadata", + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } + "additionalProperties": { + "type": "string" } }, - "spec": { - "description": "Cluster workload cronjob spec", - "type": "object", - "properties": { - "schedule": { - "type": "string" - } - } + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "status": { - "description": "Cluster workload cronjob status", + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", - "properties": { - "lastScheduleTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } + "additionalProperties": { + "type": "string" } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" } } - } - }, - "daemonSets": { - "type": "array", - "items": { - "description": "Cluster workload daemonset summary", - "type": "object", + }, + "spec": { + "description": "Workspace spec summary", "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { + "clusterRefs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace cluster reference", + "properties": { + "name": { + "type": "string" + }, + "uid": { "type": "string" } - }, - "namespace": { - "type": "string" } } }, - "status": { - "description": "Cluster workload daemonset status", - "type": "object", - "properties": { - "available": { - "type": "integer", - "format": "int32" - }, - "currentScheduled": { - "type": "integer", - "format": "int32" - }, - "desiredScheduled": { - "type": "integer", - "format": "int32" - }, - "misScheduled": { - "type": "integer", - "format": "int32" - }, - "ready": { - "type": "integer", - "format": "int32" - }, - "updatedScheduled": { - "type": "integer", - "format": "int32" - } + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" } - } - } - } - }, - "deployments": { - "type": "array", - "items": { - "description": "Cluster workload deployment summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", + }, + "quota": { + "description": "Workspace resource quota", "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", + "resourceAllocation": { + "description": "Workspace quota resource allocation", "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" + "cpu": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true }, - "uid": { - "type": "string" + "memory": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true } } - }, - "labels": { - "type": "object", - "additionalProperties": { + } + } + } + } + }, + "status": { + "description": "Workspace status", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Workspace namespace allocation", + "properties": { + "name": { "type": "string" + }, + "total": { + "description": "Workspace allocation", + "properties": { + "cpu": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "memory": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "usage": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } } - }, - "namespace": { - "type": "string" } } }, - "status": { - "description": "Cluster workload deployment status", - "type": "object", + "total": { + "description": "Workspace allocation", "properties": { - "replicas": { - "description": "Cluster workload replica status", - "type": "object", + "cpu": { + "description": "Workspace resource allocation", "properties": { - "available": { - "type": "integer", - "format": "int32", + "allocated": { + "type": "number", + "format": "float64", "x-omitempty": false }, - "ready": { - "type": "integer", - "format": "int32", + "usage": { + "type": "number", + "format": "float64", "x-omitempty": false - }, - "total": { - "type": "integer", - "format": "int32", + } + } + }, + "memory": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "type": "number", + "format": "float64", "x-omitempty": false }, - "updated": { - "type": "integer", - "format": "int32", + "usage": { + "type": "number", + "format": "float64", "x-omitempty": false } } @@ -86400,115 +81425,100 @@ } } } - }, - "jobs": { + } + } + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + }, + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/clusterrolebinding": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves specified workspace clusters workload clusterrolebindings", + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsClusterRoleBinding", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Workspace workloads spec", + "type": "object", + "properties": { + "filter": { + "description": "Workspace workloads filter", + "type": "object", + "properties": { + "clusters": { "type": "array", + "uniqueItems": true, "items": { - "description": "Cluster workload job summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } - } - }, - "status": { - "description": "Cluster workload job status", - "type": "object", - "properties": { - "completionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "conditions": { - "type": "array", - "items": { - "description": "Cluster workload condition", - "type": "object", - "properties": { - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastUpdateTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "succeeded": { - "type": "integer", - "format": "int32" - } - } - } - } + "type": "string" } }, - "pods": { + "namespaces": { "type": "array", + "uniqueItems": true, "items": { - "description": "Cluster workload pod summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload pod metadata", - "type": "object", - "properties": { - "associatedRefs": { - "type": "array", - "items": { + "type": "string" + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of clusters workload clusterrolebindings", + "schema": { + "description": "Workspace clusters workload rbac bindings summary", + "type": "object", + "properties": { + "clusters": { + "type": "array", + "items": { + "description": "Workspace cluster workload rbac bindings summary", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { "description": "Cluster workload ref", "type": "object", "properties": { @@ -86522,376 +81532,126 @@ "type": "string" } } - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { + }, + "labels": { + "type": "object", + "additionalProperties": { "type": "string" } - } - }, - "labels": { - "type": "object", - "additionalProperties": { + }, + "namespace": { "type": "string" } - }, - "machineUid": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "nodename": { - "type": "string" } - } - }, - "spec": { - "description": "Cluster workload pod spec", - "type": "object", - "properties": { - "containers": { - "type": "array", - "items": { - "description": "Cluster workload pod container", + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", "type": "object", "properties": { - "image": { - "type": "string" + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] }, "name": { "type": "string" - }, - "resources": { - "description": "Cluster workload pod container resources", - "type": "object", - "properties": { - "limits": { - "description": "Cluster workload pod container resource", - "type": "object", - "properties": { - "cpu": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "cpuUnit": { - "type": "string" - }, - "memory": { - "type": "integer", - "format": "int64", - "x-omitempty": false - }, - "memoryUnit": { - "type": "string" - } - } - }, - "requests": { - "description": "Cluster workload pod container resource", - "type": "object", - "properties": { - "cpu": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "cpuUnit": { - "type": "string" - }, - "memory": { - "type": "integer", - "format": "int64", - "x-omitempty": false - }, - "memoryUnit": { - "type": "string" - } - } - } - } } } - } - }, - "volumes": { - "type": "array", - "items": { - "description": "Cluster workload pod volume", - "type": "object", - "properties": { - "name": { - "type": "string" + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } } } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] } } } + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] }, - "status": { - "description": "Cluster workload pod status", - "type": "object", - "properties": { - "containers": { - "type": "array", - "items": { - "description": "Cluster workload pod container status", - "type": "object", - "properties": { - "image": { - "type": "string" - }, - "name": { - "type": "string" - }, - "ready": { - "type": "boolean", - "x-omitempty": false - }, - "restartCount": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "started": { - "type": "boolean", - "x-omitempty": false - }, - "state": { - "description": "Cluster workload pod container state", - "type": "object", - "properties": { - "exitCode": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "finishedAt": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "reason": { - "type": "string" - }, - "startedAt": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - } - } - } - }, - "phase": { - "type": "string" - }, - "podIp": { - "type": "string" - }, - "qosClass": { - "type": "string" - } - } - } - } - } - }, - "roleBindings": { - "type": "array", - "items": { - "description": "Cluster workload rbac binding summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } - } + "name": { + "type": "string" }, - "spec": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } + "uid": { + "type": "string" } } } + } + } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "statefulSets": { - "type": "array", - "items": { - "description": "Cluster workload statefulset summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } - } - }, - "status": { - "description": "Cluster workload statefulset status", - "type": "object", - "properties": { - "replicas": { - "description": "Cluster workload replica status", - "type": "object", - "properties": { - "available": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "ready": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "total": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "updated": { - "type": "integer", - "format": "int32", - "x-omitempty": false - } - } - } - } - } - } + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" } } } @@ -86909,7 +81669,7 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/workloads/clusterrolebinding": { + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/cronjob": { "post": { "security": [ { @@ -86922,20 +81682,27 @@ "tags": [ "v1" ], - "summary": "Retrieves specified cluster workload clusterrolebindings", - "operationId": "v1DashboardSpectroClustersUidWorkloadsClusterRoleBinding", + "summary": "Retrieves specified workspace clusters workload cronjobs", + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsCronJob", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster workloads spec", + "description": "Workspace workloads spec", "type": "object", "properties": { "filter": { - "description": "Cluster workloads filter", + "description": "Workspace workloads filter", "type": "object", "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "namespaces": { "type": "array", "uniqueItems": true, @@ -86957,110 +81724,132 @@ ], "responses": { "200": { - "description": "An array of cluster workload clusterrolebindings", + "description": "An array of clusters workload cronjobs", "schema": { - "description": "Cluster workload rbac bindings summary", + "description": "Workspace clusters workload cronjobs summary", "type": "object", "properties": { - "bindings": { + "clusters": { "type": "array", "items": { - "description": "Cluster workload rbac binding summary", + "description": "Workspace cluster workload cronjobs summary", "type": "object", "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", + "cronjobs": { + "type": "array", + "items": { + "description": "Cluster workload cronjob summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", "type": "object", "properties": { - "name": { - "type": "string" + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } }, "namespace": { "type": "string" - }, - "type": { + } + } + }, + "spec": { + "description": "Cluster workload cronjob spec", + "type": "object", + "properties": { + "schedule": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload cronjob status", + "type": "object", + "properties": { + "lastScheduleTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] + "format": "date-time" } } } - }, - "type": { + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { "type": "string", "enum": [ - "RoleBinding", - "ClusterRoleBinding" + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" } } } } } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } } } } @@ -87076,7 +81865,7 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/workloads/cronjob": { + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/daemonset": { "post": { "security": [ { @@ -87089,20 +81878,27 @@ "tags": [ "v1" ], - "summary": "Retrieves specified cluster workload cronjobs", - "operationId": "v1DashboardSpectroClustersUidWorkloadsCronJob", + "summary": "Retrieves specified workspace clusters workload daemonsets", + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsDaemonSet", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster workloads spec", + "description": "Workspace workloads spec", "type": "object", "properties": { "filter": { - "description": "Cluster workloads filter", + "description": "Workspace workloads filter", "type": "object", "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "namespaces": { "type": "array", "uniqueItems": true, @@ -87124,74 +81920,142 @@ ], "responses": { "200": { - "description": "An array of cluster workload cronjobs", + "description": "An array of clusters workload daemonsets", "schema": { - "description": "Cluster workload cronjobs summary", + "description": "Workspace clusters workload statefulsets summary", "type": "object", "properties": { - "cronJobs": { + "clusters": { "type": "array", "items": { - "description": "Cluster workload cronjob summary", + "description": "Workspace cluster workload daemonsets summary", "type": "object", "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" + "daemonSets": { + "type": "array", + "items": { + "description": "Cluster workload daemonset summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload daemonset status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32" + }, + "currentScheduled": { + "type": "integer", + "format": "int32" + }, + "desiredScheduled": { + "type": "integer", + "format": "int32" + }, + "misScheduled": { + "type": "integer", + "format": "int32" + }, + "ready": { + "type": "integer", + "format": "int32" + }, + "updatedScheduled": { + "type": "integer", + "format": "int32" + } } } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster workload cronjob spec", - "type": "object", - "properties": { - "schedule": { - "type": "string" } } }, - "status": { - "description": "Cluster workload cronjob status", + "metadata": { + "description": "Object for which the resource is related", "type": "object", "properties": { - "lastScheduleTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "kind": { "type": "string", - "format": "date-time" + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" } } } } } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } } } } @@ -87207,7 +82071,7 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/workloads/daemonset": { + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/deployment": { "post": { "security": [ { @@ -87220,20 +82084,27 @@ "tags": [ "v1" ], - "summary": "Retrieves specified cluster workload daemonsets", - "operationId": "v1DashboardSpectroClustersUidWorkloadsDaemonSet", + "summary": "Retrieves specified workspace clusters workload deployments", + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsDeployment", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster workloads spec", + "description": "Workspace workloads spec", "type": "object", "properties": { "filter": { - "description": "Cluster workloads filter", + "description": "Workspace workloads filter", "type": "object", "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "namespaces": { "type": "array", "uniqueItems": true, @@ -87255,84 +82126,144 @@ ], "responses": { "200": { - "description": "An array of cluster workload daemonsets", + "description": "An array of clusters workload deployments", "schema": { - "description": "Cluster workload daemonset summary", + "description": "Workspace clusters workload deployments summary", "type": "object", "properties": { - "daemonSets": { + "clusters": { "type": "array", "items": { - "description": "Cluster workload daemonset summary", + "description": "Workspace cluster workload deployments summary", "type": "object", "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" + "deployments": { + "type": "array", + "items": { + "description": "Cluster workload deployment summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload deployment status", + "type": "object", + "properties": { + "replicas": { + "description": "Cluster workload replica status", + "type": "object", + "properties": { + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false + } + } + } } } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" } } }, - "status": { - "description": "Cluster workload daemonset status", + "metadata": { + "description": "Object for which the resource is related", "type": "object", "properties": { - "available": { - "type": "integer", - "format": "int32" - }, - "currentScheduled": { - "type": "integer", - "format": "int32" - }, - "desiredScheduled": { - "type": "integer", - "format": "int32" - }, - "misScheduled": { - "type": "integer", - "format": "int32" + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] }, - "ready": { - "type": "integer", - "format": "int32" + "name": { + "type": "string" }, - "updatedScheduled": { - "type": "integer", - "format": "int32" + "uid": { + "type": "string" } } } } } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } } } } @@ -87348,7 +82279,7 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/workloads/deployment": { + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/job": { "post": { "security": [ { @@ -87361,20 +82292,27 @@ "tags": [ "v1" ], - "summary": "Retrieves specified cluster workload deployments", - "operationId": "v1DashboardSpectroClustersUidWorkloadsDeployment", + "summary": "Retrieves specified workspace clusters workload jobs", + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsJob", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster workloads spec", + "description": "Workspace workloads spec", "type": "object", "properties": { "filter": { - "description": "Cluster workloads filter", + "description": "Workspace workloads filter", "type": "object", "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "namespaces": { "type": "array", "uniqueItems": true, @@ -87396,86 +82334,163 @@ ], "responses": { "200": { - "description": "An array of cluster workload deployments", + "description": "An array of clusters workload jobs", "schema": { - "description": "Cluster workload deployments summary", + "description": "Workspace clusters workload jobs summary", "type": "object", "properties": { - "deployments": { + "clusters": { "type": "array", "items": { - "description": "Cluster workload deployment summary", + "description": "Workspace cluster workload jobs summary", "type": "object", "properties": { + "jobs": { + "type": "array", + "items": { + "description": "Cluster workload job summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", + "type": "object", + "properties": { + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster workload job status", + "type": "object", + "properties": { + "completionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "conditions": { + "type": "array", + "items": { + "description": "Cluster workload condition", + "type": "object", + "properties": { + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastUpdateTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "succeeded": { + "type": "integer", + "format": "int32" + } + } + } + } + } + }, "metadata": { - "description": "Cluster workload metadata", + "description": "Object for which the resource is related", "type": "object", "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "kind": { "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "name": { + "type": "string" }, - "namespace": { + "uid": { "type": "string" } } - }, - "status": { - "description": "Cluster workload deployment status", - "type": "object", - "properties": { - "replicas": { - "description": "Cluster workload replica status", - "type": "object", - "properties": { - "available": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "ready": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "total": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "updated": { - "type": "integer", - "format": "int32", - "x-omitempty": false - } - } - } - } } } } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } } } } @@ -87491,7 +82506,7 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/workloads/job": { + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/namespace": { "post": { "security": [ { @@ -87504,20 +82519,27 @@ "tags": [ "v1" ], - "summary": "Retrieves specified cluster workload jobs", - "operationId": "v1DashboardSpectroClustersUidWorkloadsJob", + "summary": "Retrieves specified workspace clusters workload namespaces", + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsNamespace", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster workloads spec", + "description": "Workspace workloads spec", "type": "object", "properties": { "filter": { - "description": "Cluster workloads filter", + "description": "Workspace workloads filter", "type": "object", "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "namespaces": { "type": "array", "uniqueItems": true, @@ -87539,222 +82561,119 @@ ], "responses": { "200": { - "description": "An array of cluster workload jobs", + "description": "An array of clusters workload namespaces", "schema": { - "description": "Cluster workload jobs summary", + "description": "Workspace clusters workload namespaces summary", "type": "object", "properties": { - "jobs": { + "clusters": { "type": "array", "items": { - "description": "Cluster workload job summary", + "description": "Workspace cluster workload namespaces summary", "type": "object", "properties": { "metadata": { - "description": "Cluster workload metadata", + "description": "Object for which the resource is related", "type": "object", "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "kind": { "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "name": { + "type": "string" }, - "namespace": { + "uid": { "type": "string" } } }, - "status": { - "description": "Cluster workload job status", - "type": "object", - "properties": { - "completionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "conditions": { - "type": "array", - "items": { - "description": "Cluster workload condition", + "namespaces": { + "type": "array", + "items": { + "description": "Cluster workload namespace summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", "type": "object", "properties": { - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastUpdateTime": { + "creationTimestamp": { "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", "format": "date-time" }, - "message": { - "type": "string" + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } }, - "reason": { - "type": "string" + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "status": { + "namespace": { "type": "string" - }, - "type": { + } + } + }, + "status": { + "description": "Cluster workload namespace status", + "type": "object", + "properties": { + "phase": { "type": "string" } } } - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "succeeded": { - "type": "integer", - "format": "int32" } } } } } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/dashboard/spectroclusters/{uid}/workloads/namespace": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves specified cluster workload namespaces", - "operationId": "v1DashboardSpectroClustersUidWorkloadsNamespace", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster workloads spec", - "type": "object", - "properties": { - "filter": { - "description": "Cluster workloads filter", + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", "type": "object", "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { "type": "string" } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of cluster workload namespaces", - "schema": { - "description": "Cluster workload namespaces summary", - "properties": { - "namespaces": { - "type": "array", - "items": { - "description": "Cluster workload namespace summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } - } - }, - "status": { - "description": "Cluster workload namespace status", - "type": "object", - "properties": { - "phase": { - "type": "string" - } - } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" } } } @@ -87772,7 +82691,7 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/workloads/pod": { + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/pod": { "post": { "security": [ { @@ -87785,20 +82704,27 @@ "tags": [ "v1" ], - "summary": "Retrieves specified cluster workload pods", - "operationId": "v1DashboardSpectroClustersUidWorkloadsPod", + "summary": "Retrieves specified workspace clusters workload pods", + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsPod", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster workloads spec", + "description": "Workspace workloads spec", "type": "object", "properties": { "filter": { - "description": "Cluster workloads filter", + "description": "Workspace workloads filter", "type": "object", "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "namespaces": { "type": "array", "uniqueItems": true, @@ -87820,230 +82746,289 @@ ], "responses": { "200": { - "description": "An array of cluster workload pods", + "description": "An array of clusters workload pods", "schema": { - "description": "Cluster workload pods summary", + "description": "Workspace clusters workload pods summary", + "type": "object", "properties": { - "pods": { + "clusters": { "type": "array", "items": { - "description": "Cluster workload pod summary", + "description": "Workspace cluster workload pods summary", "type": "object", "properties": { "metadata": { - "description": "Cluster workload pod metadata", + "description": "Object for which the resource is related", "type": "object", "properties": { - "associatedRefs": { - "type": "array", - "items": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "kind": { "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "machineUid": { - "type": "string" + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] }, - "namespace": { + "name": { "type": "string" }, - "nodename": { + "uid": { "type": "string" } } }, - "spec": { - "description": "Cluster workload pod spec", - "type": "object", - "properties": { - "containers": { - "type": "array", - "items": { - "description": "Cluster workload pod container", + "pods": { + "type": "array", + "items": { + "description": "Cluster workload pod summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload pod metadata", "type": "object", "properties": { - "image": { - "type": "string" + "associatedRefs": { + "type": "array", + "items": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } }, - "name": { - "type": "string" + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" }, - "resources": { - "description": "Cluster workload pod container resources", + "entity": { + "description": "Cluster workload ref", "type": "object", "properties": { - "limits": { - "description": "Cluster workload pod container resource", - "type": "object", - "properties": { - "cpu": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "cpuUnit": { - "type": "string" - }, - "memory": { - "type": "integer", - "format": "int64", - "x-omitempty": false - }, - "memoryUnit": { - "type": "string" - } - } + "kind": { + "type": "string" }, - "requests": { - "description": "Cluster workload pod container resource", - "type": "object", - "properties": { - "cpu": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "cpuUnit": { - "type": "string" - }, - "memory": { - "type": "integer", - "format": "int64", - "x-omitempty": false - }, - "memoryUnit": { - "type": "string" - } - } + "name": { + "type": "string" + }, + "uid": { + "type": "string" } } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "machineUid": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "nodename": { + "type": "string" } } - } - }, - "volumes": { - "type": "array", - "items": { - "description": "Cluster workload pod volume", + }, + "spec": { + "description": "Cluster workload pod spec", "type": "object", "properties": { - "name": { - "type": "string" + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "description": "Cluster workload pod container resources", + "type": "object", + "properties": { + "limits": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + }, + "requests": { + "description": "Cluster workload pod container resource", + "type": "object", + "properties": { + "cpu": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "type": "integer", + "format": "int64", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + } + } + } + } + } + } + }, + "volumes": { + "type": "array", + "items": { + "description": "Cluster workload pod volume", + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } } } - } - } - } - }, - "status": { - "description": "Cluster workload pod status", - "type": "object", - "properties": { - "containers": { - "type": "array", - "items": { - "description": "Cluster workload pod container status", + }, + "status": { + "description": "Cluster workload pod status", "type": "object", "properties": { - "image": { - "type": "string" + "containers": { + "type": "array", + "items": { + "description": "Cluster workload pod container status", + "type": "object", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "Cluster workload pod container state", + "type": "object", + "properties": { + "exitCode": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "finishedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "state": { + "type": "string" + } + } + } + } + } }, - "name": { + "phase": { "type": "string" }, - "ready": { - "type": "boolean", - "x-omitempty": false - }, - "restartCount": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "started": { - "type": "boolean", - "x-omitempty": false + "podIp": { + "type": "string" }, - "state": { - "description": "Cluster workload pod container state", - "type": "object", - "properties": { - "exitCode": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "finishedAt": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "reason": { - "type": "string" - }, - "startedAt": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } + "qosClass": { + "type": "string" } } } - }, - "phase": { - "type": "string" - }, - "podIp": { - "type": "string" - }, - "qosClass": { - "type": "string" } } } } } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } } } } @@ -88059,7 +83044,7 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/workloads/rolebinding": { + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/rolebinding": { "post": { "security": [ { @@ -88072,20 +83057,27 @@ "tags": [ "v1" ], - "summary": "Retrieves specified cluster workload rolebindings", - "operationId": "v1DashboardSpectroClustersUidWorkloadsRoleBinding", + "summary": "Retrieves specified workspace clusters workload rolebindings", + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsRoleBinding", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster workloads spec", + "description": "Workspace workloads spec", "type": "object", "properties": { "filter": { - "description": "Cluster workloads filter", + "description": "Workspace workloads filter", "type": "object", "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "namespaces": { "type": "array", "uniqueItems": true, @@ -88107,110 +83099,168 @@ ], "responses": { "200": { - "description": "An array of cluster workload rolebindings", + "description": "An array of clusters workload rolebindings", "schema": { - "description": "Cluster workload rbac bindings summary", + "description": "Workspace clusters workload rbac bindings summary", "type": "object", "properties": { - "bindings": { + "clusters": { "type": "array", "items": { - "description": "Cluster workload rbac binding summary", + "description": "Workspace cluster workload rbac bindings summary", "type": "object", "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", + "bindings": { + "type": "array", + "items": { + "description": "Cluster workload rbac binding summary", + "type": "object", + "properties": { + "metadata": { + "description": "Cluster workload metadata", "type": "object", "properties": { - "name": { - "type": "string" + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "entity": { + "description": "Cluster workload ref", + "type": "object", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } }, "namespace": { "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } }, "type": { "type": "string", "enum": [ - "User", - "Group", - "ServiceAccount" + "RoleBinding", + "ClusterRoleBinding" ] } } } - }, - "type": { + } + } + }, + "metadata": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { "type": "string", "enum": [ - "RoleBinding", - "ClusterRoleBinding" + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" } } } } } + }, + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } } } } @@ -88226,7 +83276,7 @@ } ] }, - "/v1/dashboard/spectroclusters/{uid}/workloads/statefulset": { + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/statefulset": { "post": { "security": [ { @@ -88239,20 +83289,27 @@ "tags": [ "v1" ], - "summary": "Retrieves specified cluster workload statefulsets", - "operationId": "v1DashboardSpectroClustersUidWorkloadsStatefulSet", + "summary": "Retrieves specified workspace clusters workload statefulsets", + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsStatefulSet", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Cluster workloads spec", + "description": "Workspace workloads spec", "type": "object", "properties": { "filter": { - "description": "Cluster workloads filter", + "description": "Workspace workloads filter", "type": "object", "properties": { + "clusters": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "namespaces": { "type": "array", "uniqueItems": true, @@ -88274,447 +83331,46 @@ ], "responses": { "200": { - "description": "An array of cluster workload statefulsets", + "description": "An array of clusters workload statefulsets", "schema": { - "description": "Cluster workload statefulsets summary", + "description": "Workspace clusters workload statefulsets summary", "type": "object", "properties": { - "statefulSets": { + "clusters": { "type": "array", "items": { - "description": "Cluster workload statefulset summary", + "description": "Workspace cluster workload statefulsets summary", "type": "object", "properties": { "metadata": { - "description": "Cluster workload metadata", + "description": "Object for which the resource is related", "type": "object", "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "kind": { "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "name": { + "type": "string" }, - "namespace": { + "uid": { "type": "string" } } }, - "status": { - "description": "Cluster workload statefulset status", - "type": "object", - "properties": { - "replicas": { - "description": "Cluster workload replica status", - "type": "object", - "properties": { - "available": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "ready": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "total": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "updated": { - "type": "integer", - "format": "int32", - "x-omitempty": false - } - } - } - } - } - } - } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/dashboard/workspaces": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of workspace", - "operationId": "v1DashboardWorkspacesList", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of workspace", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "cpuUnit": { - "type": "string" - }, - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Workspace information", - "properties": { - "meta": { - "description": "Deprecated. Workspace meta data", - "properties": { - "clusterNames": { - "description": "Deprecated. Use clusterRefs", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "clusterRefs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Workspace cluster reference", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "creationTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "type": "string" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "uid": { - "type": "string" - } - } - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Workspace spec summary", - "properties": { - "clusterRefs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Workspace cluster reference", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "quota": { - "description": "Workspace resource quota", - "properties": { - "resourceAllocation": { - "description": "Workspace quota resource allocation", - "properties": { - "cpu": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memory": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - }, - "status": { - "description": "Workspace status", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Workspace namespace allocation", - "properties": { - "name": { - "type": "string" - }, - "total": { - "description": "Workspace allocation", - "properties": { - "cpu": { - "description": "Workspace resource allocation", - "properties": { - "allocated": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "usage": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "memory": { - "description": "Workspace resource allocation", - "properties": { - "allocated": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "usage": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - } - } - }, - "total": { - "description": "Workspace allocation", - "properties": { - "cpu": { - "description": "Workspace resource allocation", - "properties": { - "allocated": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "usage": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "memory": { - "description": "Workspace resource allocation", - "properties": { - "allocated": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "usage": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - } - } - } - } - }, - "memoryUnit": { - "type": "string" - } - } - } - } - } - } - }, - "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/clusterrolebinding": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves specified workspace clusters workload clusterrolebindings", - "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsClusterRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Workspace workloads spec", - "type": "object", - "properties": { - "filter": { - "description": "Workspace workloads filter", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of clusters workload clusterrolebindings", - "schema": { - "description": "Workspace clusters workload rbac bindings summary", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "items": { - "description": "Workspace cluster workload rbac bindings summary", - "type": "object", - "properties": { - "bindings": { + "statefulSets": { "type": "array", "items": { - "description": "Cluster workload rbac binding summary", + "description": "Cluster workload statefulset summary", "type": "object", "properties": { "metadata": { @@ -88752,89 +83408,40 @@ } } }, - "spec": { - "description": "Cluster RBAC binding", + "status": { + "description": "Cluster workload statefulset status", "type": "object", "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", + "replicas": { + "description": "Cluster workload replica status", "type": "object", "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] + "available": { + "type": "integer", + "format": "int32", + "x-omitempty": false }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } + "ready": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "total": { + "type": "integer", + "format": "int32", + "x-omitempty": false + }, + "updated": { + "type": "integer", + "format": "int32", + "x-omitempty": false } } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] } } } } } - }, - "metadata": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } } } } @@ -88844,21 +83451,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -88877,7 +83484,7 @@ } ] }, - "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/cronjob": { + "/v1/datasinks/cloudwatch": { "post": { "security": [ { @@ -88887,193 +83494,140 @@ "Authorization": [] } ], + "description": "Sync data to cloud watch", "tags": [ "v1" ], - "summary": "Retrieves specified workspace clusters workload cronjobs", - "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsCronJob", + "summary": "sync data to cloud watch", + "operationId": "V1DataSinksCloudWatchSink", "parameters": [ { - "name": "body", + "description": "Request payload for cloud watch config", + "name": "dataSinkCloudWatchConfig", "in": "body", + "required": true, "schema": { - "description": "Workspace workloads spec", - "type": "object", - "properties": { - "filter": { - "description": "Workspace workloads filter", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of clusters workload cronjobs", - "schema": { - "description": "Workspace clusters workload cronjobs summary", + "description": "Data sink cloud watch config", "type": "object", "properties": { - "clusters": { + "payload": { + "description": "List of data sink payload entities", "type": "array", + "uniqueItems": true, "items": { - "description": "Workspace cluster workload cronjobs summary", + "description": "Data sink payload entity", "type": "object", "properties": { - "cronjobs": { - "type": "array", - "items": { - "description": "Cluster workload cronjob summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster workload cronjob spec", - "type": "object", - "properties": { - "schedule": { - "type": "string" - } - } - }, - "status": { - "description": "Cluster workload cronjob status", - "type": "object", - "properties": { - "lastScheduleTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } - } - } - } - } + "refUid": { + "description": "RefUid of the data sink payload", + "type": "string" }, - "metadata": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "timestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" } + }, + "additionalProperties": { + "type": "object" } } }, - "metadata": { - "description": "ObjectMeta input entity for object creation", + "spec": { + "description": "Cloud watch config entity", "type": "object", "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "credentials": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", "type": "object", - "additionalProperties": { - "type": "string" + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "type": "string", + "default": "secret", + "enum": [ + "secret", + "sts" + ] + }, + "partition": { + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "type": "string", + "default": "aws", + "enum": [ + "aws", + "aws-us-gov" + ] + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "type": "array", + "items": { + "type": "string" + } + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "description": "Aws sts credentials", + "type": "object", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + } + } } }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } + "group": { + "description": "Name of the group", + "type": "string" }, - "name": { - "description": "Name of the resource.", + "region": { + "description": "Name of the region", + "type": "string" + }, + "stream": { + "description": "Name of the stream", "type": "string" } } } } } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } } } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] + } }, - "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/daemonset": { + "/v1/edgehosts": { "post": { "security": [ { @@ -89086,33 +83640,49 @@ "tags": [ "v1" ], - "summary": "Retrieves specified workspace clusters workload daemonsets", - "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsDaemonSet", + "summary": "Create the edge host device", + "operationId": "v1EdgeHostDevicesCreate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Workspace workloads spec", + "description": "Edge host device information", "type": "object", "properties": { - "filter": { - "description": "Workspace workloads filter", + "metadata": { + "description": "Object identity meta with tags", "type": "object", "properties": { - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { + "labels": { + "type": "object", + "additionalProperties": { "type": "string" } }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Edge host device spec", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + }, + "hostPairingKey": { + "type": "string", + "format": "password" } } } @@ -89126,142 +83696,110 @@ "in": "header" } ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/edgehosts/metadata": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of edge hosts metadata matching the filter condition", + "operationId": "v1EdgeHostsMetadataQuickFilterGet", + "parameters": [ + { + "enum": [ + "libvirt", + "edge-native", + "vsphere" + ], + "type": "string", + "name": "type", + "in": "query" + }, + { + "enum": [ + "unusedEdgeHosts" + ], + "type": "string", + "name": "quickFilter", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], "responses": { "200": { - "description": "An array of clusters workload daemonsets", + "description": "An array of edge host metadata", "schema": { - "description": "Workspace clusters workload statefulsets summary", "type": "object", "properties": { - "clusters": { + "edgeHosts": { "type": "array", "items": { - "description": "Workspace cluster workload daemonsets summary", "type": "object", "properties": { - "daemonSets": { - "type": "array", - "items": { - "description": "Cluster workload daemonset summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } - } - }, - "status": { - "description": "Cluster workload daemonset status", - "type": "object", - "properties": { - "available": { - "type": "integer", - "format": "int32" - }, - "currentScheduled": { - "type": "integer", - "format": "int32" - }, - "desiredScheduled": { - "type": "integer", - "format": "int32" - }, - "misScheduled": { - "type": "integer", - "format": "int32" - }, - "ready": { - "type": "integer", - "format": "int32" - }, - "updatedScheduled": { - "type": "integer", - "format": "int32" - } - } - } - } - } + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] }, - "metadata": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - }, - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { + "edgeHostType": { + "type": "string", + "enum": [ + "libvirt", + "edge-native", + "vsphere" + ] + }, + "healthState": { "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { "type": "string" } - }, - "name": { - "description": "Name of the resource.", - "type": "string" } } } @@ -89269,17 +83807,9 @@ } } } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] + } }, - "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/deployment": { + "/v1/edgehosts/register": { "post": { "security": [ { @@ -89292,1281 +83822,732 @@ "tags": [ "v1" ], - "summary": "Retrieves specified workspace clusters workload deployments", - "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsDeployment", + "summary": "Registers the edge host device", + "operationId": "v1EdgeHostDevicesRegister", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Workspace workloads spec", - "type": "object", "properties": { - "filter": { - "description": "Workspace workloads filter", + "aclmeta": { + "description": "Resource access control information (Read-only response data)", "type": "object", "properties": { - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of clusters workload deployments", - "schema": { - "description": "Workspace clusters workload deployments summary", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "items": { - "description": "Workspace cluster workload deployments summary", - "type": "object", - "properties": { - "deployments": { - "type": "array", - "items": { - "description": "Cluster workload deployment summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "type": "string" - } - } - }, - "status": { - "description": "Cluster workload deployment status", - "type": "object", - "properties": { - "replicas": { - "description": "Cluster workload replica status", - "type": "object", - "properties": { - "available": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "ready": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "total": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "updated": { - "type": "integer", - "format": "int32", - "x-omitempty": false - } - } - } - } - } - } - } - }, - "metadata": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } + "ownerUid": { + "description": "User or service uid which created the resource", + "type": "string" + }, + "projectUid": { + "description": "Project's uid if the resource is under a project", + "type": "string" + }, + "tenantUid": { + "description": "Tenant's uid", + "type": "string" } } }, "metadata": { - "description": "ObjectMeta input entity for object creation", + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/job": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves specified workspace clusters workload jobs", - "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsJob", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Workspace workloads spec", - "type": "object", - "properties": { - "filter": { - "description": "Workspace workloads filter", + }, + "spec": { + "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", "type": "object", "properties": { - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of clusters workload jobs", - "schema": { - "description": "Workspace clusters workload jobs summary", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "items": { - "description": "Workspace cluster workload jobs summary", - "type": "object", - "properties": { - "jobs": { - "type": "array", - "items": { - "description": "Cluster workload job summary", - "type": "object", + "cloudProperties": { + "description": "Additional cloud properties of the edge host (applicable based on the cloud type)", + "type": "object", + "properties": { + "vsphere": { + "description": "Vsphere cloud properties of edge host", "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { + "datacenters": { + "type": "array", + "items": { + "description": "Vsphere datacenter", + "type": "object", + "properties": { + "computeClusters": { + "type": "array", + "items": { + "description": "Vsphere compute cluster", + "type": "object", + "properties": { + "datastores": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "networks": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "resourcePools": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "folders": { + "type": "array", + "items": { "type": "string" } - } - }, - "labels": { - "type": "object", - "additionalProperties": { + }, + "name": { "type": "string" } - }, - "namespace": { - "type": "string" - } - } - }, - "status": { - "description": "Cluster workload job status", - "type": "object", - "properties": { - "completionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "conditions": { - "type": "array", - "items": { - "description": "Cluster workload condition", - "type": "object", - "properties": { - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastUpdateTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "succeeded": { - "type": "integer", - "format": "int32" } } } } } - }, - "metadata": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - }, - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/namespace": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves specified workspace clusters workload namespaces", - "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsNamespace", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Workspace workloads spec", - "type": "object", - "properties": { - "filter": { - "description": "Workspace workloads filter", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" } }, - "namespaces": { + "clusterProfileTemplates": { "type": "array", - "uniqueItems": true, "items": { - "type": "string" - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of clusters workload namespaces", - "schema": { - "description": "Workspace clusters workload namespaces summary", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "items": { - "description": "Workspace cluster workload namespaces summary", - "type": "object", - "properties": { - "metadata": { - "description": "Object for which the resource is related", + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", "type": "object", "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] + "cloudType": { + "type": "string" }, "name": { "type": "string" }, - "uid": { - "type": "string" - } - } - }, - "namespaces": { - "type": "array", - "items": { - "description": "Cluster workload namespace summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload metadata", + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", "type": "object", "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" }, - "namespace": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" - } - } - }, - "status": { - "description": "Cluster workload namespace status", - "type": "object", - "properties": { - "phase": { + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } } - } - } - } - } - } - }, - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/pod": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves specified workspace clusters workload pods", - "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsPod", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Workspace workloads spec", - "type": "object", - "properties": { - "filter": { - "description": "Workspace workloads filter", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of clusters workload pods", - "schema": { - "description": "Workspace clusters workload pods summary", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "items": { - "description": "Workspace cluster workload pods summary", - "type": "object", - "properties": { - "metadata": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] }, - "name": { + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", "type": "string" }, - "uid": { - "type": "string" - } - } - }, - "pods": { - "type": "array", - "items": { - "description": "Cluster workload pod summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload pod metadata", + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "type": "array", + "items": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", "type": "object", + "required": [ + "layer", + "name" + ], "properties": { - "associatedRefs": { + "annotations": { + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "type": "string", + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ] + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { "type": "array", "items": { - "description": "Cluster workload ref", + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", "type": "object", "properties": { "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", "type": "string" }, "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } } }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" + "name": { + "description": "pack name", + "type": "string" }, - "entity": { - "description": "Cluster workload ref", - "type": "object", - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" }, - "labels": { + "params": { + "description": "params passed as env variables to be consumed at installation time", "type": "object", "additionalProperties": { "type": "string" } }, - "machineUid": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "nodename": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster workload pod spec", - "type": "object", - "properties": { - "containers": { + "presets": { "type": "array", "items": { - "description": "Cluster workload pod container", + "description": "PackPreset defines the preset pack values", "type": "object", "properties": { - "image": { - "type": "string" + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false }, "name": { - "type": "string" + "type": "string", + "x-omitempty": false }, - "resources": { - "description": "Cluster workload pod container resources", - "type": "object", - "properties": { - "limits": { - "description": "Cluster workload pod container resource", - "type": "object", - "properties": { - "cpu": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "cpuUnit": { - "type": "string" - }, - "memory": { - "type": "integer", - "format": "int64", - "x-omitempty": false - }, - "memoryUnit": { - "type": "string" - } - } - }, - "requests": { - "description": "Cluster workload pod container resource", - "type": "object", - "properties": { - "cpu": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "cpuUnit": { - "type": "string" - }, - "memory": { - "type": "integer", - "format": "int64", - "x-omitempty": false - }, - "memoryUnit": { - "type": "string" - } - } - } - } + "remove": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false } } } }, - "volumes": { - "type": "array", - "items": { - "description": "Cluster workload pod volume", - "type": "object", - "properties": { - "name": { - "type": "string" - } - } - } - } - } - }, - "status": { - "description": "Cluster workload pod status", - "type": "object", - "properties": { - "containers": { + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { "type": "array", "items": { - "description": "Cluster workload pod container status", + "description": "PackSchema defines the schema definition, hints for the pack values", "type": "object", "properties": { - "image": { - "type": "string" + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false + }, + "listOptions": { + "type": "array", + "items": { + "type": "string" + }, + "x-omitempty": false }, "name": { - "type": "string" + "type": "string", + "x-omitempty": false }, - "ready": { + "readonly": { "type": "boolean", "x-omitempty": false }, - "restartCount": { - "type": "integer", - "format": "int32", + "regex": { + "type": "string", "x-omitempty": false }, - "started": { + "required": { "type": "boolean", "x-omitempty": false }, - "state": { - "description": "Cluster workload pod container state", - "type": "object", - "properties": { - "exitCode": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "finishedAt": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "reason": { - "type": "string" - }, - "startedAt": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } + "type": { + "type": "string", + "x-omitempty": false } } } }, - "phase": { + "server": { + "description": "pack registry server or helm repo", "type": "string" }, - "podIp": { + "tag": { + "description": "pack tag", "type": "string" }, - "qosClass": { + "type": { + "description": "type of the pack", + "type": "string", + "enum": [ + "spectro", + "helm", + "manifest" + ] + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", "type": "string" } } } - } - } - } - } - } - }, - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/rolebinding": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves specified workspace clusters workload rolebindings", - "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsRoleBinding", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Workspace workloads spec", - "type": "object", - "properties": { - "filter": { - "description": "Workspace workloads filter", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "type": "integer", + "format": "int32" + } + } } }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of clusters workload rolebindings", - "schema": { - "description": "Workspace clusters workload rbac bindings summary", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "items": { - "description": "Workspace cluster workload rbac bindings summary", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "items": { - "description": "Cluster workload rbac binding summary", + "device": { + "description": "DeviceSpec defines the desired state of Device", + "type": "object", + "properties": { + "archType": { + "description": "Architecture type of the edge host", + "type": "string", + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ] + }, + "cpu": { "type": "object", "properties": { - "metadata": { - "description": "Cluster workload metadata", - "type": "object", - "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", + "cores": { + "description": "number of cpu cores", + "type": "integer", + "format": "int32" + } + } + }, + "disks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "type": "array", + "items": { "type": "object", "properties": { - "kind": { + "fileSystemType": { "type": "string" }, - "name": { - "type": "string" + "freeSpace": { + "type": "integer", + "format": "int32" }, - "uid": { + "mountPoint": { "type": "string" + }, + "totalSpace": { + "type": "integer", + "format": "int32" + }, + "usedSpace": { + "type": "integer", + "format": "int32" } } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { + } + }, + "size": { + "description": "Size in GB", + "type": "integer", + "format": "int32" + }, + "vendor": { + "type": "string" + } + } + } + }, + "gpus": { + "type": "array", + "items": { + "type": "object", + "properties": { + "addresses": { + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + } + } + }, + "memory": { + "type": "object", + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "type": "integer", + "format": "int64" + } + } + }, + "nics": { + "type": "array", + "items": { + "type": "object", + "properties": { + "dns": { + "type": "array", + "items": { "type": "string" } + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" } + } + } + }, + "os": { + "type": "object", + "properties": { + "family": { + "type": "string" }, - "spec": { - "description": "Cluster RBAC binding", + "version": { + "type": "string" + } + } + } + } + }, + "host": { + "description": "EdgeHost is the underlying appliance", + "type": "object", + "required": [ + "hostUid", + "hostAddress" + ], + "properties": { + "disableAutoRegister": { + "description": "Set to true if auto register is disabled for the device", + "type": "boolean", + "x-omitempty": false + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "hostAuthToken": { + "description": "HostAuthToken to authorize auto registration", + "type": "string", + "x-omitempty": false + }, + "hostChecksum": { + "description": "HostChecksum is the checksum provided by the edge host, to be persisted in SaaS", + "type": "string", + "x-omitempty": false + }, + "hostIdentity": { + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { "type": "object", "properties": { - "namespace": { + "name": { + "description": "SSH secret name", "type": "string" }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] + "privateKey": { + "description": "Private Key to access the host", + "type": "string" } } } } - } - }, - "metadata": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" + }, + "hostPairingKey": { + "description": "HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS", + "type": "string", + "format": "password", + "x-omitempty": false + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string" + }, + "macAddress": { + "description": "Mac address of edgehost", + "type": "string", + "x-omitempty": false + }, + "project": { + "description": "Object identity meta", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } } } } - } - } - }, - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" + }, + "properties": { + "description": "Additional properties of edge host", + "properties": { + "networks": { + "type": "array", + "items": { + "description": "Network defines the network configuration for a virtual machine", + "type": "object", + "required": [ + "networkName", + "networkType" + ], + "properties": { + "networkName": { + "description": "NetworkName of the network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "type": "string", + "enum": [ + "default", + "bridge" + ] + } + } + } + }, + "storagePools": { + "type": "array", + "items": { + "description": "StoragePool is the storage pool for the vm image", + "properties": { + "name": { + "type": "string" + } + } + } + } } }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "service": { + "description": "ServiceSpec defines the specification of service registering edge", "type": "object", - "additionalProperties": { - "type": "string" + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } } }, - "name": { - "description": "Name of the resource.", + "type": { + "description": "Deprecated. Cloudtype of the provisioned edge host", + "type": "string", + "enum": [ + "libvirt", + "vsphere", + "edge-native" + ] + }, + "version": { "type": "string" } } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/statefulset": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves specified workspace clusters workload statefulsets", - "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsStatefulSet", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Workspace workloads spec", - "type": "object", - "properties": { - "filter": { - "description": "Workspace workloads filter", + }, + "status": { + "description": "EdgeHostDeviceStatus defines the observed state of EdgeHostDevice", "type": "object", "properties": { - "clusters": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" + "health": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } } }, - "namespaces": { + "inUseClusters": { "type": "array", - "uniqueItems": true, "items": { - "type": "string" - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of clusters workload statefulsets", - "schema": { - "description": "Workspace clusters workload statefulsets summary", - "type": "object", - "properties": { - "clusters": { - "type": "array", - "items": { - "description": "Workspace cluster workload statefulsets summary", - "type": "object", - "properties": { - "metadata": { - "description": "Object for which the resource is related", + "description": "Object identity meta", "type": "object", "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, "name": { "type": "string" }, @@ -90574,533 +84555,255 @@ "type": "string" } } - }, - "statefulSets": { - "type": "array", - "items": { - "description": "Cluster workload statefulset summary", - "type": "object", - "properties": { - "metadata": { - "description": "Cluster workload metadata", + } + }, + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "required": [ + "type", + "status" + ], + "properties": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "manifests": { + "type": "array", + "items": { "type": "object", "properties": { - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "entity": { - "description": "Cluster workload ref", + "condition": { "type": "object", + "required": [ + "type", + "status" + ], "properties": { - "kind": { + "lastProbeTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "lastTransitionTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", "type": "string" }, - "name": { + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", "type": "string" }, - "uid": { + "status": { + "type": "string" + }, + "type": { "type": "string" } } }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "name": { + "type": "string" }, - "namespace": { + "uid": { "type": "string" } } - }, - "status": { - "description": "Cluster workload statefulset status", + } + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "type": "array", + "items": { "type": "object", "properties": { - "replicas": { - "description": "Cluster workload replica status", - "type": "object", - "properties": { - "available": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "ready": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "total": { - "type": "integer", - "format": "int32", - "x-omitempty": false - }, - "updated": { - "type": "integer", - "format": "int32", - "x-omitempty": false + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "type": "array", + "items": { + "type": "object", + "required": [ + "port" + ], + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "type": "integer", + "format": "int32" + }, + "protocol": { + "type": "string" + } } } } } } + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" } } } - } - } - }, - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "profileStatus": { "type": "object", - "additionalProperties": { - "type": "string" + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } } }, - "name": { - "description": "Name of the resource.", + "serviceAuthToken": { "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "ready", + "unpaired", + "in-use" + ] } } } } } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/datasinks/cloudwatch": { - "post": { - "security": [ - { - "ApiKey": [] }, { - "Authorization": [] + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" } ], - "description": "Sync data to cloud watch", - "tags": [ - "v1" - ], - "summary": "sync data to cloud watch", - "operationId": "V1DataSinksCloudWatchSink", - "parameters": [ - { - "description": "Request payload for cloud watch config", - "name": "dataSinkCloudWatchConfig", - "in": "body", - "required": true, + "responses": { + "200": { + "description": "OK", "schema": { - "description": "Data sink cloud watch config", - "type": "object", "properties": { - "payload": { - "description": "List of data sink payload entities", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Data sink payload entity", - "type": "object", - "properties": { - "refUid": { - "description": "RefUid of the data sink payload", - "type": "string" - }, - "timestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } - }, - "additionalProperties": { - "type": "object" - } - } - }, - "spec": { - "description": "Cloud watch config entity", + "aclmeta": { + "description": "Resource access control information (Read-only response data)", "type": "object", "properties": { - "credentials": { - "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", - "type": "object", - "properties": { - "accessKey": { - "description": "AWS account access key", - "type": "string" - }, - "credentialType": { - "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", - "type": "string", - "default": "secret", - "enum": [ - "secret", - "sts" - ] - }, - "partition": { - "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", - "type": "string", - "default": "aws", - "enum": [ - "aws", - "aws-us-gov" - ] - }, - "policyARNs": { - "description": "List of policy ARNs required in case of credentialType sts.", - "type": "array", - "items": { - "type": "string" - } - }, - "secretKey": { - "description": "AWS account secret key", - "type": "string" - }, - "sts": { - "description": "Aws sts credentials", - "type": "object", - "properties": { - "arn": { - "description": "Arn for the aws sts credentials in cloud account", - "type": "string" - }, - "externalId": { - "description": "ExternalId for the aws sts credentials in cloud account", - "type": "string" - } - } - } - } - }, - "group": { - "description": "Name of the group", + "ownerUid": { + "description": "User or service uid which created the resource", "type": "string" }, - "region": { - "description": "Name of the region", + "projectUid": { + "description": "Project's uid if the resource is under a project", "type": "string" }, - "stream": { - "description": "Name of the stream", + "tenantUid": { + "description": "Tenant's uid", "type": "string" } } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/edgehosts": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Create the edge host device", - "operationId": "v1EdgeHostDevicesCreate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Edge host device information", - "type": "object", - "properties": { + }, "metadata": { - "description": "Object identity meta with tags", + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "Edge host device spec", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - }, - "hostPairingKey": { - "type": "string", - "format": "password" - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/edgehosts/metadata": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of edge hosts metadata matching the filter condition", - "operationId": "v1EdgeHostsMetadataQuickFilterGet", - "parameters": [ - { - "enum": [ - "libvirt", - "edge-native", - "vsphere" - ], - "type": "string", - "name": "type", - "in": "query" - }, - { - "enum": [ - "unusedEdgeHosts" - ], - "type": "string", - "name": "quickFilter", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of edge host metadata", - "schema": { - "type": "object", - "properties": { - "edgeHosts": { - "type": "array", - "items": { - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - }, - "edgeHostType": { - "type": "string", - "enum": [ - "libvirt", - "edge-native", - "vsphere" - ] - }, - "healthState": { - "type": "string" - }, - "name": { - "type": "string" - }, - "state": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "/v1/edgehosts/register": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Registers the edge host device", - "operationId": "v1EdgeHostDevicesRegister", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "properties": { - "aclmeta": { - "description": "Resource access control information (Read-only response data)", - "type": "object", - "properties": { - "ownerUid": { - "description": "User or service uid which created the resource", - "type": "string" - }, - "projectUid": { - "description": "Project's uid if the resource is under a project", - "type": "string" - }, - "tenantUid": { - "description": "Tenant's uid", - "type": "string" - } - } - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", + "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", "type": "object", "properties": { "cloudProperties": { @@ -91189,11 +84892,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -91258,11 +84961,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -91407,11 +85110,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -91715,7 +85418,7 @@ } }, "type": { - "description": "Cloudtype of the provisioned edge host", + "description": "Deprecated. Cloudtype of the provisioned edge host", "type": "string", "enum": [ "libvirt", @@ -91936,6 +85639,621 @@ } } } + } + } + } + }, + "/v1/edgehosts/tags": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of edge hosts tags", + "operationId": "v1EdgeHostsTagsGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of edge hosts tags", + "schema": { + "type": "object", + "properties": { + "tags": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + }, + "/v1/edgehosts/tokens": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves a list of edge tokens", + "operationId": "v1EdgeTokensList", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "An array of edge tokens", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of edge tokens", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Edge token information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Edge token specification", + "type": "object", + "properties": { + "defaultProject": { + "description": "Edge token project information", + "type": "object", + "properties": { + "name": { + "description": "Project name", + "type": "string" + }, + "uid": { + "description": "Project uid", + "type": "string" + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "token": { + "description": "Edge token", + "type": "string" + } + } + }, + "status": { + "description": "Edge token status", + "type": "object", + "properties": { + "isActive": { + "description": "Set to 'true', if the token is active", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + } + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create the edge token", + "operationId": "v1EdgeTokensCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Edge token request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Edge token specification", + "type": "object", + "properties": { + "defaultProjectUid": { + "description": "Default project where the edgehost will be placed on the token authorization", + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/edgehosts/tokens/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified edge token", + "operationId": "v1EdgeTokensUidGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Edge token information", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Edge token specification", + "type": "object", + "properties": { + "defaultProject": { + "description": "Edge token project information", + "type": "object", + "properties": { + "name": { + "description": "Project name", + "type": "string" + }, + "uid": { + "description": "Project uid", + "type": "string" + } + } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "token": { + "description": "Edge token", + "type": "string" + } + } + }, + "status": { + "description": "Edge token status", + "type": "object", + "properties": { + "isActive": { + "description": "Set to 'true', if the token is active", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the specified edge token", + "operationId": "v1EdgeTokensUidUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Edge token update request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Edge token spec to be updated", + "properties": { + "defaultProjectUid": { + "description": "Default project where the edgehost will be placed on the token authorization", + "type": "string" + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the specified edge token", + "operationId": "v1EdgeTokensUidDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Edge token uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/edgehosts/tokens/{uid}/state": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Revoke or re-activate the edge token access", + "operationId": "v1EdgeTokensUidState", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Edge token active state", + "properties": { + "isActive": { + "description": "Set to 'true', if the token is active", + "type": "boolean" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Edge token uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/edgehosts/{uid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified edge host device", + "operationId": "v1EdgeHostDevicesUidGet", + "parameters": [ + { + "type": "boolean", + "default": false, + "description": "resolve pack values if set to true", + "name": "resolvePackValues", + "in": "query" }, { "type": "string", @@ -91972,7 +86290,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -91989,7 +86307,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -92001,11 +86319,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -92100,11 +86418,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -92169,11 +86487,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -92318,11 +86636,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -92626,7 +86944,7 @@ } }, "type": { - "description": "Cloudtype of the provisioned edge host", + "description": "Deprecated. Cloudtype of the provisioned edge host", "type": "string", "enum": [ "libvirt", @@ -92849,505 +87167,7 @@ } } } - } - }, - "/v1/edgehosts/tokens": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of edge tokens", - "operationId": "v1EdgeTokensList", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "An array of edge tokens", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "description": "List of edge tokens", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Edge token information", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Edge token specification", - "type": "object", - "properties": { - "defaultProject": { - "description": "Edge token project information", - "type": "object", - "properties": { - "name": { - "description": "Project name", - "type": "string" - }, - "uid": { - "description": "Project uid", - "type": "string" - } - } - }, - "expiry": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "token": { - "description": "Edge token", - "type": "string" - } - } - }, - "status": { - "description": "Edge token status", - "type": "object", - "properties": { - "isActive": { - "description": "Set to 'true', if the token is active", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - } - } - } - } - }, - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Create the edge token", - "operationId": "v1EdgeTokensCreate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Edge token request payload", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Edge token specification", - "type": "object", - "properties": { - "defaultProjectUid": { - "description": "Default project where the edgehost will be placed on the token authorization", - "type": "string" - }, - "expiry": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/edgehosts/tokens/{uid}": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified edge token", - "operationId": "v1EdgeTokensUidGet", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "Edge token information", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Edge token specification", - "type": "object", - "properties": { - "defaultProject": { - "description": "Edge token project information", - "type": "object", - "properties": { - "name": { - "description": "Project name", - "type": "string" - }, - "uid": { - "description": "Project uid", - "type": "string" - } - } - }, - "expiry": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "token": { - "description": "Edge token", - "type": "string" - } - } - }, - "status": { - "description": "Edge token status", - "type": "object", - "properties": { - "isActive": { - "description": "Set to 'true', if the token is active", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - } - }, - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates the specified edge token", - "operationId": "v1EdgeTokensUidUpdate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Edge token update request payload", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Edge token spec to be updated", - "properties": { - "defaultProjectUid": { - "description": "Default project where the edgehost will be placed on the token authorization", - "type": "string" - }, - "expiry": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "delete": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Deletes the specified edge token", - "operationId": "v1EdgeTokensUidDelete", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" - } - } }, - "parameters": [ - { - "type": "string", - "description": "Edge token uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/edgehosts/tokens/{uid}/state": { "put": { "security": [ { @@ -93360,78 +87180,12 @@ "tags": [ "v1" ], - "summary": "Revoke or re-activate the edge token access", - "operationId": "v1EdgeTokensUidState", + "summary": "Updates the specified edge host device", + "operationId": "v1EdgeHostDevicesUidUpdate", "parameters": [ { "name": "body", "in": "body", - "schema": { - "description": "Edge token active state", - "properties": { - "isActive": { - "description": "Set to 'true', if the token is active", - "type": "boolean" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Edge token uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/edgehosts/{uid}": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified edge host device", - "operationId": "v1EdgeHostDevicesUidGet", - "parameters": [ - { - "type": "boolean", - "default": false, - "description": "resolve pack values if set to true", - "name": "resolvePackValues", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", "schema": { "properties": { "aclmeta": { @@ -93457,7 +87211,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -93474,7 +87228,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -93486,11 +87240,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -93585,11 +87339,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -93654,11 +87408,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -93803,11 +87557,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -94111,7 +87865,7 @@ } }, "type": { - "description": "Cloudtype of the provisioned edge host", + "description": "Deprecated. Cloudtype of the provisioned edge host", "type": "string", "enum": [ "libvirt", @@ -94332,9 +88086,297 @@ } } } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deletes the specified edge host device", + "operationId": "v1EdgeHostDevicesUidDelete", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/edgehosts/{uid}/cluster/associate": { + "delete": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Deassociate the clusters to the edge host", + "operationId": "v1EdgeHostDevicesUidClusterDeassociate", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + } + }, + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Associate the clusters to the edge host", + "operationId": "v1EdgeHostDevicesUidClusterAssociate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "clusterUid": { + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/edgehosts/{uid}/health": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Updates the edge host health", + "operationId": "v1EdgeHostDevicesHealthUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string", + "enum": [ + "healthy", + "unhealthy" + ] + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/edgehosts/{uid}/hostCheckSum": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the specified edge host device host check sum", + "operationId": "v1EdgeHostDeviceHostCheckSumUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "hostCheckSum": { + "type": "string" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/edgehosts/{uid}/hostPairingKey": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update the specified edge host device host pairing key", + "operationId": "v1EdgeHostDeviceHostPairingKeyUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "type": "object", + "properties": { + "hostPairingKey": { + "type": "string", + "format": "password" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" } } }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/edgehosts/{uid}/meta": { "put": { "security": [ { @@ -94347,38 +88389,115 @@ "tags": [ "v1" ], - "summary": "Updates the specified edge host device", - "operationId": "v1EdgeHostDevicesUidUpdate", + "summary": "Updates the specified edge host device meta", + "operationId": "v1EdgeHostDevicesUidMetaUpdate", "parameters": [ { "name": "body", "in": "body", "schema": { + "description": "Edge host device uid and name", + "type": "object", "properties": { - "aclmeta": { - "description": "Resource access control information (Read-only response data)", + "metadata": { + "description": "Object identity meta with tags", "type": "object", "properties": { - "ownerUid": { - "description": "User or service uid which created the resource", - "type": "string" + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "projectUid": { - "description": "Project's uid if the resource is under a project", + "name": { "type": "string" }, - "tenantUid": { - "description": "Tenant's uid", + "uid": { "type": "string" } } - }, + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/edgehosts/{uid}/pack/manifests/{manifestUid}": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified edge host's manifest", + "operationId": "v1EdgeHostDevicesUidPackManifestsUidGet", + "parameters": [ + { + "type": "string", + "description": "edge host uid", + "name": "uid", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "manifest uid which is part of the pack ref", + "name": "manifestUid", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "resolve pack manifest values if set to true", + "name": "resolveManifestValues", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Pack manifest content", + "schema": { + "description": "Manifest object", + "properties": { "metadata": { "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -94395,7 +88514,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -94407,932 +88526,41 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { - "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", - "type": "object", + "description": "Manifest spec", "properties": { - "cloudProperties": { - "description": "Additional cloud properties of the edge host (applicable based on the cloud type)", + "published": { + "description": "Published manifest object", "type": "object", "properties": { - "vsphere": { - "description": "Vsphere cloud properties of edge host", - "properties": { - "datacenters": { - "type": "array", - "items": { - "description": "Vsphere datacenter", - "type": "object", - "properties": { - "computeClusters": { - "type": "array", - "items": { - "description": "Vsphere compute cluster", - "type": "object", - "properties": { - "datastores": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "networks": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "resourcePools": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "folders": { - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "type": "string" - } - } - } - } - } + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" } } - }, - "clusterProfileTemplates": { - "type": "array", - "items": { - "description": "ClusterProfileTemplate contains details of a clusterprofile definition", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packServerRefs": { - "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "packServerSecret": { - "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", - "type": "string" - }, - "packs": { - "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" - } - } - } - }, - "profileVersion": { - "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", - "type": "string" - }, - "relatedObject": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "description": "Deprecated. Use profileVersion", - "type": "integer", - "format": "int32" - } - } - } - }, - "device": { - "description": "DeviceSpec defines the desired state of Device", - "type": "object", - "properties": { - "archType": { - "description": "Architecture type of the edge host", - "type": "string", - "default": "amd64", - "enum": [ - "arm64", - "amd64" - ] - }, - "cpu": { - "type": "object", - "properties": { - "cores": { - "description": "number of cpu cores", - "type": "integer", - "format": "int32" - } - } - }, - "disks": { - "type": "array", - "items": { - "type": "object", - "properties": { - "controller": { - "type": "string" - }, - "partitions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "fileSystemType": { - "type": "string" - }, - "freeSpace": { - "type": "integer", - "format": "int32" - }, - "mountPoint": { - "type": "string" - }, - "totalSpace": { - "type": "integer", - "format": "int32" - }, - "usedSpace": { - "type": "integer", - "format": "int32" - } - } - } - }, - "size": { - "description": "Size in GB", - "type": "integer", - "format": "int32" - }, - "vendor": { - "type": "string" - } - } - } - }, - "gpus": { - "type": "array", - "items": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "model": { - "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "vendor": { - "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - } - }, - "memory": { - "type": "object", - "properties": { - "sizeInMB": { - "description": "memory size in bytes", - "type": "integer", - "format": "int64" - } - } - }, - "nics": { - "type": "array", - "items": { - "type": "object", - "properties": { - "dns": { - "type": "array", - "items": { - "type": "string" - } - }, - "gateway": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - }, - "macAddr": { - "type": "string" - }, - "nicName": { - "type": "string" - }, - "subnet": { - "type": "string" - } - } - } - }, - "os": { - "type": "object", - "properties": { - "family": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - }, - "host": { - "description": "EdgeHost is the underlying appliance", - "type": "object", - "required": [ - "hostUid", - "hostAddress" - ], - "properties": { - "disableAutoRegister": { - "description": "Set to true if auto register is disabled for the device", - "type": "boolean", - "x-omitempty": false - }, - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the Host", - "type": "string" - }, - "hostAuthToken": { - "description": "HostAuthToken to authorize auto registration", - "type": "string", - "x-omitempty": false - }, - "hostChecksum": { - "description": "HostChecksum is the checksum provided by the edge host, to be persisted in SaaS", - "type": "string", - "x-omitempty": false - }, - "hostIdentity": { - "properties": { - "caCert": { - "description": "CACert is the client CA certificate", - "type": "string" - }, - "mode": { - "description": "Mode indicates a system or session connection to the host", - "type": "string" - }, - "socketPath": { - "description": "SocketPath is an optional path to the socket on the host, if not using defaults", - "type": "string" - }, - "sshSecret": { - "type": "object", - "properties": { - "name": { - "description": "SSH secret name", - "type": "string" - }, - "privateKey": { - "description": "Private Key to access the host", - "type": "string" - } - } - } - } - }, - "hostPairingKey": { - "description": "HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS", - "type": "string", - "format": "password", - "x-omitempty": false - }, - "hostUid": { - "description": "HostUid is the ID of the EdgeHost", - "type": "string" - }, - "macAddress": { - "description": "Mac address of edgehost", - "type": "string", - "x-omitempty": false - }, - "project": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - }, - "properties": { - "description": "Additional properties of edge host", - "properties": { - "networks": { - "type": "array", - "items": { - "description": "Network defines the network configuration for a virtual machine", - "type": "object", - "required": [ - "networkName", - "networkType" - ], - "properties": { - "networkName": { - "description": "NetworkName of the network where this machine will be connected", - "type": "string" - }, - "networkType": { - "description": "NetworkType specifies the type of network", - "type": "string", - "enum": [ - "default", - "bridge" - ] - } - } - } - }, - "storagePools": { - "type": "array", - "items": { - "description": "StoragePool is the storage pool for the vm image", - "properties": { - "name": { - "type": "string" - } - } - } - } - } - }, - "service": { - "description": "ServiceSpec defines the specification of service registering edge", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - } - }, - "type": { - "description": "Cloudtype of the provisioned edge host", - "type": "string", - "enum": [ - "libvirt", - "vsphere", - "edge-native" - ] - }, - "version": { - "type": "string" - } - } - }, - "status": { - "description": "EdgeHostDeviceStatus defines the observed state of EdgeHostDevice", - "type": "object", - "properties": { - "health": { - "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", - "properties": { - "agentVersion": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "healthy", - "unhealthy" - ] - } - } - }, - "inUseClusters": { - "type": "array", - "items": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "packs": { - "type": "array", - "items": { - "type": "object", - "properties": { - "condition": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "manifests": { - "type": "array", - "items": { - "type": "object", - "properties": { - "condition": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - }, - "profileUid": { - "type": "string" - }, - "services": { - "type": "array", - "items": { - "type": "object", - "properties": { - "host": { - "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", - "type": "string" - }, - "name": { - "description": "name of the loadbalancer service", - "type": "string" - }, - "ports": { - "description": "port this service exposed", - "type": "array", - "items": { - "type": "object", - "required": [ - "port" - ], - "properties": { - "port": { - "description": "The port that will be exposed by this service.", - "type": "integer", - "format": "int32" - }, - "protocol": { - "type": "string" - } - } - } - } - } - } - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - }, - "profileStatus": { - "type": "object", - "properties": { - "hasUserMacros": { - "description": "If it is true then profile pack values has a reference to user defined macros", - "type": "boolean", - "x-omitempty": false - } - } - }, - "serviceAuthToken": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "ready", - "unpaired", - "in-use" - ] } } } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "delete": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Deletes the specified edge host device", - "operationId": "v1EdgeHostDevicesUidDelete", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" } } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] + } }, - "/v1/edgehosts/{uid}/cluster/associate": { - "delete": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Deassociate the clusters to the edge host", - "operationId": "v1EdgeHostDevicesUidClusterDeassociate", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was deleted successfully" - } - } - }, + "/v1/edgehosts/{uid}/packs/status": { "patch": { "security": [ { @@ -95345,8 +88573,8 @@ "tags": [ "v1" ], - "summary": "Associate the clusters to the edge host", - "operationId": "v1EdgeHostDevicesUidClusterAssociate", + "summary": "Patch update specified edge host's packs status", + "operationId": "v1EdgeHostDevicesUidPacksStatusPatch", "parameters": [ { "name": "body", @@ -95354,8 +88582,70 @@ "schema": { "type": "object", "properties": { - "clusterUid": { - "type": "string" + "packs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "ReadyForInstall", + "Installed", + "Ready", + "Error", + "UpgradeAvailable", + "WaitingForOtherLayers" + ] + } + } + }, + "endTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "profileUid": { + "description": "Cluster profile uid", + "type": "string" + }, + "startTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "version": { + "description": "pack version", + "type": "string" + } + } + } } } } @@ -95382,8 +88672,8 @@ } ] }, - "/v1/edgehosts/{uid}/health": { - "patch": { + "/v1/edgehosts/{uid}/profiles": { + "get": { "security": [ { "ApiKey": [] @@ -95395,80 +88685,14 @@ "tags": [ "v1" ], - "summary": "Updates the edge host health", - "operationId": "v1EdgeHostDevicesHealthUpdate", + "summary": "Returns the associated profiles of a specified edge host device", + "operationId": "v1EdgeHostDevicesUidProfilesGet", "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", - "properties": { - "agentVersion": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "healthy", - "unhealthy" - ] - } - } - } - }, { "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/edgehosts/{uid}/hostCheckSum": { - "patch": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Update the specified edge host device host check sum", - "operationId": "v1EdgeHostDeviceHostCheckSumUpdate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "hostCheckSum": { - "type": "string" - } - } - } + "description": "includes pack meta such as schema, presets", + "name": "includePackMeta", + "in": "query" }, { "type": "string", @@ -95478,404 +88702,13 @@ } ], "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/edgehosts/{uid}/hostPairingKey": { - "patch": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Update the specified edge host device host pairing key", - "operationId": "v1EdgeHostDeviceHostPairingKeyUpdate", - "parameters": [ - { - "name": "body", - "in": "body", + "200": { + "description": "OK", "schema": { "type": "object", - "properties": { - "hostPairingKey": { - "type": "string", - "format": "password" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/edgehosts/{uid}/meta": { - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Updates the specified edge host device meta", - "operationId": "v1EdgeHostDevicesUidMetaUpdate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Edge host device uid and name", - "type": "object", - "properties": { - "metadata": { - "description": "Object identity meta with tags", - "type": "object", - "properties": { - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/edgehosts/{uid}/pack/manifests/{manifestUid}": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified edge host's manifest", - "operationId": "v1EdgeHostDevicesUidPackManifestsUidGet", - "parameters": [ - { - "type": "string", - "description": "edge host uid", - "name": "uid", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "manifest uid which is part of the pack ref", - "name": "manifestUid", - "in": "path", - "required": true - }, - { - "type": "boolean", - "default": false, - "description": "resolve pack manifest values if set to true", - "name": "resolveManifestValues", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Pack manifest content", - "schema": { - "description": "Manifest object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Manifest spec", - "properties": { - "published": { - "description": "Published manifest object", - "type": "object", - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "digest": { - "description": "Manifest digest", - "type": "string" - } - } - } - } - } - } - } - } - } - } - }, - "/v1/edgehosts/{uid}/packs/status": { - "patch": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Patch update specified edge host's packs status", - "operationId": "v1EdgeHostDevicesUidPacksStatusPatch", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "type": "object", - "properties": { - "packs": { - "type": "array", - "items": { - "type": "object", - "properties": { - "condition": { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "ReadyForInstall", - "Installed", - "Ready", - "Error", - "UpgradeAvailable", - "WaitingForOtherLayers" - ] - } - } - }, - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "profileUid": { - "description": "Cluster profile uid", - "type": "string" - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "version": { - "description": "pack version", - "type": "string" - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/edgehosts/{uid}/profiles": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the associated profiles of a specified edge host device", - "operationId": "v1EdgeHostDevicesUidProfilesGet", - "parameters": [ - { - "type": "string", - "description": "includes pack meta such as schema, presets", - "name": "includePackMeta", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "object", - "required": [ - "profiles" - ], + "required": [ + "profiles" + ], "properties": { "profiles": { "type": "array", @@ -95888,7 +88721,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -95905,7 +88738,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -95917,11 +88750,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -95947,7 +88780,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -95964,7 +88797,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -95976,11 +88809,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -96054,11 +88887,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -96407,11 +89240,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -96532,6 +89365,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -96856,11 +89709,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -96874,7 +89727,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -96891,7 +89744,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -96903,11 +89756,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -97019,11 +89872,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -97037,7 +89890,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -97054,7 +89907,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -97066,11 +89919,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -97187,11 +90040,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -97205,7 +90058,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -97222,7 +90075,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -97234,11 +90087,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -97407,11 +90260,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -97425,7 +90278,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -97442,7 +90295,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -97454,11 +90307,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -97587,6 +90440,200 @@ } ] }, + "/v1/features": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieves the list of features", + "operationId": "v1FeaturesList", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of features", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Feature response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Feature spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "key": { + "description": "Feature key", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/features/{uid}": { + "put": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Update a feature", + "operationId": "v1FeaturesUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Feature update spec", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Feature update spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Specify the feature uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, "/v1/filters": { "get": { "security": [ @@ -97652,7 +90699,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -97669,7 +90716,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -97681,11 +90728,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -97823,21 +90870,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -97956,7 +91003,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -97973,7 +91020,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -97985,11 +91032,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -98071,21 +91118,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -98248,10 +91295,17 @@ { "type": "boolean", "default": false, - "description": "includeMasterMachines in boolean, group the data point by including master nodes if set to true", + "description": "Deprecated. includeMasterMachines in boolean, group the data point by including control plane nodes if set to true", "name": "includeMasterMachines", "in": "query" }, + { + "type": "boolean", + "default": false, + "description": "includeControlPlaneMachines in boolean, group the data point by including control plane nodes if set to true", + "name": "includeControlPlaneMachines", + "in": "query" + }, { "type": "boolean", "default": false, @@ -98449,10 +91503,17 @@ { "type": "boolean", "default": false, - "description": "includeMasterMachines in boolean, group the data point by including master nodes if set to true", + "description": "Deprecated. includeMasterMachines in boolean, group the data point by including control plane nodes if set to true", "name": "includeMasterMachines", "in": "query" }, + { + "type": "boolean", + "default": false, + "description": "includeControlPlaneMachines in boolean, group the data point by including control plane nodes if set to true", + "name": "includeControlPlaneMachines", + "in": "query" + }, { "type": "boolean", "default": false, @@ -98734,7 +91795,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -98751,7 +91812,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -98763,11 +91824,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -99059,7 +92120,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -99076,7 +92137,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -99088,11 +92149,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -99320,7 +92381,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -99337,7 +92398,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -99349,11 +92410,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -99380,7 +92441,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -99397,7 +92458,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -99409,11 +92470,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -99593,6 +92654,15 @@ "type": "string" } }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, "state": { "type": "string" } @@ -100001,6 +93071,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -100074,11 +93164,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -100092,11 +93182,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -100410,7 +93500,7 @@ "type": "object", "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -100571,6 +93661,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -100644,11 +93754,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -100662,11 +93772,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -100980,7 +94090,7 @@ "type": "object", "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -101084,11 +94194,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -101096,7 +94206,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -101113,7 +94223,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -101125,11 +94235,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -101160,11 +94270,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -101229,11 +94339,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -101378,11 +94488,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -101422,11 +94532,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -101491,11 +94601,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -101640,11 +94750,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -102291,638 +95401,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" - } - } - } - }, - "clusterSettings": { - "type": "object", - "properties": { - "clusterMetaAttribute": { - "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", - "type": "string" - }, - "controlPlaneHealthCheckTimeout": { - "type": "string" - }, - "hostClusterConfig": { - "properties": { - "clusterEndpoint": { - "properties": { - "config": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "type": { - "description": "is enabled as host cluster", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - } - } - }, - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "hostCluster": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "isHostCluster": { - "description": "is enabled as host cluster", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "lifecycleConfig": { - "properties": { - "pause": { - "description": "enable pause life cycle config", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "machineManagementConfig": { - "type": "object", - "properties": { - "osPatchConfig": { - "type": "object", - "properties": { - "onDemandPatchAfter": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchOnBoot": { - "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", - "type": "boolean", - "x-omitempty": false - }, - "rebootIfRequired": { - "description": "Reboot once the OS patch is applied", - "type": "boolean", - "x-omitempty": false - }, - "schedule": { - "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", - "type": "string" - } - } - } - } - }, - "resources": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster Namespace resource defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster namespace spec", - "properties": { - "isRegex": { - "type": "boolean", - "x-omitempty": false - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "resourceAllocation": { - "description": "Cluster namespace resource allocation", - "properties": { - "cpuCores": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memoryMiB": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - } - }, - "rbacs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC role binding defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC spec", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } - } - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "updateWorkerPoolsInParallel": { - "type": "boolean" - } - } - }, - "machineConfig": { - "type": "object", - "required": [ - "flavorConfig" - ], - "properties": { - "azs": { - "description": "for master pool, this will be the failure domains for kcp", - "type": "array", - "items": { - "type": "string" - } - }, - "flavorConfig": { - "required": [ - "name" - ], - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", - "type": "integer", - "format": "int64" - }, - "name": { - "description": "Openstack flavor name", - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine.", - "type": "integer", - "format": "int32" - } - } - } - } - }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "create the OpenStack cloud config for the private gateway", - "operationId": "v1OverlordsUidOpenStackCloudConfigCreate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "properties": { - "clusterConfig": { - "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", - "type": "object", - "properties": { - "bastionDisabled": { - "description": "Create bastion node option we have earlier supported creation of bastion by default", - "type": "boolean" - }, - "dnsNameservers": { - "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", - "type": "array", - "items": { - "type": "string" - } - }, - "domain": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "network": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "nodeCidr": { - "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", - "type": "string" - }, - "project": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "region": { - "type": "string" - }, - "sshKeyName": { - "type": "string" - }, - "subnet": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - } - } - }, - "clusterProfiles": { - "description": "Cluster profiles pack configuration for private gateway cluster", - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", + }, + "variables": { "type": "array", - "uniqueItems": true, "items": { - "description": "Pack values entity to refer the existing pack for the values override", + "description": "Variable with value which will be used within the packs of cluster profile", "type": "object", "required": [ "name" ], "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - }, - "uid": { - "description": "Manifest uid", - "type": "string" - } - } - } - }, "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", + "description": "Variable name", "type": "string" }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "value": { + "description": "Actual value of the variable to be used within the cluster", "type": "string" } } } - }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" } } } @@ -102996,11 +95494,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -103014,11 +95512,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -103335,7 +95833,659 @@ ], "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", + "type": "array", + "items": { + "type": "string" + } + }, + "flavorConfig": { + "required": [ + "name" + ], + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "type": "integer", + "format": "int64" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "type": "integer", + "format": "int32" + } + } + } + } + }, + "size": { + "description": "size of the pool, number of machines", + "type": "integer", + "format": "int32" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "create the OpenStack cloud config for the private gateway", + "operationId": "v1OverlordsUidOpenStackCloudConfigCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "clusterConfig": { + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", + "type": "object", + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "type": "array", + "items": { + "type": "string" + } + }, + "domain": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "network": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", + "type": "string" + }, + "project": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + } + }, + "clusterProfiles": { + "description": "Cluster profiles pack configuration for private gateway cluster", + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + }, + "clusterSettings": { + "type": "object", + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + } + }, + "machineConfig": { + "type": "object", + "required": [ + "flavorConfig" + ], + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -103447,11 +96597,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -103459,7 +96609,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -103476,7 +96626,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -103488,11 +96638,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -103523,11 +96673,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -103592,11 +96742,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -103741,11 +96891,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -103785,11 +96935,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -103854,11 +97004,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -104003,11 +97153,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -104681,6 +97831,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -104754,11 +97924,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -104772,11 +97942,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -105308,6 +98478,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -105381,11 +98571,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -105399,11 +98589,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -105791,11 +98981,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -105803,7 +98993,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -105820,7 +99010,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -105832,11 +99022,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -105867,11 +99057,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -105936,11 +99126,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -106085,11 +99275,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -106129,11 +99319,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -106198,11 +99388,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -106347,11 +99537,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -106493,7 +99683,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -106510,7 +99700,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -106522,11 +99712,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -106648,7 +99838,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -106665,7 +99855,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -106677,11 +99867,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -106813,7 +100003,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -106830,7 +100020,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -106842,11 +100032,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -107173,7 +100363,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -107190,7 +100380,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -107202,11 +100392,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -107233,7 +100423,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -107250,7 +100440,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -107262,11 +100452,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -107446,6 +100636,15 @@ "type": "string" } }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, "state": { "type": "string" } @@ -107532,21 +100731,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -107703,11 +100902,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack api version", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack kind", "type": "string" }, "metadata": { @@ -107715,7 +100914,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -107732,7 +100931,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -107744,11 +100943,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -107822,11 +101021,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -108486,11 +101685,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack api version", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack kind", "type": "string" }, "metadata": { @@ -108498,7 +101697,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -108515,7 +101714,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -108527,11 +101726,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -110070,7 +103269,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -110087,7 +103286,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -110099,11 +103298,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -110260,7 +103459,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -110277,7 +103476,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -110289,11 +103488,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -110483,7 +103682,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -110500,7 +103699,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -110512,11 +103711,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -111355,7 +104554,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -111372,7 +104571,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -111384,11 +104583,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -111857,11 +105056,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -111869,7 +105066,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -111886,7 +105083,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -111898,11 +105095,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -112071,7 +105268,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -112088,7 +105285,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -112100,11 +105297,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -112335,7 +105532,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -112352,7 +105549,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -112364,11 +105561,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -112612,11 +105809,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -112624,7 +105819,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -112641,7 +105836,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -112653,11 +105848,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -112793,11 +105988,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -112805,7 +105998,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -112822,7 +106015,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -112834,11 +106027,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -113230,7 +106423,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -113247,7 +106440,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -113259,11 +106452,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -113553,7 +106746,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -113570,7 +106763,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -113582,11 +106775,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -114001,7 +107194,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -114018,7 +107211,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -114030,11 +107223,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -114249,7 +107442,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -114266,7 +107459,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -114278,11 +107471,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -114408,7 +107601,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -114425,7 +107618,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -114437,11 +107630,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -114735,7 +107928,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -114752,7 +107945,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -114764,11 +107957,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -114922,7 +108115,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -114939,7 +108132,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -114951,11 +108144,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -115318,11 +108511,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -115330,7 +108521,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -115347,7 +108538,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -115359,11 +108550,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -115534,11 +108725,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -115546,7 +108735,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -115563,7 +108752,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -115575,11 +108764,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -115818,7 +109007,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -115835,7 +109024,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -115847,11 +109036,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -116096,11 +109285,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -116108,7 +109295,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -116125,7 +109312,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -116137,11 +109324,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -116277,11 +109464,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -116289,7 +109474,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -116306,7 +109491,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -116318,11 +109503,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -116820,7 +110005,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -116837,7 +110022,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -116849,11 +110034,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -116956,7 +110141,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -116973,7 +110158,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -116985,11 +110170,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -117092,7 +110277,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -117109,7 +110294,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -117121,11 +110306,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -117199,7 +110384,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -117216,7 +110401,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -117228,11 +110413,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -117371,8870 +110556,65 @@ } } }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/services/{serviceName}/version": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns a latest version for a given service name", - "operationId": "v1ServiceVersionGet", - "parameters": [ - { - "enum": [ - "ally", - "jet", - "palette", - "ambit", - "ally-lite", - "palette-lite", - "crony", - "tick", - "edge", - "lodge", - "level", - "edgeconfig", - "firth", - "stylus" - ], - "type": "string", - "description": "service name", - "name": "serviceName", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "spectro cluster uid", - "name": "clusterUid", - "in": "query" - }, - { - "type": "string", - "description": "edge host uid", - "name": "edgeHostUid", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "Service version information", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "latestVersion": { - "type": "object", - "properties": { - "content": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "repoName": { - "type": "string" - }, - "sha": { - "type": "string" - } - } - }, - "name": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/v1/services/{serviceName}/versions/{version}/manifest": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns a service manifest for a given service name and version", - "operationId": "v1ServiceManifestGet", - "parameters": [ - { - "enum": [ - "ally", - "jet", - "palette", - "ambit", - "ally-lite", - "palette-lite", - "crony", - "tick", - "edge", - "lodge", - "level", - "edgeconfig", - "firth", - "stylus" - ], - "type": "string", - "description": "service name", - "name": "serviceName", - "in": "path", - "required": true - }, - { - "type": "string", - "description": "service version", - "name": "version", - "in": "path", - "required": true - }, - { - "enum": [ - "apply", - "delete", - "resources" - ], - "type": "string", - "description": "action type", - "name": "action", - "in": "query", - "required": true - }, - { - "type": "string", - "description": "resource file name", - "name": "resourceFilename", - "in": "query" - }, - { - "type": "string", - "description": "spectro cluster uid", - "name": "clusterUid", - "in": "query" - }, - { - "type": "string", - "description": "edge host uid", - "name": "edgeHostUid", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "Service manifest information", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "manifests": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "content": { - "type": "string" - }, - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "repoName": { - "type": "string" - }, - "sha": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "/v1/spectroclusters/agents/{messageKey}/notify": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "operationId": "V1SpectroClustersAgentsNotify", - "parameters": [ - { - "type": "string", - "name": "messageKey", - "in": "path", - "required": true - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "SpectroClusters for which agents has to be notified", - "properties": { - "clusterUids": { - "type": "array", - "items": { - "type": "string" - } - }, - "notifyAllClusters": { - "type": "boolean" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/spectroclusters/aks": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Creates an AKS cluster", - "operationId": "v1SpectroClustersAksCreate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Azure cluster request payload for create and update", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "required": [ - "cloudType", - "cloudAccountUid", - "cloudConfig" - ], - "properties": { - "cloudAccountUid": { - "description": "Cloud account uid to be used for cluster provisioning", - "type": "string" - }, - "cloudConfig": { - "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "subscriptionId", - "location", - "sshKey" - ], - "properties": { - "aadProfile": { - "description": "AADProfile - AAD integration is managed by AKS.", - "type": "object", - "required": [ - "managed", - "adminGroupObjectIDs" - ], - "properties": { - "adminGroupObjectIDs": { - "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", - "type": "array", - "items": { - "type": "string" - } - }, - "managed": { - "description": "Managed - Whether to enable managed AAD.", - "type": "boolean", - "x-omitempty": false - } - } - }, - "apiServerAccessProfile": { - "description": "APIServerAccessProfile - access profile for AKS API server.", - "type": "object", - "properties": { - "authorizedIPRanges": { - "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", - "type": "array", - "items": { - "type": "string", - "default": "" - } - }, - "enablePrivateCluster": { - "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", - "type": "boolean" - }, - "enablePrivateClusterPublicFQDN": { - "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", - "type": "boolean" - }, - "privateDNSZone": { - "description": "PrivateDNSZone - Private dns zone mode for private cluster.", - "type": "string" - } - } - }, - "containerName": { - "type": "string" - }, - "controlPlaneSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - }, - "enablePrivateCluster": { - "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", - "type": "boolean" - }, - "infraLBConfig": { - "type": "object", - "properties": { - "apiServerLB": { - "description": "LoadBalancerSpec defines an Azure load balancer.", - "type": "object", - "properties": { - "apiServerLBStaticIP": { - "type": "string" - }, - "ipAllocationMethod": { - "type": "string", - "default": "Dynamic", - "enum": [ - "Static", - "Dynamic" - ] - }, - "privateDNSName": { - "type": "string" - }, - "type": { - "description": "Load Balancer type", - "type": "string", - "default": "Public", - "enum": [ - "Internal", - "Public" - ] - } - } - } - } - }, - "location": { - "description": "Location is the Azure datacenter location", - "type": "string" - }, - "resourceGroup": { - "type": "string" - }, - "sshKey": { - "type": "string" - }, - "storageAccountName": { - "type": "string" - }, - "subscriptionId": { - "description": "Subscription ID is unique identifier for the subscription used to access Azure services", - "type": "string" - }, - "vnetCidrBlock": { - "type": "string" - }, - "vnetName": { - "description": "VNETName is the virtual network in which the cluster is to be provisioned.", - "type": "string" - }, - "vnetResourceGroup": { - "type": "string" - }, - "workerSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "clusterMetaAttribute": { - "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", - "type": "string" - }, - "controlPlaneHealthCheckTimeout": { - "type": "string" - }, - "hostClusterConfig": { - "properties": { - "clusterEndpoint": { - "properties": { - "config": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "type": { - "description": "is enabled as host cluster", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - } - } - }, - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "hostCluster": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "isHostCluster": { - "description": "is enabled as host cluster", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "lifecycleConfig": { - "properties": { - "pause": { - "description": "enable pause life cycle config", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "machineManagementConfig": { - "type": "object", - "properties": { - "osPatchConfig": { - "type": "object", - "properties": { - "onDemandPatchAfter": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchOnBoot": { - "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", - "type": "boolean", - "x-omitempty": false - }, - "rebootIfRequired": { - "description": "Reboot once the OS patch is applied", - "type": "boolean", - "x-omitempty": false - }, - "schedule": { - "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", - "type": "string" - } - } - } - } - }, - "resources": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster Namespace resource defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster namespace spec", - "properties": { - "isRegex": { - "type": "boolean", - "x-omitempty": false - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "resourceAllocation": { - "description": "Cluster namespace resource allocation", - "properties": { - "cpuCores": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memoryMiB": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - } - }, - "rbacs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC role binding defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC spec", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } - } - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "updateWorkerPoolsInParallel": { - "type": "boolean" - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "properties": { - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "instanceType": { - "description": "Instance type stands for VMSize in Azure", - "type": "string" - }, - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean" - }, - "osDisk": { - "type": "object", - "properties": { - "diskSizeGB": { - "type": "integer", - "format": "int32" - }, - "managedDisk": { - "type": "object", - "properties": { - "storageAccountType": { - "type": "string" - } - } - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - } - } - }, - "managedPoolConfig": { - "type": "object", - "properties": { - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean", - "x-omitempty": false - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - }, - "policies": { - "description": "Cluster policies", - "type": "object", - "properties": { - "backupPolicy": { - "description": "Cluster backup config", - "properties": { - "backupLocationName": { - "type": "string" - }, - "backupLocationUid": { - "type": "string" - }, - "backupName": { - "type": "string" - }, - "backupPrefix": { - "type": "string" - }, - "durationInHours": { - "type": "number", - "format": "int64" - }, - "includeAllDisks": { - "type": "boolean" - }, - "includeClusterResources": { - "type": "boolean" - }, - "locationType": { - "type": "string" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "scanPolicy": { - "description": "Cluster compliance scan schedule configuration", - "properties": { - "kubeBench": { - "description": "Cluster compliance scan schedule config for kube bench driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "kubeHunter": { - "description": "Cluster compliance scan schedule config for kube hunter driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "sonobuoy": { - "description": "Cluster compliance scan schedule config for sonobuoy driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "profiles": { - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack values entity to refer the existing pack for the values override", - "type": "object", - "required": [ - "name" - ], - "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - }, - "uid": { - "description": "Manifest uid", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/spectroclusters/aks/rate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Get AKS cluster estimated rate information", - "operationId": "v1SpectroClustersAksRate", - "parameters": [ - { - "enum": [ - "hourly", - "monthly", - "yearly" - ], - "type": "string", - "default": "hourly", - "name": "periodType", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro Azure cluster request payload for estimating rate", - "type": "object", - "properties": { - "cloudConfig": { - "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "subscriptionId", - "location", - "sshKey" - ], - "properties": { - "aadProfile": { - "description": "AADProfile - AAD integration is managed by AKS.", - "type": "object", - "required": [ - "managed", - "adminGroupObjectIDs" - ], - "properties": { - "adminGroupObjectIDs": { - "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", - "type": "array", - "items": { - "type": "string" - } - }, - "managed": { - "description": "Managed - Whether to enable managed AAD.", - "type": "boolean", - "x-omitempty": false - } - } - }, - "apiServerAccessProfile": { - "description": "APIServerAccessProfile - access profile for AKS API server.", - "type": "object", - "properties": { - "authorizedIPRanges": { - "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", - "type": "array", - "items": { - "type": "string", - "default": "" - } - }, - "enablePrivateCluster": { - "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", - "type": "boolean" - }, - "enablePrivateClusterPublicFQDN": { - "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", - "type": "boolean" - }, - "privateDNSZone": { - "description": "PrivateDNSZone - Private dns zone mode for private cluster.", - "type": "string" - } - } - }, - "containerName": { - "type": "string" - }, - "controlPlaneSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - }, - "enablePrivateCluster": { - "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", - "type": "boolean" - }, - "infraLBConfig": { - "type": "object", - "properties": { - "apiServerLB": { - "description": "LoadBalancerSpec defines an Azure load balancer.", - "type": "object", - "properties": { - "apiServerLBStaticIP": { - "type": "string" - }, - "ipAllocationMethod": { - "type": "string", - "default": "Dynamic", - "enum": [ - "Static", - "Dynamic" - ] - }, - "privateDNSName": { - "type": "string" - }, - "type": { - "description": "Load Balancer type", - "type": "string", - "default": "Public", - "enum": [ - "Internal", - "Public" - ] - } - } - } - } - }, - "location": { - "description": "Location is the Azure datacenter location", - "type": "string" - }, - "resourceGroup": { - "type": "string" - }, - "sshKey": { - "type": "string" - }, - "storageAccountName": { - "type": "string" - }, - "subscriptionId": { - "description": "Subscription ID is unique identifier for the subscription used to access Azure services", - "type": "string" - }, - "vnetCidrBlock": { - "type": "string" - }, - "vnetName": { - "description": "VNETName is the virtual network in which the cluster is to be provisioned.", - "type": "string" - }, - "vnetResourceGroup": { - "type": "string" - }, - "workerSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "properties": { - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "instanceType": { - "description": "Instance type stands for VMSize in Azure", - "type": "string" - }, - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean" - }, - "osDisk": { - "type": "object", - "properties": { - "diskSizeGB": { - "type": "integer", - "format": "int32" - }, - "managedDisk": { - "type": "object", - "properties": { - "storageAccountType": { - "type": "string" - } - } - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - } - } - }, - "managedPoolConfig": { - "type": "object", - "properties": { - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean", - "x-omitempty": false - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Aks Cluster estimated rate response", - "schema": { - "description": "Cluster estimated rate information", - "type": "object", - "properties": { - "machinePools": { - "type": "array", - "items": { - "description": "Machine pool estimated rate information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nodesCount": { - "type": "integer", - "format": "int32" - }, - "rate": { - "description": "Cloud estimated rate information", - "type": "object", - "properties": { - "compute": { - "description": "Compute estimated rate information", - "type": "object", - "properties": { - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "type": { - "type": "string" - } - } - }, - "storage": { - "type": "array", - "items": { - "description": "Storage estimated rate information", - "type": "object", - "properties": { - "iops": { - "type": "number", - "format": "float64" - }, - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "sizeGB": { - "type": "number", - "format": "float64" - }, - "throughput": { - "type": "number", - "format": "float64" - }, - "type": { - "type": "string" - } - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - }, - "name": { - "type": "string" - }, - "rate": { - "description": "Cluster total estimated rate information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "resourceMetadata": { - "description": "Cloud resource metadata", - "type": "object", - "properties": { - "instanceTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud Instance type details", - "type": "object", - "properties": { - "category": { - "description": "Category of instance type", - "type": "string", - "x-go-name": "Category" - }, - "cost": { - "description": "Instance cost entity", - "type": "object", - "properties": { - "price": { - "description": "Array of cloud instance price", - "type": "array", - "items": { - "description": "Cloud instance price", - "type": "object", - "properties": { - "onDemand": { - "description": "OnDemand price of instance", - "type": "number", - "format": "double" - }, - "os": { - "description": "Os associated with instance price. Allowed values - [linux, windows]", - "type": "string", - "enum": [ - "linux", - "windows" - ] - }, - "spot": { - "description": "Spot price of instance", - "type": "number", - "format": "double" - } - } - } - } - } - }, - "cpu": { - "description": "Cpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Cpu" - }, - "gpu": { - "description": "Gpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Gpu" - }, - "memory": { - "description": "Memory of instance type", - "type": "number", - "format": "double", - "x-go-name": "Memory" - }, - "nonSupportedZones": { - "description": "Non supported zones of the instance in a particular region", - "type": "array", - "items": { - "type": "string" - } - }, - "price": { - "description": "Price of instance type", - "type": "number", - "format": "double", - "x-go-name": "Price" - }, - "supportedArchitectures": { - "description": "Supported architecture of the instance", - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "description": "Type of instance type", - "type": "string", - "x-go-name": "Type" - } - } - } - }, - "storageTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud cloud Storage type details", - "type": "object", - "properties": { - "cost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "iopsCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "kind": { - "description": "kind of storage type", - "type": "string" - }, - "name": { - "description": "Name of the storage type", - "type": "string" - }, - "throughputCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - }, - "/v1/spectroclusters/aks/validate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Validates AKS cluster create operation", - "operationId": "v1SpectroClustersAksValidate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Azure cluster request payload for create and update", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "required": [ - "cloudType", - "cloudAccountUid", - "cloudConfig" - ], - "properties": { - "cloudAccountUid": { - "description": "Cloud account uid to be used for cluster provisioning", - "type": "string" - }, - "cloudConfig": { - "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "subscriptionId", - "location", - "sshKey" - ], - "properties": { - "aadProfile": { - "description": "AADProfile - AAD integration is managed by AKS.", - "type": "object", - "required": [ - "managed", - "adminGroupObjectIDs" - ], - "properties": { - "adminGroupObjectIDs": { - "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", - "type": "array", - "items": { - "type": "string" - } - }, - "managed": { - "description": "Managed - Whether to enable managed AAD.", - "type": "boolean", - "x-omitempty": false - } - } - }, - "apiServerAccessProfile": { - "description": "APIServerAccessProfile - access profile for AKS API server.", - "type": "object", - "properties": { - "authorizedIPRanges": { - "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", - "type": "array", - "items": { - "type": "string", - "default": "" - } - }, - "enablePrivateCluster": { - "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", - "type": "boolean" - }, - "enablePrivateClusterPublicFQDN": { - "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", - "type": "boolean" - }, - "privateDNSZone": { - "description": "PrivateDNSZone - Private dns zone mode for private cluster.", - "type": "string" - } - } - }, - "containerName": { - "type": "string" - }, - "controlPlaneSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - }, - "enablePrivateCluster": { - "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", - "type": "boolean" - }, - "infraLBConfig": { - "type": "object", - "properties": { - "apiServerLB": { - "description": "LoadBalancerSpec defines an Azure load balancer.", - "type": "object", - "properties": { - "apiServerLBStaticIP": { - "type": "string" - }, - "ipAllocationMethod": { - "type": "string", - "default": "Dynamic", - "enum": [ - "Static", - "Dynamic" - ] - }, - "privateDNSName": { - "type": "string" - }, - "type": { - "description": "Load Balancer type", - "type": "string", - "default": "Public", - "enum": [ - "Internal", - "Public" - ] - } - } - } - } - }, - "location": { - "description": "Location is the Azure datacenter location", - "type": "string" - }, - "resourceGroup": { - "type": "string" - }, - "sshKey": { - "type": "string" - }, - "storageAccountName": { - "type": "string" - }, - "subscriptionId": { - "description": "Subscription ID is unique identifier for the subscription used to access Azure services", - "type": "string" - }, - "vnetCidrBlock": { - "type": "string" - }, - "vnetName": { - "description": "VNETName is the virtual network in which the cluster is to be provisioned.", - "type": "string" - }, - "vnetResourceGroup": { - "type": "string" - }, - "workerSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "clusterMetaAttribute": { - "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", - "type": "string" - }, - "controlPlaneHealthCheckTimeout": { - "type": "string" - }, - "hostClusterConfig": { - "properties": { - "clusterEndpoint": { - "properties": { - "config": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "type": { - "description": "is enabled as host cluster", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - } - } - }, - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "hostCluster": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "isHostCluster": { - "description": "is enabled as host cluster", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "lifecycleConfig": { - "properties": { - "pause": { - "description": "enable pause life cycle config", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "machineManagementConfig": { - "type": "object", - "properties": { - "osPatchConfig": { - "type": "object", - "properties": { - "onDemandPatchAfter": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchOnBoot": { - "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", - "type": "boolean", - "x-omitempty": false - }, - "rebootIfRequired": { - "description": "Reboot once the OS patch is applied", - "type": "boolean", - "x-omitempty": false - }, - "schedule": { - "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", - "type": "string" - } - } - } - } - }, - "resources": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster Namespace resource defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster namespace spec", - "properties": { - "isRegex": { - "type": "boolean", - "x-omitempty": false - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "resourceAllocation": { - "description": "Cluster namespace resource allocation", - "properties": { - "cpuCores": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memoryMiB": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - } - }, - "rbacs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC role binding defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC spec", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } - } - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "updateWorkerPoolsInParallel": { - "type": "boolean" - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "properties": { - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "instanceType": { - "description": "Instance type stands for VMSize in Azure", - "type": "string" - }, - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean" - }, - "osDisk": { - "type": "object", - "properties": { - "diskSizeGB": { - "type": "integer", - "format": "int32" - }, - "managedDisk": { - "type": "object", - "properties": { - "storageAccountType": { - "type": "string" - } - } - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - } - } - }, - "managedPoolConfig": { - "type": "object", - "properties": { - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean", - "x-omitempty": false - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - }, - "policies": { - "description": "Cluster policies", - "type": "object", - "properties": { - "backupPolicy": { - "description": "Cluster backup config", - "properties": { - "backupLocationName": { - "type": "string" - }, - "backupLocationUid": { - "type": "string" - }, - "backupName": { - "type": "string" - }, - "backupPrefix": { - "type": "string" - }, - "durationInHours": { - "type": "number", - "format": "int64" - }, - "includeAllDisks": { - "type": "boolean" - }, - "includeClusterResources": { - "type": "boolean" - }, - "locationType": { - "type": "string" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "scanPolicy": { - "description": "Cluster compliance scan schedule configuration", - "properties": { - "kubeBench": { - "description": "Cluster compliance scan schedule config for kube bench driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "kubeHunter": { - "description": "Cluster compliance scan schedule config for kube hunter driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "sonobuoy": { - "description": "Cluster compliance scan schedule config for sonobuoy driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "profiles": { - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack values entity to refer the existing pack for the values override", - "type": "object", - "required": [ - "name" - ], - "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - }, - "uid": { - "description": "Manifest uid", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Aks Cluster validation response", - "schema": { - "description": "Cluster validator response", - "type": "object", - "properties": { - "machinePools": { - "description": "Constraint validator response", - "type": "object", - "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - } - } - } - } - } - }, - "profiles": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster profile validator response", - "type": "object", - "properties": { - "packs": { - "description": "Constraint validator response", - "type": "object", - "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - } - } - } - } - } - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "/v1/spectroclusters/aws": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Creates an AWS cluster", - "operationId": "v1SpectroClustersAwsCreate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "AWS cluster request payload for create and update", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "required": [ - "cloudType", - "cloudAccountUid", - "cloudConfig" - ], - "properties": { - "cloudAccountUid": { - "description": "Cloud account uid to be used for cluster provisioning", - "type": "string" - }, - "cloudConfig": { - "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "region" - ], - "properties": { - "bastionDisabled": { - "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", - "type": "boolean" - }, - "controlPlaneLoadBalancer": { - "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", - "type": "string" - }, - "region": { - "type": "string" - }, - "sshKeyName": { - "type": "string" - }, - "vpcId": { - "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", - "type": "string" - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "clusterMetaAttribute": { - "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", - "type": "string" - }, - "controlPlaneHealthCheckTimeout": { - "type": "string" - }, - "hostClusterConfig": { - "properties": { - "clusterEndpoint": { - "properties": { - "config": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "type": { - "description": "is enabled as host cluster", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - } - } - }, - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "hostCluster": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "isHostCluster": { - "description": "is enabled as host cluster", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "lifecycleConfig": { - "properties": { - "pause": { - "description": "enable pause life cycle config", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "machineManagementConfig": { - "type": "object", - "properties": { - "osPatchConfig": { - "type": "object", - "properties": { - "onDemandPatchAfter": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchOnBoot": { - "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", - "type": "boolean", - "x-omitempty": false - }, - "rebootIfRequired": { - "description": "Reboot once the OS patch is applied", - "type": "boolean", - "x-omitempty": false - }, - "schedule": { - "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", - "type": "string" - } - } - } - } - }, - "resources": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster Namespace resource defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster namespace spec", - "properties": { - "isRegex": { - "type": "boolean", - "x-omitempty": false - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "resourceAllocation": { - "description": "Cluster namespace resource allocation", - "properties": { - "cpuCores": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memoryMiB": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - } - }, - "rbacs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC role binding defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC spec", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } - } - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "updateWorkerPoolsInParallel": { - "type": "boolean" - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "required": [ - "instanceType" - ], - "properties": { - "additionalSecurityGroups": { - "description": "Additional Security groups", - "type": "array", - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", - "type": "object", - "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - } - }, - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "capacityType": { - "description": "EC2 instance capacity type", - "type": "string", - "default": "on-demand", - "enum": [ - "on-demand", - "spot" - ] - }, - "instanceType": { - "description": "instance type", - "type": "string" - }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64", - "maximum": 2000, - "minimum": 1 - }, - "spotMarketOptions": { - "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", - "type": "object", - "properties": { - "maxPrice": { - "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", - "type": "string" - } - } - }, - "subnets": { - "type": "array", - "items": { - "properties": { - "az": { - "type": "string" - }, - "id": { - "type": "string" - } - } - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - }, - "policies": { - "description": "Cluster policies", - "type": "object", - "properties": { - "backupPolicy": { - "description": "Cluster backup config", - "properties": { - "backupLocationName": { - "type": "string" - }, - "backupLocationUid": { - "type": "string" - }, - "backupName": { - "type": "string" - }, - "backupPrefix": { - "type": "string" - }, - "durationInHours": { - "type": "number", - "format": "int64" - }, - "includeAllDisks": { - "type": "boolean" - }, - "includeClusterResources": { - "type": "boolean" - }, - "locationType": { - "type": "string" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "scanPolicy": { - "description": "Cluster compliance scan schedule configuration", - "properties": { - "kubeBench": { - "description": "Cluster compliance scan schedule config for kube bench driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "kubeHunter": { - "description": "Cluster compliance scan schedule config for kube hunter driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "sonobuoy": { - "description": "Cluster compliance scan schedule config for sonobuoy driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "profiles": { - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack values entity to refer the existing pack for the values override", - "type": "object", - "required": [ - "name" - ], - "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - }, - "uid": { - "description": "Manifest uid", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/spectroclusters/aws/import": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Imports an AWS cluster", - "operationId": "v1SpectroClustersAwsImport", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro AWS cluster import request payload", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "clusterConfig": { - "type": "object", - "properties": { - "importMode": { - "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", - "type": "string", - "enum": [ - "read-only" - ] - }, - "proxy": { - "description": "cluster proxy config spec", - "type": "object", - "properties": { - "caContainerMountPath": { - "description": "Location to mount Proxy CA cert inside container", - "type": "string" - }, - "caHostPath": { - "description": "Location for Proxy CA cert on host nodes", - "type": "string" - }, - "httpProxy": { - "description": "URL for HTTP requests unless overridden by NoProxy", - "type": "string" - }, - "httpsProxy": { - "description": "HTTPS requests unless overridden by NoProxy", - "type": "string" - }, - "noProxy": { - "description": "NoProxy represents the NO_PROXY or no_proxy environment", - "type": "string" - } - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/spectroclusters/aws/rate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Get AWS cluster estimated rate information", - "operationId": "v1SpectroClustersAwsRate", - "parameters": [ - { - "enum": [ - "hourly", - "monthly", - "yearly" - ], - "type": "string", - "default": "hourly", - "name": "periodType", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro AWS cluster request payload for estimating rate", - "type": "object", - "properties": { - "cloudConfig": { - "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "region" - ], - "properties": { - "bastionDisabled": { - "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", - "type": "boolean" - }, - "controlPlaneLoadBalancer": { - "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", - "type": "string" - }, - "region": { - "type": "string" - }, - "sshKeyName": { - "type": "string" - }, - "vpcId": { - "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", - "type": "string" - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "required": [ - "instanceType" - ], - "properties": { - "additionalSecurityGroups": { - "description": "Additional Security groups", - "type": "array", - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", - "type": "object", - "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - } - }, - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "capacityType": { - "description": "EC2 instance capacity type", - "type": "string", - "default": "on-demand", - "enum": [ - "on-demand", - "spot" - ] - }, - "instanceType": { - "description": "instance type", - "type": "string" - }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64", - "maximum": 2000, - "minimum": 1 - }, - "spotMarketOptions": { - "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", - "type": "object", - "properties": { - "maxPrice": { - "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", - "type": "string" - } - } - }, - "subnets": { - "type": "array", - "items": { - "properties": { - "az": { - "type": "string" - }, - "id": { - "type": "string" - } - } - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Aws Cluster estimated rate response", - "schema": { - "description": "Cluster estimated rate information", - "type": "object", - "properties": { - "machinePools": { - "type": "array", - "items": { - "description": "Machine pool estimated rate information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nodesCount": { - "type": "integer", - "format": "int32" - }, - "rate": { - "description": "Cloud estimated rate information", - "type": "object", - "properties": { - "compute": { - "description": "Compute estimated rate information", - "type": "object", - "properties": { - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "type": { - "type": "string" - } - } - }, - "storage": { - "type": "array", - "items": { - "description": "Storage estimated rate information", - "type": "object", - "properties": { - "iops": { - "type": "number", - "format": "float64" - }, - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "sizeGB": { - "type": "number", - "format": "float64" - }, - "throughput": { - "type": "number", - "format": "float64" - }, - "type": { - "type": "string" - } - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - }, - "name": { - "type": "string" - }, - "rate": { - "description": "Cluster total estimated rate information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "resourceMetadata": { - "description": "Cloud resource metadata", - "type": "object", - "properties": { - "instanceTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud Instance type details", - "type": "object", - "properties": { - "category": { - "description": "Category of instance type", - "type": "string", - "x-go-name": "Category" - }, - "cost": { - "description": "Instance cost entity", - "type": "object", - "properties": { - "price": { - "description": "Array of cloud instance price", - "type": "array", - "items": { - "description": "Cloud instance price", - "type": "object", - "properties": { - "onDemand": { - "description": "OnDemand price of instance", - "type": "number", - "format": "double" - }, - "os": { - "description": "Os associated with instance price. Allowed values - [linux, windows]", - "type": "string", - "enum": [ - "linux", - "windows" - ] - }, - "spot": { - "description": "Spot price of instance", - "type": "number", - "format": "double" - } - } - } - } - } - }, - "cpu": { - "description": "Cpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Cpu" - }, - "gpu": { - "description": "Gpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Gpu" - }, - "memory": { - "description": "Memory of instance type", - "type": "number", - "format": "double", - "x-go-name": "Memory" - }, - "nonSupportedZones": { - "description": "Non supported zones of the instance in a particular region", - "type": "array", - "items": { - "type": "string" - } - }, - "price": { - "description": "Price of instance type", - "type": "number", - "format": "double", - "x-go-name": "Price" - }, - "supportedArchitectures": { - "description": "Supported architecture of the instance", - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "description": "Type of instance type", - "type": "string", - "x-go-name": "Type" - } - } - } - }, - "storageTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud cloud Storage type details", - "type": "object", - "properties": { - "cost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "iopsCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "kind": { - "description": "kind of storage type", - "type": "string" - }, - "name": { - "description": "Name of the storage type", - "type": "string" - }, - "throughputCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - }, - "/v1/spectroclusters/aws/validate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Validates AWS cluster create operation", - "operationId": "v1SpectroClustersAwsValidate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "AWS cluster request payload for create and update", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "required": [ - "cloudType", - "cloudAccountUid", - "cloudConfig" - ], - "properties": { - "cloudAccountUid": { - "description": "Cloud account uid to be used for cluster provisioning", - "type": "string" - }, - "cloudConfig": { - "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "region" - ], - "properties": { - "bastionDisabled": { - "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", - "type": "boolean" - }, - "controlPlaneLoadBalancer": { - "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", - "type": "string" - }, - "region": { - "type": "string" - }, - "sshKeyName": { - "type": "string" - }, - "vpcId": { - "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", - "type": "string" - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "clusterMetaAttribute": { - "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", - "type": "string" - }, - "controlPlaneHealthCheckTimeout": { - "type": "string" - }, - "hostClusterConfig": { - "properties": { - "clusterEndpoint": { - "properties": { - "config": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "type": { - "description": "is enabled as host cluster", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - } - } - }, - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "hostCluster": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "isHostCluster": { - "description": "is enabled as host cluster", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "lifecycleConfig": { - "properties": { - "pause": { - "description": "enable pause life cycle config", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "machineManagementConfig": { - "type": "object", - "properties": { - "osPatchConfig": { - "type": "object", - "properties": { - "onDemandPatchAfter": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchOnBoot": { - "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", - "type": "boolean", - "x-omitempty": false - }, - "rebootIfRequired": { - "description": "Reboot once the OS patch is applied", - "type": "boolean", - "x-omitempty": false - }, - "schedule": { - "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", - "type": "string" - } - } - } - } - }, - "resources": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster Namespace resource defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster namespace spec", - "properties": { - "isRegex": { - "type": "boolean", - "x-omitempty": false - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "resourceAllocation": { - "description": "Cluster namespace resource allocation", - "properties": { - "cpuCores": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memoryMiB": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - } - }, - "rbacs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC role binding defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC spec", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } - } - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "updateWorkerPoolsInParallel": { - "type": "boolean" - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "required": [ - "instanceType" - ], - "properties": { - "additionalSecurityGroups": { - "description": "Additional Security groups", - "type": "array", - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", - "type": "object", - "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - } - }, - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "capacityType": { - "description": "EC2 instance capacity type", - "type": "string", - "default": "on-demand", - "enum": [ - "on-demand", - "spot" - ] - }, - "instanceType": { - "description": "instance type", - "type": "string" - }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64", - "maximum": 2000, - "minimum": 1 - }, - "spotMarketOptions": { - "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", - "type": "object", - "properties": { - "maxPrice": { - "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", - "type": "string" - } - } - }, - "subnets": { - "type": "array", - "items": { - "properties": { - "az": { - "type": "string" - }, - "id": { - "type": "string" - } - } - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - }, - "policies": { - "description": "Cluster policies", - "type": "object", - "properties": { - "backupPolicy": { - "description": "Cluster backup config", - "properties": { - "backupLocationName": { - "type": "string" - }, - "backupLocationUid": { - "type": "string" - }, - "backupName": { - "type": "string" - }, - "backupPrefix": { - "type": "string" - }, - "durationInHours": { - "type": "number", - "format": "int64" - }, - "includeAllDisks": { - "type": "boolean" - }, - "includeClusterResources": { - "type": "boolean" - }, - "locationType": { - "type": "string" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "scanPolicy": { - "description": "Cluster compliance scan schedule configuration", - "properties": { - "kubeBench": { - "description": "Cluster compliance scan schedule config for kube bench driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "kubeHunter": { - "description": "Cluster compliance scan schedule config for kube hunter driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "sonobuoy": { - "description": "Cluster compliance scan schedule config for sonobuoy driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "profiles": { - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack values entity to refer the existing pack for the values override", - "type": "object", - "required": [ - "name" - ], - "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - }, - "uid": { - "description": "Manifest uid", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Aws Cluster validation response", - "schema": { - "description": "Cluster validator response", - "type": "object", - "properties": { - "machinePools": { - "description": "Constraint validator response", - "type": "object", - "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - } - } - } - } - } - }, - "profiles": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster profile validator response", - "type": "object", - "properties": { - "packs": { - "description": "Constraint validator response", - "type": "object", - "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - } - } - } - } - } - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "/v1/spectroclusters/azure": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Creates an Azure cluster", - "operationId": "v1SpectroClustersAzureCreate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Azure cluster request payload for create and update", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "required": [ - "cloudType", - "cloudAccountUid", - "cloudConfig" - ], - "properties": { - "cloudAccountUid": { - "description": "Cloud account uid to be used for cluster provisioning", - "type": "string" - }, - "cloudConfig": { - "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "subscriptionId", - "location", - "sshKey" - ], - "properties": { - "aadProfile": { - "description": "AADProfile - AAD integration is managed by AKS.", - "type": "object", - "required": [ - "managed", - "adminGroupObjectIDs" - ], - "properties": { - "adminGroupObjectIDs": { - "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", - "type": "array", - "items": { - "type": "string" - } - }, - "managed": { - "description": "Managed - Whether to enable managed AAD.", - "type": "boolean", - "x-omitempty": false - } - } - }, - "apiServerAccessProfile": { - "description": "APIServerAccessProfile - access profile for AKS API server.", - "type": "object", - "properties": { - "authorizedIPRanges": { - "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", - "type": "array", - "items": { - "type": "string", - "default": "" - } - }, - "enablePrivateCluster": { - "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", - "type": "boolean" - }, - "enablePrivateClusterPublicFQDN": { - "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", - "type": "boolean" - }, - "privateDNSZone": { - "description": "PrivateDNSZone - Private dns zone mode for private cluster.", - "type": "string" - } - } - }, - "containerName": { - "type": "string" - }, - "controlPlaneSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - }, - "enablePrivateCluster": { - "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", - "type": "boolean" - }, - "infraLBConfig": { - "type": "object", - "properties": { - "apiServerLB": { - "description": "LoadBalancerSpec defines an Azure load balancer.", - "type": "object", - "properties": { - "apiServerLBStaticIP": { - "type": "string" - }, - "ipAllocationMethod": { - "type": "string", - "default": "Dynamic", - "enum": [ - "Static", - "Dynamic" - ] - }, - "privateDNSName": { - "type": "string" - }, - "type": { - "description": "Load Balancer type", - "type": "string", - "default": "Public", - "enum": [ - "Internal", - "Public" - ] - } - } - } - } - }, - "location": { - "description": "Location is the Azure datacenter location", - "type": "string" - }, - "resourceGroup": { - "type": "string" - }, - "sshKey": { - "type": "string" - }, - "storageAccountName": { - "type": "string" - }, - "subscriptionId": { - "description": "Subscription ID is unique identifier for the subscription used to access Azure services", - "type": "string" - }, - "vnetCidrBlock": { - "type": "string" - }, - "vnetName": { - "description": "VNETName is the virtual network in which the cluster is to be provisioned.", - "type": "string" - }, - "vnetResourceGroup": { - "type": "string" - }, - "workerSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "clusterMetaAttribute": { - "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", - "type": "string" - }, - "controlPlaneHealthCheckTimeout": { - "type": "string" - }, - "hostClusterConfig": { - "properties": { - "clusterEndpoint": { - "properties": { - "config": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "type": { - "description": "is enabled as host cluster", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - } - } - }, - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "hostCluster": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "isHostCluster": { - "description": "is enabled as host cluster", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "lifecycleConfig": { - "properties": { - "pause": { - "description": "enable pause life cycle config", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "machineManagementConfig": { - "type": "object", - "properties": { - "osPatchConfig": { - "type": "object", - "properties": { - "onDemandPatchAfter": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchOnBoot": { - "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", - "type": "boolean", - "x-omitempty": false - }, - "rebootIfRequired": { - "description": "Reboot once the OS patch is applied", - "type": "boolean", - "x-omitempty": false - }, - "schedule": { - "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", - "type": "string" - } - } - } - } - }, - "resources": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster Namespace resource defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster namespace spec", - "properties": { - "isRegex": { - "type": "boolean", - "x-omitempty": false - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "resourceAllocation": { - "description": "Cluster namespace resource allocation", - "properties": { - "cpuCores": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memoryMiB": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - } - }, - "rbacs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC role binding defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC spec", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } - } - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "updateWorkerPoolsInParallel": { - "type": "boolean" - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "properties": { - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "instanceType": { - "description": "Instance type stands for VMSize in Azure", - "type": "string" - }, - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean" - }, - "osDisk": { - "type": "object", - "properties": { - "diskSizeGB": { - "type": "integer", - "format": "int32" - }, - "managedDisk": { - "type": "object", - "properties": { - "storageAccountType": { - "type": "string" - } - } - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - } - } - }, - "managedPoolConfig": { - "type": "object", - "properties": { - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean", - "x-omitempty": false - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - }, - "policies": { - "description": "Cluster policies", - "type": "object", - "properties": { - "backupPolicy": { - "description": "Cluster backup config", - "properties": { - "backupLocationName": { - "type": "string" - }, - "backupLocationUid": { - "type": "string" - }, - "backupName": { - "type": "string" - }, - "backupPrefix": { - "type": "string" - }, - "durationInHours": { - "type": "number", - "format": "int64" - }, - "includeAllDisks": { - "type": "boolean" - }, - "includeClusterResources": { - "type": "boolean" - }, - "locationType": { - "type": "string" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "scanPolicy": { - "description": "Cluster compliance scan schedule configuration", - "properties": { - "kubeBench": { - "description": "Cluster compliance scan schedule config for kube bench driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "kubeHunter": { - "description": "Cluster compliance scan schedule config for kube hunter driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "sonobuoy": { - "description": "Cluster compliance scan schedule config for sonobuoy driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "profiles": { - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack values entity to refer the existing pack for the values override", - "type": "object", - "required": [ - "name" - ], - "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - }, - "uid": { - "description": "Manifest uid", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/spectroclusters/azure/import": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Imports an Azure cluster", - "operationId": "v1SpectroClustersAzureImport", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro Azure cluster import request payload", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "clusterConfig": { - "type": "object", - "properties": { - "importMode": { - "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", - "type": "string", - "enum": [ - "read-only" - ] - }, - "proxy": { - "description": "cluster proxy config spec", - "type": "object", - "properties": { - "caContainerMountPath": { - "description": "Location to mount Proxy CA cert inside container", - "type": "string" - }, - "caHostPath": { - "description": "Location for Proxy CA cert on host nodes", - "type": "string" - }, - "httpProxy": { - "description": "URL for HTTP requests unless overridden by NoProxy", - "type": "string" - }, - "httpsProxy": { - "description": "HTTPS requests unless overridden by NoProxy", - "type": "string" - }, - "noProxy": { - "description": "NoProxy represents the NO_PROXY or no_proxy environment", - "type": "string" - } - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/spectroclusters/azure/rate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Get Azure cluster estimated rate information", - "operationId": "v1SpectroClustersAzureRate", - "parameters": [ - { - "enum": [ - "hourly", - "monthly", - "yearly" - ], - "type": "string", - "default": "hourly", - "name": "periodType", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro Azure cluster request payload for estimating rate", - "type": "object", - "properties": { - "cloudConfig": { - "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "subscriptionId", - "location", - "sshKey" - ], - "properties": { - "aadProfile": { - "description": "AADProfile - AAD integration is managed by AKS.", - "type": "object", - "required": [ - "managed", - "adminGroupObjectIDs" - ], - "properties": { - "adminGroupObjectIDs": { - "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", - "type": "array", - "items": { - "type": "string" - } - }, - "managed": { - "description": "Managed - Whether to enable managed AAD.", - "type": "boolean", - "x-omitempty": false - } - } - }, - "apiServerAccessProfile": { - "description": "APIServerAccessProfile - access profile for AKS API server.", - "type": "object", - "properties": { - "authorizedIPRanges": { - "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", - "type": "array", - "items": { - "type": "string", - "default": "" - } - }, - "enablePrivateCluster": { - "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", - "type": "boolean" - }, - "enablePrivateClusterPublicFQDN": { - "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", - "type": "boolean" - }, - "privateDNSZone": { - "description": "PrivateDNSZone - Private dns zone mode for private cluster.", - "type": "string" - } - } - }, - "containerName": { - "type": "string" - }, - "controlPlaneSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - }, - "enablePrivateCluster": { - "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", - "type": "boolean" - }, - "infraLBConfig": { - "type": "object", - "properties": { - "apiServerLB": { - "description": "LoadBalancerSpec defines an Azure load balancer.", - "type": "object", - "properties": { - "apiServerLBStaticIP": { - "type": "string" - }, - "ipAllocationMethod": { - "type": "string", - "default": "Dynamic", - "enum": [ - "Static", - "Dynamic" - ] - }, - "privateDNSName": { - "type": "string" - }, - "type": { - "description": "Load Balancer type", - "type": "string", - "default": "Public", - "enum": [ - "Internal", - "Public" - ] - } - } - } - } - }, - "location": { - "description": "Location is the Azure datacenter location", - "type": "string" - }, - "resourceGroup": { - "type": "string" - }, - "sshKey": { - "type": "string" - }, - "storageAccountName": { - "type": "string" - }, - "subscriptionId": { - "description": "Subscription ID is unique identifier for the subscription used to access Azure services", - "type": "string" - }, - "vnetCidrBlock": { - "type": "string" - }, - "vnetName": { - "description": "VNETName is the virtual network in which the cluster is to be provisioned.", - "type": "string" - }, - "vnetResourceGroup": { - "type": "string" - }, - "workerSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "properties": { - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "instanceType": { - "description": "Instance type stands for VMSize in Azure", - "type": "string" - }, - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean" - }, - "osDisk": { - "type": "object", - "properties": { - "diskSizeGB": { - "type": "integer", - "format": "int32" - }, - "managedDisk": { - "type": "object", - "properties": { - "storageAccountType": { - "type": "string" - } - } - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - } - } - }, - "managedPoolConfig": { - "type": "object", - "properties": { - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean", - "x-omitempty": false - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Azure Cluster estimated rate response", - "schema": { - "description": "Cluster estimated rate information", - "type": "object", - "properties": { - "machinePools": { - "type": "array", - "items": { - "description": "Machine pool estimated rate information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nodesCount": { - "type": "integer", - "format": "int32" - }, - "rate": { - "description": "Cloud estimated rate information", - "type": "object", - "properties": { - "compute": { - "description": "Compute estimated rate information", - "type": "object", - "properties": { - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "type": { - "type": "string" - } - } - }, - "storage": { - "type": "array", - "items": { - "description": "Storage estimated rate information", - "type": "object", - "properties": { - "iops": { - "type": "number", - "format": "float64" - }, - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "sizeGB": { - "type": "number", - "format": "float64" - }, - "throughput": { - "type": "number", - "format": "float64" - }, - "type": { - "type": "string" - } - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - }, - "name": { - "type": "string" - }, - "rate": { - "description": "Cluster total estimated rate information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "resourceMetadata": { - "description": "Cloud resource metadata", - "type": "object", - "properties": { - "instanceTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud Instance type details", - "type": "object", - "properties": { - "category": { - "description": "Category of instance type", - "type": "string", - "x-go-name": "Category" - }, - "cost": { - "description": "Instance cost entity", - "type": "object", - "properties": { - "price": { - "description": "Array of cloud instance price", - "type": "array", - "items": { - "description": "Cloud instance price", - "type": "object", - "properties": { - "onDemand": { - "description": "OnDemand price of instance", - "type": "number", - "format": "double" - }, - "os": { - "description": "Os associated with instance price. Allowed values - [linux, windows]", - "type": "string", - "enum": [ - "linux", - "windows" - ] - }, - "spot": { - "description": "Spot price of instance", - "type": "number", - "format": "double" - } - } - } - } - } - }, - "cpu": { - "description": "Cpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Cpu" - }, - "gpu": { - "description": "Gpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Gpu" - }, - "memory": { - "description": "Memory of instance type", - "type": "number", - "format": "double", - "x-go-name": "Memory" - }, - "nonSupportedZones": { - "description": "Non supported zones of the instance in a particular region", - "type": "array", - "items": { - "type": "string" - } - }, - "price": { - "description": "Price of instance type", - "type": "number", - "format": "double", - "x-go-name": "Price" - }, - "supportedArchitectures": { - "description": "Supported architecture of the instance", - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "description": "Type of instance type", - "type": "string", - "x-go-name": "Type" - } - } - } - }, - "storageTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud cloud Storage type details", - "type": "object", - "properties": { - "cost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "iopsCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "kind": { - "description": "kind of storage type", - "type": "string" - }, - "name": { - "description": "Name of the storage type", - "type": "string" - }, - "throughputCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - }, - "/v1/spectroclusters/azure/validate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Validates Azure cluster create operation", - "operationId": "v1SpectroClustersAzureValidate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Azure cluster request payload for create and update", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "required": [ - "cloudType", - "cloudAccountUid", - "cloudConfig" - ], - "properties": { - "cloudAccountUid": { - "description": "Cloud account uid to be used for cluster provisioning", - "type": "string" - }, - "cloudConfig": { - "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "subscriptionId", - "location", - "sshKey" - ], - "properties": { - "aadProfile": { - "description": "AADProfile - AAD integration is managed by AKS.", - "type": "object", - "required": [ - "managed", - "adminGroupObjectIDs" - ], - "properties": { - "adminGroupObjectIDs": { - "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", - "type": "array", - "items": { - "type": "string" - } - }, - "managed": { - "description": "Managed - Whether to enable managed AAD.", - "type": "boolean", - "x-omitempty": false - } - } - }, - "apiServerAccessProfile": { - "description": "APIServerAccessProfile - access profile for AKS API server.", - "type": "object", - "properties": { - "authorizedIPRanges": { - "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", - "type": "array", - "items": { - "type": "string", - "default": "" - } - }, - "enablePrivateCluster": { - "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", - "type": "boolean" - }, - "enablePrivateClusterPublicFQDN": { - "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", - "type": "boolean" - }, - "privateDNSZone": { - "description": "PrivateDNSZone - Private dns zone mode for private cluster.", - "type": "string" - } - } - }, - "containerName": { - "type": "string" - }, - "controlPlaneSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - }, - "enablePrivateCluster": { - "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", - "type": "boolean" - }, - "infraLBConfig": { - "type": "object", - "properties": { - "apiServerLB": { - "description": "LoadBalancerSpec defines an Azure load balancer.", - "type": "object", - "properties": { - "apiServerLBStaticIP": { - "type": "string" - }, - "ipAllocationMethod": { - "type": "string", - "default": "Dynamic", - "enum": [ - "Static", - "Dynamic" - ] - }, - "privateDNSName": { - "type": "string" - }, - "type": { - "description": "Load Balancer type", - "type": "string", - "default": "Public", - "enum": [ - "Internal", - "Public" - ] - } - } - } - } - }, - "location": { - "description": "Location is the Azure datacenter location", - "type": "string" - }, - "resourceGroup": { - "type": "string" - }, - "sshKey": { - "type": "string" - }, - "storageAccountName": { - "type": "string" - }, - "subscriptionId": { - "description": "Subscription ID is unique identifier for the subscription used to access Azure services", - "type": "string" - }, - "vnetCidrBlock": { - "type": "string" - }, - "vnetName": { - "description": "VNETName is the virtual network in which the cluster is to be provisioned.", - "type": "string" - }, - "vnetResourceGroup": { - "type": "string" - }, - "workerSubnet": { - "type": "object", - "properties": { - "cidrBlock": { - "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", - "type": "string" - }, - "name": { - "type": "string" - }, - "securityGroupName": { - "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", - "type": "string" - } - } - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "clusterMetaAttribute": { - "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", - "type": "string" - }, - "controlPlaneHealthCheckTimeout": { - "type": "string" - }, - "hostClusterConfig": { - "properties": { - "clusterEndpoint": { - "properties": { - "config": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "type": { - "description": "is enabled as host cluster", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - } - } - }, - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "hostCluster": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "isHostCluster": { - "description": "is enabled as host cluster", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "lifecycleConfig": { - "properties": { - "pause": { - "description": "enable pause life cycle config", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "machineManagementConfig": { - "type": "object", - "properties": { - "osPatchConfig": { - "type": "object", - "properties": { - "onDemandPatchAfter": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchOnBoot": { - "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", - "type": "boolean", - "x-omitempty": false - }, - "rebootIfRequired": { - "description": "Reboot once the OS patch is applied", - "type": "boolean", - "x-omitempty": false - }, - "schedule": { - "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", - "type": "string" - } - } - } - } - }, - "resources": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster Namespace resource defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster namespace spec", - "properties": { - "isRegex": { - "type": "boolean", - "x-omitempty": false - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "resourceAllocation": { - "description": "Cluster namespace resource allocation", - "properties": { - "cpuCores": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memoryMiB": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - } - }, - "rbacs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC role binding defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC spec", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } - } - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "updateWorkerPoolsInParallel": { - "type": "boolean" - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "properties": { - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "instanceType": { - "description": "Instance type stands for VMSize in Azure", - "type": "string" - }, - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean" - }, - "osDisk": { - "type": "object", - "properties": { - "diskSizeGB": { - "type": "integer", - "format": "int32" - }, - "managedDisk": { - "type": "object", - "properties": { - "storageAccountType": { - "type": "string" - } - } - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - } - } - }, - "managedPoolConfig": { - "type": "object", - "properties": { - "isSystemNodePool": { - "description": "whether this pool is for system node Pool", - "type": "boolean", - "x-omitempty": false - }, - "osType": { - "type": "string", - "default": "Linux", - "enum": [ - "Linux", - "Windows" - ] - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - }, - "policies": { - "description": "Cluster policies", - "type": "object", - "properties": { - "backupPolicy": { - "description": "Cluster backup config", - "properties": { - "backupLocationName": { - "type": "string" - }, - "backupLocationUid": { - "type": "string" - }, - "backupName": { - "type": "string" - }, - "backupPrefix": { - "type": "string" - }, - "durationInHours": { - "type": "number", - "format": "int64" - }, - "includeAllDisks": { - "type": "boolean" - }, - "includeClusterResources": { - "type": "boolean" - }, - "locationType": { - "type": "string" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "scanPolicy": { - "description": "Cluster compliance scan schedule configuration", - "properties": { - "kubeBench": { - "description": "Cluster compliance scan schedule config for kube bench driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "kubeHunter": { - "description": "Cluster compliance scan schedule config for kube hunter driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "sonobuoy": { - "description": "Cluster compliance scan schedule config for sonobuoy driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "profiles": { - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack values entity to refer the existing pack for the values override", - "type": "object", - "required": [ - "name" - ], - "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - }, - "uid": { - "description": "Manifest uid", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - } + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/services/{serviceName}/version": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns a latest version for a given service name", + "operationId": "v1ServiceVersionGet", + "parameters": [ + { + "enum": [ + "ally", + "jet", + "palette", + "ambit", + "ally-lite", + "palette-lite", + "crony", + "tick", + "edge", + "lodge", + "level", + "edgeconfig", + "firth", + "stylus" + ], + "type": "string", + "description": "service name", + "name": "serviceName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "spectro cluster uid", + "name": "clusterUid", + "in": "query" + }, + { + "type": "string", + "description": "edge host uid", + "name": "edgeHostUid", + "in": "query" }, { "type": "string", @@ -126245,96 +110625,85 @@ ], "responses": { "200": { - "description": "Azure Cluster validation response", + "description": "OK", "schema": { - "description": "Cluster validator response", + "description": "Service version information", "type": "object", "properties": { - "machinePools": { - "description": "Constraint validator response", + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - } - } + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" } } }, - "profiles": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster profile validator response", - "type": "object", - "properties": { - "packs": { - "description": "Constraint validator response", - "type": "object", - "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - } - } - } - } + "spec": { + "type": "object", + "properties": { + "latestVersion": { + "type": "object", + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "repoName": { + "type": "string" + }, + "sha": { + "type": "string" } - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" } + }, + "name": { + "type": "string" } } } @@ -126344,8 +110713,8 @@ } } }, - "/v1/spectroclusters/cloudTypes/{cloudType}": { - "post": { + "/v1/services/{serviceName}/versions/{version}/manifest": { + "get": { "security": [ { "ApiKey": [] @@ -126357,550 +110726,174 @@ "tags": [ "v1" ], - "summary": "Creates a Custom cluster", - "operationId": "v1SpectroClustersCustomCreate", + "summary": "Returns a service manifest for a given service name and version", + "operationId": "v1ServiceManifestGet", "parameters": [ { - "name": "body", - "in": "body", + "enum": [ + "ally", + "jet", + "palette", + "ambit", + "ally-lite", + "palette-lite", + "crony", + "tick", + "edge", + "lodge", + "level", + "edgeconfig", + "firth", + "stylus" + ], + "type": "string", + "description": "service name", + "name": "serviceName", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "service version", + "name": "version", + "in": "path", + "required": true + }, + { + "enum": [ + "apply", + "delete", + "resources" + ], + "type": "string", + "description": "action type", + "name": "action", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "resource file name", + "name": "resourceFilename", + "in": "query" + }, + { + "type": "string", + "description": "spectro cluster uid", + "name": "clusterUid", + "in": "query" + }, + { + "type": "string", + "description": "edge host uid", + "name": "edgeHostUid", + "in": "query" + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", "schema": { - "description": "Custom cluster request payload for create and update", + "description": "Service manifest information", "type": "object", "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, "metadata": { - "description": "ObjectMeta input entity for object creation", + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { "type": "object", - "required": [ - "cloudType", - "cloudAccountUid", - "cloudConfig" - ], "properties": { - "cloudAccountUid": { - "description": "Cloud account uid to be used for cluster provisioning", - "type": "string" - }, - "cloudConfig": { - "description": "Cluster level configuration for Custom cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "values" - ], - "properties": { - "values": { - "description": "YAML string for Cluster and CloudCluster", - "type": "string" - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "machineManagementConfig": { - "type": "object", - "properties": { - "osPatchConfig": { - "type": "object", - "properties": { - "onDemandPatchAfter": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchOnBoot": { - "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", - "type": "boolean", - "x-omitempty": false - }, - "rebootIfRequired": { - "description": "Reboot once the OS patch is applied", - "type": "boolean", - "x-omitempty": false - }, - "schedule": { - "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", - "type": "string" - } - } - } - } - }, - "resources": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster Namespace resource defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster namespace spec", - "properties": { - "isRegex": { - "type": "boolean", - "x-omitempty": false - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "resourceAllocation": { - "description": "Cluster namespace resource allocation", - "properties": { - "cpuCores": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memoryMiB": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - } - }, - "rbacs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC role binding defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC spec", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } - } - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - } - } - }, - "machinepoolconfig": { + "manifests": { "type": "array", + "uniqueItems": true, "items": { "type": "object", - "required": [ - "cloudConfig" - ], "properties": { - "cloudConfig": { - "type": "object", - "properties": { - "values": { - "description": "Machine pool configuration as yaml content", - "type": "string" - } - } + "content": { + "type": "string" }, - "poolConfig": { - "description": "Machine pool configuration for the custom cluster", - "type": "object", - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - }, - "profiles": { - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Pack values entity to refer the existing pack for the values override", - "type": "object", - "required": [ - "name" - ], - "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - }, - "uid": { - "description": "Manifest uid", - "type": "string" - } - } - } - }, - "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } + "name": { + "type": "string" }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", + "path": { "type": "string" }, - "uid": { - "description": "Cluster profile uid", + "repoName": { + "type": "string" + }, + "sha": { "type": "string" } } } + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" } } } } } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] + } }, - "/v1/spectroclusters/cloudTypes/{cloudType}/validate": { + "/v1/spectroclusters/aks": { "post": { "security": [ { @@ -126913,36 +110906,55 @@ "tags": [ "v1" ], - "summary": "Validates Custom cluster create operation", - "operationId": "v1SpectroClustersCustomValidate", + "summary": "Creates an AKS cluster", + "operationId": "v1SpectroClustersAksCreate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Custom cluster request payload for create and update", + "description": "Azure cluster request payload for create and update", "type": "object", "properties": { "metadata": { - "description": "ObjectMeta input entity for object creation", + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -126960,21 +110972,278 @@ "type": "string" }, "cloudConfig": { - "description": "Cluster level configuration for Custom cloud and applicable for all the machine pools", + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", "type": "object", "required": [ - "values" + "subscriptionId", + "location", + "sshKey" ], "properties": { - "values": { - "description": "YAML string for Cluster and CloudCluster", + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", + "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], + "properties": { + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + } + }, + "containerName": { + "type": "string" + }, + "controlPlaneSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + }, + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } + } + }, + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } } } }, "clusterConfig": { "type": "object", "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "properties": { + "clusterEndpoint": { + "properties": { + "config": { + "properties": { + "ingressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "type": "integer", + "format": "int64" + } + } + }, + "loadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "type": "array", + "items": { + "type": "string" + } + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + }, + "type": { + "description": "is enabled as host cluster", + "type": "string", + "enum": [ + "Ingress", + "LoadBalancer" + ] + } + } + }, + "clusterGroup": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "hostCluster": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + } + }, + "isHostCluster": { + "description": "is enabled as host cluster", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, "location": { "description": "Cluster location information", "type": "object", @@ -127256,6 +111525,9 @@ } } } + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" } } }, @@ -127270,15 +111542,73 @@ "cloudConfig": { "type": "object", "properties": { - "values": { - "description": "Machine pool configuration as yaml content", + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", "type": "string" + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + } + } + }, + "managedPoolConfig": { + "type": "object", + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] } } }, "poolConfig": { - "description": "Machine pool configuration for the custom cluster", + "description": "Machine pool configuration for the cluster", "type": "object", + "required": [ + "name", + "size", + "labels" + ], "properties": { "additionalLabels": { "description": "Additional labels to be part of the machine pool", @@ -127287,13 +111617,64 @@ "type": "string" } }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "isControlPlane": { "description": "Whether this pool is for control plane", "type": "boolean", "x-omitempty": false }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -127324,8 +111705,22 @@ } } }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -127334,6 +111729,101 @@ } } }, + "policies": { + "description": "Cluster policies", + "type": "object", + "properties": { + "backupPolicy": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "type": "number", + "format": "int64" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, "profiles": { "type": "array", "items": { @@ -127400,120 +111890,769 @@ } } }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Custom Cluster validation response", - "schema": { - "description": "Cluster validator response", - "type": "object", - "properties": { - "machinePools": { - "description": "Constraint validator response", - "type": "object", - "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", - "type": "object", - "properties": { - "displayName": { + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/aks/rate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get AKS cluster estimated rate information", + "operationId": "v1SpectroClustersAksRate", + "parameters": [ + { + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "type": "string", + "default": "hourly", + "name": "periodType", + "in": "query" + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro Azure cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "subscriptionId", + "location", + "sshKey" + ], + "properties": { + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", + "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], + "properties": { + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + } + }, + "containerName": { + "type": "string" + }, + "controlPlaneSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + }, + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } + } + }, + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } + } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + } + } + }, + "managedPoolConfig": { + "type": "object", + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Aks Cluster estimated rate response", + "schema": { + "description": "Cluster estimated rate information", + "type": "object", + "properties": { + "machinePools": { + "type": "array", + "items": { + "description": "Machine pool estimated rate information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nodesCount": { + "type": "integer", + "format": "int32" + }, + "rate": { + "description": "Cloud estimated rate information", + "type": "object", + "properties": { + "compute": { + "description": "Compute estimated rate information", + "type": "object", + "properties": { + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "type": { + "type": "string" + } + } + }, + "storage": { + "type": "array", + "items": { + "description": "Storage estimated rate information", + "type": "object", + "properties": { + "iops": { + "type": "number", + "format": "float64" + }, + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "sizeGB": { + "type": "number", + "format": "float64" + }, + "throughput": { + "type": "number", + "format": "float64" + }, + "type": { + "type": "string" + } + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "name": { + "type": "string" + }, + "rate": { + "description": "Cluster total estimated rate information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "resourceMetadata": { + "description": "Cloud resource metadata", + "type": "object", + "properties": { + "instanceTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + }, + "storageTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", "type": "string" }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } - }, "name": { + "description": "Name of the storage type", "type": "string" - } - } - } - } - } - }, - "profiles": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster profile validator response", - "type": "object", - "properties": { - "packs": { - "description": "Constraint validator response", - "type": "object", - "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" } } - }, - "name": { - "type": "string" } } } } } - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" } } } @@ -127522,57 +112661,9 @@ } } } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster's cloud type", - "name": "cloudType", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/config/edgeInstaller": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Cluster configuration for the edge installer", - "operationId": "v1SpectroClustersConfigEdgeInstaller", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "properties": { - "installerDownloadLinks": { - "additionalProperties": { - "type": "string" - } - } - } - } - } - } } }, - "/v1/spectroclusters/coxedge": { + "/v1/spectroclusters/aks/validate": { "post": { "security": [ { @@ -127585,14 +112676,14 @@ "tags": [ "v1" ], - "summary": "Creates a CoxEdge cluster", - "operationId": "v1SpectroClustersCoxEdgeCreate", + "summary": "Validates AKS cluster create operation", + "operationId": "v1SpectroClustersAksValidate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "CoxEdge cluster request payload for create and update", + "description": "Azure cluster request payload for create and update", "type": "object", "properties": { "metadata": { @@ -127600,7 +112691,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -127617,7 +112708,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -127629,11 +112720,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -127651,57 +112742,164 @@ "type": "string" }, "cloudConfig": { - "description": "Cluster level configuration for coxedge cloud and applicable for all the machine pools", + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", "type": "object", "required": [ - "sshAuthorizedKeys", - "coxEdgeLoadBalancerConfig" + "subscriptionId", + "location", + "sshKey" ], "properties": { - "coxEdgeLoadBalancerConfig": { - "description": "CoxEdge loadbalancer config", + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], "properties": { - "pops": { - "description": "CoxEdge PoPs - geographical location for the loadbalancer", + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", "type": "array", "items": { "type": "string" } + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false } } }, - "coxEdgeWorkerLoadBalancerConfig": { - "description": "CoxEdge loadbalancer config", + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", "type": "object", "properties": { - "pops": { - "description": "CoxEdge PoPs - geographical location for the loadbalancer", + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", "type": "array", "items": { - "type": "string" + "type": "string", + "default": "" + } + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + } + }, + "containerName": { + "type": "string" + }, + "controlPlaneSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } + }, + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } } } } }, - "environment": { + "location": { + "description": "Location is the Azure datacenter location", "type": "string" }, - "organizationId": { + "resourceGroup": { "type": "string" }, - "sshAuthorizedKeys": { - "description": "CoxEdge ssh authorized keys", - "type": "array", - "items": { - "type": "string" + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } } } } }, - "cloudType": { - "type": "string" - }, "clusterConfig": { "type": "object", "properties": { @@ -127771,11 +112969,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -127789,11 +112987,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -128114,101 +113312,62 @@ "cloudConfig": { "type": "object", "properties": { - "deployments": { + "azs": { "type": "array", "items": { - "properties": { - "cpuUtilization": { - "type": "integer", - "format": "int32" - }, - "enableAutoScaling": { - "type": "boolean" - }, - "instancesPerPop": { - "type": "integer", - "format": "int32" - }, - "maxInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "minInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "pops": { - "type": "array", - "items": { - "type": "string" - } - } - } + "type": "string" } }, - "persistentStorages": { - "description": "Array of coxedge load persistent storages", - "type": "array", - "uniqueItems": true, - "items": { - "description": "CoxEdge load persistent storage", - "type": "object", - "properties": { - "path": { - "description": "Coxedge load persistent storage path", - "type": "string" - }, - "size": { - "description": "Coxedge load persistent storage size", - "type": "integer", - "format": "int64" - } - } - } + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" }, - "securityGroupRules": { - "type": "array", - "items": { - "properties": { - "action": { - "type": "string", - "enum": [ - "block", - "allow" - ] - }, - "description": { - "type": "string" - }, - "portRange": { - "type": "string" - }, - "protocol": { - "type": "string", - "enum": [ - "TCP", - "UDP", - "TCP_UDP", - "ESP", - "AH", - "ICMP", - "GRE" - ] - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] } } + } + } + }, + "managedPoolConfig": { + "type": "object", + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false }, - "spec": { - "type": "string" + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] } } }, @@ -128241,7 +113400,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -128285,7 +113444,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -128331,7 +113490,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -128508,360 +113667,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/spectroclusters/coxedge/rate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Get Cox Edge cluster estimated rate information", - "operationId": "v1SpectroClustersCoxEdgeRate", - "parameters": [ - { - "enum": [ - "hourly", - "monthly", - "yearly" - ], - "type": "string", - "default": "hourly", - "name": "periodType", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Cox Edge cluster request payload for estimating rate", - "type": "object", - "properties": { - "cloudConfig": { - "description": "Cluster level configuration for coxedge cloud and applicable for all the machine pools", - "type": "object", - "required": [ - "sshAuthorizedKeys", - "coxEdgeLoadBalancerConfig" - ], - "properties": { - "coxEdgeLoadBalancerConfig": { - "description": "CoxEdge loadbalancer config", - "type": "object", - "properties": { - "pops": { - "description": "CoxEdge PoPs - geographical location for the loadbalancer", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "coxEdgeWorkerLoadBalancerConfig": { - "description": "CoxEdge loadbalancer config", - "type": "object", - "properties": { - "pops": { - "description": "CoxEdge PoPs - geographical location for the loadbalancer", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "environment": { - "type": "string" - }, - "organizationId": { - "type": "string" - }, - "sshAuthorizedKeys": { - "description": "CoxEdge ssh authorized keys", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "cloudConfig" - ], - "properties": { - "cloudConfig": { - "type": "object", - "properties": { - "deployments": { - "type": "array", - "items": { - "properties": { - "cpuUtilization": { - "type": "integer", - "format": "int32" - }, - "enableAutoScaling": { - "type": "boolean" - }, - "instancesPerPop": { - "type": "integer", - "format": "int32" - }, - "maxInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "minInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "pops": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "persistentStorages": { - "description": "Array of coxedge load persistent storages", - "type": "array", - "uniqueItems": true, - "items": { - "description": "CoxEdge load persistent storage", - "type": "object", - "properties": { - "path": { - "description": "Coxedge load persistent storage path", - "type": "string" - }, - "size": { - "description": "Coxedge load persistent storage size", - "type": "integer", - "format": "int64" - } - } - } - }, - "securityGroupRules": { - "type": "array", - "items": { - "properties": { - "action": { - "type": "string", - "enum": [ - "block", - "allow" - ] - }, - "description": { - "type": "string" - }, - "portRange": { - "type": "string" - }, - "protocol": { - "type": "string", - "enum": [ - "TCP", - "UDP", - "TCP_UDP", - "ESP", - "AH", - "ICMP", - "GRE" - ] - }, - "source": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "spec": { - "type": "string" - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" }, - "taints": { - "description": "Master or worker taints", + "variables": { "type": "array", - "uniqueItems": true, "items": { - "description": "Taint", + "description": "Variable with value which will be used within the packs of cluster profile", "type": "object", + "required": [ + "name" + ], "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", + "name": { + "description": "Variable name", "type": "string" }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, "value": { - "description": "The taint value corresponding to the taint key.", + "description": "Actual value of the variable to be used within the cluster", "type": "string" } } } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false } } } @@ -128880,299 +113705,95 @@ ], "responses": { "200": { - "description": "Azure Cluster estimated rate response", + "description": "Aks Cluster validation response", "schema": { - "description": "Cluster estimated rate information", + "description": "Cluster validator response", "type": "object", "properties": { "machinePools": { - "type": "array", - "items": { - "description": "Machine pool estimated rate information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nodesCount": { - "type": "integer", - "format": "int32" - }, - "rate": { - "description": "Cloud estimated rate information", - "type": "object", - "properties": { - "compute": { - "description": "Compute estimated rate information", - "type": "object", - "properties": { - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "type": { - "type": "string" - } - } - }, - "storage": { - "type": "array", - "items": { - "description": "Storage estimated rate information", - "type": "object", - "properties": { - "iops": { - "type": "number", - "format": "float64" - }, - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "sizeGB": { - "type": "number", - "format": "float64" - }, - "throughput": { - "type": "number", - "format": "float64" - }, - "type": { - "type": "string" - } - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - }, - "name": { - "type": "string" - }, - "rate": { - "description": "Cluster total estimated rate information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "resourceMetadata": { - "description": "Cloud resource metadata", + "description": "Constraint validator response", "type": "object", "properties": { - "instanceTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud Instance type details", - "type": "object", - "properties": { - "category": { - "description": "Category of instance type", - "type": "string", - "x-go-name": "Category" - }, - "cost": { - "description": "Instance cost entity", - "type": "object", - "properties": { - "price": { - "description": "Array of cloud instance price", - "type": "array", - "items": { - "description": "Cloud instance price", - "type": "object", - "properties": { - "onDemand": { - "description": "OnDemand price of instance", - "type": "number", - "format": "double" - }, - "os": { - "description": "Os associated with instance price. Allowed values - [linux, windows]", - "type": "string", - "enum": [ - "linux", - "windows" - ] - }, - "spot": { - "description": "Spot price of instance", - "type": "number", - "format": "double" - } - } - } - } - } - }, - "cpu": { - "description": "Cpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Cpu" - }, - "gpu": { - "description": "Gpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Gpu" - }, - "memory": { - "description": "Memory of instance type", - "type": "number", - "format": "double", - "x-go-name": "Memory" - }, - "nonSupportedZones": { - "description": "Non supported zones of the instance in a particular region", - "type": "array", - "items": { - "type": "string" - } - }, - "price": { - "description": "Price of instance type", - "type": "number", - "format": "double", - "x-go-name": "Price" - }, - "supportedArchitectures": { - "description": "Supported architecture of the instance", - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "description": "Type of instance type", - "type": "string", - "x-go-name": "Type" - } - } - } - }, - "storageTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud cloud Storage type details", + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", "type": "object", "properties": { - "cost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "iopsCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "kind": { - "description": "kind of storage type", - "type": "string" - }, - "name": { - "description": "Name of the storage type", + "displayName": { "type": "string" }, - "throughputCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } } } + }, + "name": { + "type": "string" } } } } } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" } } } @@ -129183,7 +113804,7 @@ } } }, - "/v1/spectroclusters/coxedge/validate": { + "/v1/spectroclusters/aws": { "post": { "security": [ { @@ -129196,14 +113817,14 @@ "tags": [ "v1" ], - "summary": "Validates Cox Edge cluster create operation", - "operationId": "v1SpectroClustersCoxEdgeValidate", + "summary": "Creates an AWS cluster", + "operationId": "v1SpectroClustersAwsCreate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "CoxEdge cluster request payload for create and update", + "description": "AWS cluster request payload for create and update", "type": "object", "properties": { "metadata": { @@ -129211,7 +113832,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -129228,7 +113849,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -129240,11 +113861,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -129262,57 +113883,32 @@ "type": "string" }, "cloudConfig": { - "description": "Cluster level configuration for coxedge cloud and applicable for all the machine pools", + "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", "type": "object", "required": [ - "sshAuthorizedKeys", - "coxEdgeLoadBalancerConfig" + "region" ], "properties": { - "coxEdgeLoadBalancerConfig": { - "description": "CoxEdge loadbalancer config", - "type": "object", - "properties": { - "pops": { - "description": "CoxEdge PoPs - geographical location for the loadbalancer", - "type": "array", - "items": { - "type": "string" - } - } - } + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", + "type": "boolean" }, - "coxEdgeWorkerLoadBalancerConfig": { - "description": "CoxEdge loadbalancer config", - "type": "object", - "properties": { - "pops": { - "description": "CoxEdge PoPs - geographical location for the loadbalancer", - "type": "array", - "items": { - "type": "string" - } - } - } + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" }, - "environment": { + "region": { "type": "string" }, - "organizationId": { + "sshKeyName": { "type": "string" }, - "sshAuthorizedKeys": { - "description": "CoxEdge ssh authorized keys", - "type": "array", - "items": { - "type": "string" - } + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" } } }, - "cloudType": { - "type": "string" - }, "clusterConfig": { "type": "object", "properties": { @@ -129382,11 +113978,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -129400,11 +113996,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -129724,102 +114320,99 @@ "properties": { "cloudConfig": { "type": "object", + "required": [ + "instanceType" + ], "properties": { - "deployments": { + "additionalSecurityGroups": { + "description": "Additional Security groups", "type": "array", "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", "properties": { - "cpuUtilization": { - "type": "integer", - "format": "int32" - }, - "enableAutoScaling": { - "type": "boolean" - }, - "instancesPerPop": { - "type": "integer", - "format": "int32" - }, - "maxInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "minInstancesPerPop": { - "type": "integer", - "format": "int32" - }, - "name": { + "arn": { + "description": "ARN of resource", "type": "string" }, - "pops": { + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", "type": "array", + "uniqueItems": true, "items": { - "type": "string" + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } } + }, + "id": { + "description": "ID of resource", + "type": "string" } } } }, - "persistentStorages": { - "description": "Array of coxedge load persistent storages", + "azs": { "type": "array", - "uniqueItems": true, "items": { - "description": "CoxEdge load persistent storage", - "type": "object", - "properties": { - "path": { - "description": "Coxedge load persistent storage path", - "type": "string" - }, - "size": { - "description": "Coxedge load persistent storage size", - "type": "integer", - "format": "int64" - } + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" } } }, - "securityGroupRules": { + "subnets": { "type": "array", "items": { "properties": { - "action": { - "type": "string", - "enum": [ - "block", - "allow" - ] - }, - "description": { - "type": "string" - }, - "portRange": { - "type": "string" - }, - "protocol": { - "type": "string", - "enum": [ - "TCP", - "UDP", - "TCP_UDP", - "ESP", - "AH", - "ICMP", - "GRE" - ] - }, - "source": { + "az": { "type": "string" }, - "type": { + "id": { "type": "string" } } } - }, - "spec": { - "type": "string" } } }, @@ -129852,7 +114445,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -129896,7 +114489,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -129942,7 +114535,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -130119,6 +114712,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -130136,96 +114749,753 @@ } ], "responses": { - "200": { - "description": "Azure Cluster validation response", + "201": { + "description": "Created successfully", "schema": { - "description": "Cluster validator response", "type": "object", + "required": [ + "uid" + ], "properties": { - "machinePools": { - "description": "Constraint validator response", + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/aws/import": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Imports an AWS cluster", + "operationId": "v1SpectroClustersAwsImport", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro AWS cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", "type": "object", "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/aws/rate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get AWS cluster estimated rate information", + "operationId": "v1SpectroClustersAwsRate", + "parameters": [ + { + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "type": "string", + "default": "hourly", + "name": "periodType", + "in": "query" + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro AWS cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "region" + ], + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { "type": "object", + "required": [ + "instanceType" + ], "properties": { - "displayName": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "type": "array", + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "instanceType": { + "description": "instance type", "type": "string" }, - "errors": { + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { "type": "array", - "uniqueItems": true, "items": { - "type": "object", "properties": { - "code": { + "az": { "type": "string" }, - "message": { + "id": { "type": "string" } } } + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" }, "name": { "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false } } } } } - }, - "profiles": { + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Aws Cluster estimated rate response", + "schema": { + "description": "Cluster estimated rate information", + "type": "object", + "properties": { + "machinePools": { "type": "array", - "uniqueItems": true, "items": { - "description": "Cluster profile validator response", + "description": "Machine pool estimated rate information", "type": "object", "properties": { - "packs": { - "description": "Constraint validator response", + "name": { + "type": "string" + }, + "nodesCount": { + "type": "integer", + "format": "int32" + }, + "rate": { + "description": "Cloud estimated rate information", "type": "object", "properties": { - "results": { + "compute": { + "description": "Compute estimated rate information", + "type": "object", + "properties": { + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "type": { + "type": "string" + } + } + }, + "storage": { "type": "array", - "uniqueItems": true, "items": { - "description": "Constraint validator result", + "description": "Storage estimated rate information", "type": "object", "properties": { - "displayName": { - "type": "string" + "iops": { + "type": "number", + "format": "float64" }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false }, - "name": { + "sizeGB": { + "type": "number", + "format": "float64" + }, + "throughput": { + "type": "number", + "format": "float64" + }, + "type": { "type": "string" } } } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "name": { + "type": "string" + }, + "rate": { + "description": "Cluster total estimated rate information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "resourceMetadata": { + "description": "Cloud resource metadata", + "type": "object", + "properties": { + "instanceTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + }, + "storageTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } } } - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" } } } @@ -130236,7 +115506,7 @@ } } }, - "/v1/spectroclusters/edge": { + "/v1/spectroclusters/aws/validate": { "post": { "security": [ { @@ -130249,14 +115519,14 @@ "tags": [ "v1" ], - "summary": "Creates a Edge cluster", - "operationId": "v1SpectroClustersEdgeCreate", + "summary": "Validates AWS cluster create operation", + "operationId": "v1SpectroClustersAwsValidate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Edge cluster request payload for create and update", + "description": "AWS cluster request payload for create and update", "type": "object", "properties": { "metadata": { @@ -130264,7 +115534,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -130281,7 +115551,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -130293,28 +115563,51 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, "cloudConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", + "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", "type": "object", + "required": [ + "region" + ], "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" } } }, @@ -130387,11 +115680,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -130405,11 +115698,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -130723,21 +116016,101 @@ "type": "array", "items": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { + "type": "object", "required": [ - "edgeHosts" + "instanceType" ], "properties": { - "edgeHosts": { + "additionalSecurityGroups": { + "description": "Additional Security groups", "type": "array", - "uniqueItems": true, "items": { - "required": [ - "hostUid" - ], + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", "properties": { - "hostUid": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "azs": { + "type": "array", + "items": { + "type": "string" + } + }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "type": "integer", + "format": "int64", + "maximum": 2000, + "minimum": 1 + }, + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } + }, + "subnets": { + "type": "array", + "items": { + "properties": { + "az": { + "type": "string" + }, + "id": { "type": "string" } } @@ -130774,7 +116147,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -130818,7 +116191,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -130864,7 +116237,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -131041,6 +116414,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -131058,30 +116451,107 @@ } ], "responses": { - "201": { - "description": "Created successfully", + "200": { + "description": "Aws Cluster validation response", "schema": { + "description": "Cluster validator response", "type": "object", - "required": [ - "uid" - ], "properties": { - "uid": { - "type": "string" + "machinePools": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } } } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } } } } } }, - "/v1/spectroclusters/edge-native": { + "/v1/spectroclusters/azure": { "post": { "security": [ { @@ -131094,14 +116564,14 @@ "tags": [ "v1" ], - "summary": "Creates an EdgeNative cluster", - "operationId": "v1SpectroClustersEdgeNativeCreate", + "summary": "Creates an Azure cluster", + "operationId": "v1SpectroClustersAzureCreate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "EdgeNative cluster create or update request payload", + "description": "Azure cluster request payload for create and update", "type": "object", "properties": { "metadata": { @@ -131109,7 +116579,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -131126,7 +116596,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -131138,72 +116608,183 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, "cloudConfig": { - "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", "type": "object", + "required": [ + "subscriptionId", + "location", + "sshKey" + ], "properties": { - "controlPlaneEndpoint": { + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", - "type": "string" + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } }, - "host": { - "description": "Host is FQDN(DDNS) or IP", - "type": "string" + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } }, - "type": { - "description": "Type indicates DDNS or VIP", + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", "type": "string" } } }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", - "type": "array", - "items": { - "type": "string", - "default": "" - } + "containerName": { + "type": "string" }, - "overlayNetworkConfiguration": { + "controlPlaneSubnet": { "type": "object", "properties": { - "cidr": { - "description": "CIDR is the CIDR of the overlay network", + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", "type": "string" }, - "enable": { - "description": "Enable is a flag to enable overlay network", - "type": "boolean", - "x-omitempty": false + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" } } }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string", - "default": "" + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } } }, - "staticIp": { - "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", - "type": "boolean" + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } } } }, @@ -131276,11 +116857,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -131294,11 +116875,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -131311,6 +116892,16 @@ } } }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, "location": { "description": "Cluster location information", "type": "object", @@ -131351,6 +116942,35 @@ } } }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, "resources": { "type": "object", "properties": { @@ -131573,78 +117193,72 @@ "type": "array", "items": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { - "required": [ - "edgeHosts" - ], + "type": "object", "properties": { - "edgeHosts": { + "azs": { "type": "array", - "uniqueItems": true, "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostName": { - "description": "Edge host name", - "type": "string" - }, - "hostUid": { - "description": "Edge host id", - "type": "string" - }, - "nic": { - "type": "object", - "properties": { - "dns": { - "type": "array", - "items": { - "type": "string" - } - }, - "gateway": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - }, - "macAddr": { - "type": "string" - }, - "nicName": { - "type": "string" - }, - "subnet": { - "type": "string" - } + "type": "string" + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" } - }, - "nicName": { - "description": "Deprecated - Edge host nic name", - "type": "string" - }, - "staticIP": { - "description": "Deprecated - Edge host static IP", - "type": "string" - }, - "twoNodeCandidatePriority": { - "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", - "type": "string", - "enum": [ - "primary", - "secondary" - ] } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] } } } } }, + "managedPoolConfig": { + "type": "object", + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, "poolConfig": { "description": "Machine pool configuration for the cluster", "type": "object", @@ -131674,7 +117288,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -131718,7 +117332,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -131764,7 +117378,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -131941,6 +117555,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -131981,7 +117615,7 @@ } } }, - "/v1/spectroclusters/edge-native/import": { + "/v1/spectroclusters/azure/import": { "post": { "security": [ { @@ -131994,14 +117628,14 @@ "tags": [ "v1" ], - "summary": "Imports an EdgeNative cluster", - "operationId": "v1SpectroClustersEdgeNativeImport", + "summary": "Imports an Azure cluster", + "operationId": "v1SpectroClustersAzureImport", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Spectro EdgeNative cluster import request payload", + "description": "Spectro Azure cluster import request payload", "type": "object", "properties": { "metadata": { @@ -132009,21 +117643,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -132105,7 +117739,7 @@ } } }, - "/v1/spectroclusters/edge-native/rate": { + "/v1/spectroclusters/azure/rate": { "post": { "security": [ { @@ -132118,8 +117752,8 @@ "tags": [ "v1" ], - "summary": "Get edge-native cluster estimated rate information", - "operationId": "v1SpectroClustersEdgeNativeRate", + "summary": "Get Azure cluster estimated rate information", + "operationId": "v1SpectroClustersAzureRate", "parameters": [ { "enum": [ @@ -132136,63 +117770,165 @@ "name": "body", "in": "body", "schema": { - "description": "Edge-native cluster request payload for estimating rate", + "description": "Spectro Azure cluster request payload for estimating rate", "type": "object", "properties": { "cloudConfig": { - "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", "type": "object", + "required": [ + "subscriptionId", + "location", + "sshKey" + ], "properties": { - "controlPlaneEndpoint": { + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", - "type": "string" + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } }, - "host": { - "description": "Host is FQDN(DDNS) or IP", - "type": "string" + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } }, - "type": { - "description": "Type indicates DDNS or VIP", + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", "type": "string" } } }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", - "type": "array", - "items": { - "type": "string", - "default": "" - } + "containerName": { + "type": "string" }, - "overlayNetworkConfiguration": { + "controlPlaneSubnet": { "type": "object", "properties": { - "cidr": { - "description": "CIDR is the CIDR of the overlay network", + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", "type": "string" }, - "enable": { - "description": "Enable is a flag to enable overlay network", - "type": "boolean", - "x-omitempty": false + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" } } }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string", - "default": "" + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } } }, - "staticIp": { - "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", - "type": "boolean" + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } } } }, @@ -132200,78 +117936,72 @@ "type": "array", "items": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { - "required": [ - "edgeHosts" - ], + "type": "object", "properties": { - "edgeHosts": { + "azs": { "type": "array", - "uniqueItems": true, "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostName": { - "description": "Edge host name", - "type": "string" - }, - "hostUid": { - "description": "Edge host id", - "type": "string" - }, - "nic": { - "type": "object", - "properties": { - "dns": { - "type": "array", - "items": { - "type": "string" - } - }, - "gateway": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - }, - "macAddr": { - "type": "string" - }, - "nicName": { - "type": "string" - }, - "subnet": { - "type": "string" - } - } - }, - "nicName": { - "description": "Deprecated - Edge host nic name", - "type": "string" - }, - "staticIP": { - "description": "Deprecated - Edge host static IP", - "type": "string" - }, - "twoNodeCandidatePriority": { - "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", - "type": "string", - "enum": [ - "primary", - "secondary" - ] + "type": "string" + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" + } } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] } } } } }, + "managedPoolConfig": { + "type": "object", + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, "poolConfig": { "description": "Machine pool configuration for the cluster", "type": "object", @@ -132301,7 +118031,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -132345,7 +118075,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -132391,7 +118121,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -132412,7 +118142,7 @@ ], "responses": { "200": { - "description": "EdgeNative Cluster estimated rate response", + "description": "Azure Cluster estimated rate response", "schema": { "description": "Cluster estimated rate information", "type": "object", @@ -132715,7 +118445,7 @@ } } }, - "/v1/spectroclusters/edge-native/validate": { + "/v1/spectroclusters/azure/validate": { "post": { "security": [ { @@ -132728,14 +118458,14 @@ "tags": [ "v1" ], - "summary": "Validates edge-native cluster create operation", - "operationId": "v1SpectroClustersEdgeNativeValidate", + "summary": "Validates Azure cluster create operation", + "operationId": "v1SpectroClustersAzureValidate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "EdgeNative cluster create or update request payload", + "description": "Azure cluster request payload for create and update", "type": "object", "properties": { "metadata": { @@ -132743,7 +118473,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -132760,7 +118490,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -132772,72 +118502,183 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, "cloudConfig": { - "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", "type": "object", + "required": [ + "subscriptionId", + "location", + "sshKey" + ], "properties": { - "controlPlaneEndpoint": { + "aadProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", "type": "object", + "required": [ + "managed", + "adminGroupObjectIDs" + ], "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", - "type": "string" + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "type": "array", + "items": { + "type": "string" + } }, - "host": { - "description": "Host is FQDN(DDNS) or IP", - "type": "string" + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + } + }, + "apiServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "type": "object", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "type": "array", + "items": { + "type": "string", + "default": "" + } }, - "type": { - "description": "Type indicates DDNS or VIP", + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", "type": "string" } } }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", - "type": "array", - "items": { - "type": "string", - "default": "" - } + "containerName": { + "type": "string" }, - "overlayNetworkConfiguration": { + "controlPlaneSubnet": { "type": "object", "properties": { - "cidr": { - "description": "CIDR is the CIDR of the overlay network", + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", "type": "string" }, - "enable": { - "description": "Enable is a flag to enable overlay network", - "type": "boolean", - "x-omitempty": false + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" } } }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string", - "default": "" + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "type": "object", + "properties": { + "apiServerLB": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "type": "object", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "type": "string", + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ] + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "description": "Load Balancer type", + "type": "string", + "default": "Public", + "enum": [ + "Internal", + "Public" + ] + } + } + } } }, - "staticIp": { - "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", - "type": "boolean" + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "type": "object", + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + } } } }, @@ -132910,11 +118751,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -132928,11 +118769,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -132945,6 +118786,16 @@ } } }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, "location": { "description": "Cluster location information", "type": "object", @@ -132985,6 +118836,35 @@ } } }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, "resources": { "type": "object", "properties": { @@ -133207,78 +119087,72 @@ "type": "array", "items": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { - "required": [ - "edgeHosts" - ], + "type": "object", "properties": { - "edgeHosts": { + "azs": { "type": "array", - "uniqueItems": true, "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostName": { - "description": "Edge host name", - "type": "string" - }, - "hostUid": { - "description": "Edge host id", - "type": "string" - }, - "nic": { - "type": "object", - "properties": { - "dns": { - "type": "array", - "items": { - "type": "string" - } - }, - "gateway": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - }, - "macAddr": { - "type": "string" - }, - "nicName": { - "type": "string" - }, - "subnet": { - "type": "string" - } + "type": "string" + } + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "type": "object", + "properties": { + "diskSizeGB": { + "type": "integer", + "format": "int32" + }, + "managedDisk": { + "type": "object", + "properties": { + "storageAccountType": { + "type": "string" } - }, - "nicName": { - "description": "Deprecated - Edge host nic name", - "type": "string" - }, - "staticIP": { - "description": "Deprecated - Edge host static IP", - "type": "string" - }, - "twoNodeCandidatePriority": { - "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", - "type": "string", - "enum": [ - "primary", - "secondary" - ] } + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] } } } } }, + "managedPoolConfig": { + "type": "object", + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "osType": { + "type": "string", + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ] + } + } + }, "poolConfig": { "description": "Machine pool configuration for the cluster", "type": "object", @@ -133308,7 +119182,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -133352,7 +119226,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -133398,7 +119272,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -133452,50 +119326,694 @@ "scheduledRunTime": { "type": "string" } - } - } - } - }, - "scanPolicy": { - "description": "Cluster compliance scan schedule configuration", - "properties": { - "kubeBench": { - "description": "Cluster compliance scan schedule config for kube bench driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "kubeHunter": { - "description": "Cluster compliance scan schedule config for kube hunter driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", + } + } + } + }, + "scanPolicy": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "kubeHunter": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + }, + "sonobuoy": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "profiles": { + "type": "array", + "items": { + "description": "Cluster profile request payload", + "type": "object", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Pack values entity to refer the existing pack for the values override", + "type": "object", + "required": [ + "name" + ], + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "type": "array", + "items": { + "description": "Manifest update request payload", + "required": [ + "name" + ], + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + } + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "type": "string", + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ] + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + } + } + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Azure Cluster validation response", + "schema": { + "description": "Cluster validator response", + "type": "object", + "properties": { + "machinePools": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "profiles": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster profile validator response", + "type": "object", + "properties": { + "packs": { + "description": "Constraint validator response", + "type": "object", + "properties": { + "results": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Constraint validator result", + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + }, + "name": { + "type": "string" + } + } + } + } + } + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/cloudTypes/{cloudType}": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Creates a Custom cluster", + "operationId": "v1SpectroClustersCustomCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Custom cluster request payload for create and update", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "description": "Cluster level configuration for Custom cloud and applicable for all the machine pools", + "type": "object", + "required": [ + "values" + ], + "properties": { + "values": { + "description": "YAML string for Cluster and CloudCluster", + "type": "string" + } + } + }, + "clusterConfig": { + "type": "object", + "properties": { + "location": { + "description": "Cluster location information", + "type": "object", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "description": "Geolocation Latlong entity", + "type": "object", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + } + }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, + "resources": { + "type": "object", + "properties": { + "namespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster Namespace resource defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "resourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + }, + "memoryMiB": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + } + } + } + } + } + } + }, + "rbacs": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC role binding defintion", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta update entity with uid as input", + "type": "object", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Cluster RBAC spec", + "type": "object", + "properties": { + "bindings": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster RBAC binding", + "type": "object", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "Role", + "ClusterRole" + ] + }, + "name": { + "type": "string" + } + } + }, + "subjects": { + "type": "array", + "uniqueItems": true, + "items": { + "description": "Cluster role ref", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "User", + "Group", + "ServiceAccount" + ] + } + } + } + }, + "type": { + "type": "string", + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ] + } + } + } + }, + "relatedObject": { + "description": "Object for which the resource is related", + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ] + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "type": "object", + "required": [ + "cloudConfig" + ], + "properties": { + "cloudConfig": { + "type": "object", + "properties": { + "values": { + "description": "Machine pool configuration as yaml content", + "type": "string" + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the custom cluster", + "type": "object", + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", "properties": { - "scheduledRunTime": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", "type": "string" - } - } - } - } - }, - "sonobuoy": { - "description": "Cluster compliance scan schedule config for sonobuoy driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", "type": "string" } } } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false } } } @@ -133575,209 +120093,28 @@ "uid": { "description": "Cluster profile uid", "type": "string" - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "EdgeNative Cluster validation response", - "schema": { - "description": "Cluster validator response", - "type": "object", - "properties": { - "machinePools": { - "description": "Constraint validator response", - "type": "object", - "properties": { - "results": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Constraint validator result", - "type": "object", - "properties": { - "displayName": { - "type": "string" - }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } }, - "name": { - "type": "string" - } - } - } - } - } - }, - "profiles": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster profile validator response", - "type": "object", - "properties": { - "packs": { - "description": "Constraint validator response", - "type": "object", - "properties": { - "results": { + "variables": { "type": "array", - "uniqueItems": true, "items": { - "description": "Constraint validator result", + "description": "Variable with value which will be used within the packs of cluster profile", "type": "object", + "required": [ + "name" + ], "properties": { - "displayName": { + "name": { + "description": "Variable name", "type": "string" }, - "errors": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "message": { - "type": "string" - } - } - } - }, - "name": { + "value": { + "description": "Actual value of the variable to be used within the cluster", "type": "string" } } } } } - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "/v1/spectroclusters/edge/import": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Imports an Edge cluster", - "operationId": "v1SpectroClustersEdgeImport", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro Edge cluster import request payload", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "clusterConfig": { - "type": "object", - "properties": { - "importMode": { - "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", - "type": "string", - "enum": [ - "read-only" - ] - }, - "proxy": { - "description": "cluster proxy config spec", - "type": "object", - "properties": { - "caContainerMountPath": { - "description": "Location to mount Proxy CA cert inside container", - "type": "string" - }, - "caHostPath": { - "description": "Location for Proxy CA cert on host nodes", - "type": "string" - }, - "httpProxy": { - "description": "URL for HTTP requests unless overridden by NoProxy", - "type": "string" - }, - "httpsProxy": { - "description": "HTTPS requests unless overridden by NoProxy", - "type": "string" - }, - "noProxy": { - "description": "NoProxy represents the NO_PROXY or no_proxy environment", - "type": "string" - } - } - } } } } @@ -133814,525 +120151,18 @@ } } } - } - }, - "/v1/spectroclusters/edge/rate": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Get edge cluster estimated rate information", - "operationId": "v1SpectroClustersEdgeRate", - "parameters": [ - { - "enum": [ - "hourly", - "monthly", - "yearly" - ], - "type": "string", - "default": "hourly", - "name": "periodType", - "in": "query" - }, - { - "name": "body", - "in": "body", - "schema": { - "description": "Edge cluster request payload for estimating rate", - "type": "object", - "properties": { - "cloudConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", - "type": "object", - "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "properties": { - "cloudConfig": { - "required": [ - "edgeHosts" - ], - "properties": { - "edgeHosts": { - "type": "array", - "uniqueItems": true, - "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostUid": { - "type": "string" - } - } - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "Edge Cluster estimated rate response", - "schema": { - "description": "Cluster estimated rate information", - "type": "object", - "properties": { - "machinePools": { - "type": "array", - "items": { - "description": "Machine pool estimated rate information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nodesCount": { - "type": "integer", - "format": "int32" - }, - "rate": { - "description": "Cloud estimated rate information", - "type": "object", - "properties": { - "compute": { - "description": "Compute estimated rate information", - "type": "object", - "properties": { - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "type": { - "type": "string" - } - } - }, - "storage": { - "type": "array", - "items": { - "description": "Storage estimated rate information", - "type": "object", - "properties": { - "iops": { - "type": "number", - "format": "float64" - }, - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "sizeGB": { - "type": "number", - "format": "float64" - }, - "throughput": { - "type": "number", - "format": "float64" - }, - "type": { - "type": "string" - } - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - }, - "name": { - "type": "string" - }, - "rate": { - "description": "Cluster total estimated rate information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "resourceMetadata": { - "description": "Cloud resource metadata", - "type": "object", - "properties": { - "instanceTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud Instance type details", - "type": "object", - "properties": { - "category": { - "description": "Category of instance type", - "type": "string", - "x-go-name": "Category" - }, - "cost": { - "description": "Instance cost entity", - "type": "object", - "properties": { - "price": { - "description": "Array of cloud instance price", - "type": "array", - "items": { - "description": "Cloud instance price", - "type": "object", - "properties": { - "onDemand": { - "description": "OnDemand price of instance", - "type": "number", - "format": "double" - }, - "os": { - "description": "Os associated with instance price. Allowed values - [linux, windows]", - "type": "string", - "enum": [ - "linux", - "windows" - ] - }, - "spot": { - "description": "Spot price of instance", - "type": "number", - "format": "double" - } - } - } - } - } - }, - "cpu": { - "description": "Cpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Cpu" - }, - "gpu": { - "description": "Gpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Gpu" - }, - "memory": { - "description": "Memory of instance type", - "type": "number", - "format": "double", - "x-go-name": "Memory" - }, - "nonSupportedZones": { - "description": "Non supported zones of the instance in a particular region", - "type": "array", - "items": { - "type": "string" - } - }, - "price": { - "description": "Price of instance type", - "type": "number", - "format": "double", - "x-go-name": "Price" - }, - "supportedArchitectures": { - "description": "Supported architecture of the instance", - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "description": "Type of instance type", - "type": "string", - "x-go-name": "Type" - } - } - } - }, - "storageTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud cloud Storage type details", - "type": "object", - "properties": { - "cost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "iopsCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "kind": { - "description": "kind of storage type", - "type": "string" - }, - "name": { - "description": "Name of the storage type", - "type": "string" - }, - "throughputCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - } - } - } - } - } - } - } - } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster's cloud type", + "name": "cloudType", + "in": "path", + "required": true } - } + ] }, - "/v1/spectroclusters/edge/validate": { + "/v1/spectroclusters/cloudTypes/{cloudType}/validate": { "post": { "security": [ { @@ -134345,189 +120175,68 @@ "tags": [ "v1" ], - "summary": "Validates edge cluster create operation", - "operationId": "v1SpectroClustersEdgeValidate", + "summary": "Validates Custom cluster create operation", + "operationId": "v1SpectroClustersCustomValidate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Edge cluster request payload for create and update", + "description": "Custom cluster request payload for create and update", "type": "object", "properties": { "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "description": "ObjectMeta input entity for object creation", "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } }, "spec": { "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, "cloudConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", + "description": "Cluster level configuration for Custom cloud and applicable for all the machine pools", "type": "object", + "required": [ + "values" + ], "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } + "values": { + "description": "YAML string for Cluster and CloudCluster", + "type": "string" } } }, "clusterConfig": { "type": "object", "properties": { - "clusterMetaAttribute": { - "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", - "type": "string" - }, - "controlPlaneHealthCheckTimeout": { - "type": "string" - }, - "hostClusterConfig": { - "properties": { - "clusterEndpoint": { - "properties": { - "config": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "type": { - "description": "is enabled as host cluster", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - } - } - }, - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "hostCluster": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "isHostCluster": { - "description": "is enabled as host cluster", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "lifecycleConfig": { - "properties": { - "pause": { - "description": "enable pause life cycle config", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, "location": { "description": "Cluster location information", "type": "object", @@ -134809,9 +120518,6 @@ } } } - }, - "updateWorkerPoolsInParallel": { - "type": "boolean" } } }, @@ -134819,102 +120525,37 @@ "type": "array", "items": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { - "required": [ - "edgeHosts" - ], - "properties": { - "edgeHosts": { - "type": "array", - "uniqueItems": true, - "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostUid": { - "type": "string" - } - } - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", "type": "object", - "required": [ - "name", - "size", - "labels" - ], "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { + "values": { + "description": "Machine pool configuration as yaml content", "type": "string" + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the custom cluster", + "type": "object", + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -134945,22 +120586,8 @@ } } }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -134969,101 +120596,6 @@ } } }, - "policies": { - "description": "Cluster policies", - "type": "object", - "properties": { - "backupPolicy": { - "description": "Cluster backup config", - "properties": { - "backupLocationName": { - "type": "string" - }, - "backupLocationUid": { - "type": "string" - }, - "backupName": { - "type": "string" - }, - "backupPrefix": { - "type": "string" - }, - "durationInHours": { - "type": "number", - "format": "int64" - }, - "includeAllDisks": { - "type": "boolean" - }, - "includeClusterResources": { - "type": "boolean" - }, - "locationType": { - "type": "string" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "scanPolicy": { - "description": "Cluster compliance scan schedule configuration", - "properties": { - "kubeBench": { - "description": "Cluster compliance scan schedule config for kube bench driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "kubeHunter": { - "description": "Cluster compliance scan schedule config for kube hunter driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "sonobuoy": { - "description": "Cluster compliance scan schedule config for sonobuoy driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - } - } - } - } - }, "profiles": { "type": "array", "items": { @@ -135137,6 +120669,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -135155,7 +120707,7 @@ ], "responses": { "200": { - "description": "edge Cluster validation response", + "description": "Custom Cluster validation response", "schema": { "description": "Cluster validator response", "type": "object", @@ -135252,9 +120804,18 @@ } } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster's cloud type", + "name": "cloudType", + "in": "path", + "required": true + } + ] }, - "/v1/spectroclusters/eks": { + "/v1/spectroclusters/edge-native": { "post": { "security": [ { @@ -135267,14 +120828,14 @@ "tags": [ "v1" ], - "summary": "Creates an EKS cluster", - "operationId": "v1SpectroClustersEksCreate", + "summary": "Creates an EdgeNative cluster", + "operationId": "v1SpectroClustersEdgeNativeCreate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Spectro EKS cluster request payload for create and update", + "description": "EdgeNative cluster create or update request payload", "type": "object", "properties": { "metadata": { @@ -135282,7 +120843,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -135299,7 +120860,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -135311,131 +120872,72 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { "type": "object", - "required": [ - "cloudAccountUid", - "cloudConfig" - ], "properties": { - "cloudAccountUid": { - "description": "Cloud account uid to be used for cluster provisioning", - "type": "string" - }, "cloudConfig": { - "description": "EksClusterConfig defines EKS specific config", + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", "type": "object", - "required": [ - "region" - ], "properties": { - "addons": { - "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", - "type": "array", - "items": { - "description": "EksAddon represents a EKS addon", - "type": "object", - "required": [ - "name", - "version" - ], - "properties": { - "conflictResolution": { - "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", - "type": "string" - }, - "name": { - "description": "Name is the name of the addon", - "type": "string" - }, - "serviceAccountRoleARN": { - "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", - "type": "string" - }, - "version": { - "description": "Version is the version of the addon to use", - "type": "string" - } - } - } - }, - "bastionDisabled": { - "description": "BastionDisabled is the option to disable bastion node", - "type": "boolean" - }, - "controlPlaneLoadBalancer": { - "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", - "type": "string" - }, - "encryptionConfig": { - "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "controlPlaneEndpoint": { "type": "object", "properties": { - "isEnabled": { - "description": "Is encryption configuration enabled for the cluster", - "type": "boolean" + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" }, - "provider": { - "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "host": { + "description": "Host is FQDN(DDNS) or IP", "type": "string" }, - "resources": { - "description": "Resources specifies the resources to be encrypted", - "type": "array", - "items": { - "type": "string" - } + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" } } }, - "endpointAccess": { - "description": "EndpointAccess specifies how control plane endpoints are accessible", + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "overlayNetworkConfiguration": { "type": "object", "properties": { - "private": { - "description": "Private points VPC-internal control plane access to the private endpoint", - "type": "boolean" - }, - "privateCIDRs": { - "description": "PrivateCIDRs specifies which blocks can access the private endpoint", - "type": "array", - "items": { - "type": "string" - } - }, - "public": { - "description": "Public controls whether control plane endpoints are publicly accessible", - "type": "boolean" + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" }, - "publicCIDRs": { - "description": "PublicCIDRs specifies which blocks can access the public endpoint", - "type": "array", - "items": { - "type": "string" - } + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false } } }, - "region": { - "description": "The AWS Region the cluster lives in.", - "type": "string" - }, - "sshKeyName": { - "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", - "type": "string" + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } }, - "vpcId": { - "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", - "type": "string" + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" } } }, @@ -135508,11 +121010,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -135526,11 +121028,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -135840,225 +121342,76 @@ } } }, - "fargateProfiles": { - "type": "array", - "items": { - "description": "FargateProfile defines the desired state of FargateProfile", - "type": "object", - "required": [ - "name" - ], - "properties": { - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "name specifies the profile name.", - "type": "string" - }, - "selectors": { - "description": "Selectors specify fargate pod selectors.", - "type": "array", - "items": { - "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", - "type": "object", - "required": [ - "namespace" - ], - "properties": { - "labels": { - "description": "Labels specifies which pod labels this selector should match.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "description": "Namespace specifies which namespace this selector should match.", - "type": "string" - } - } - } - }, - "subnetIds": { - "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, "machinepoolconfig": { "type": "array", "items": { + "type": "object", "properties": { "cloudConfig": { + "required": [ + "edgeHosts" + ], "properties": { - "awsLaunchTemplate": { - "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", - "type": "object", - "properties": { - "additionalSecurityGroups": { - "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", - "type": "array", - "uniqueItems": true, - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "edgeHosts": { + "type": "array", + "uniqueItems": true, + "items": { + "required": [ + "hostUid" + ], + "properties": { + "hostName": { + "description": "Edge host name", + "type": "string" + }, + "hostUid": { + "description": "Edge host id", + "type": "string" + }, + "nic": { "type": "object", "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", + "dns": { "type": "array", - "uniqueItems": true, "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } + "type": "string" } }, - "id": { - "description": "ID of resource", + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { "type": "string" } } - } - }, - "ami": { - "description": "AMI is the reference to the AMI from which to create the machine instance", - "type": "object", - "properties": { - "eksOptimizedLookupType": { - "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", - "type": "string", - "enum": [ - "AmazonLinux", - "AmazonLinuxGPU" - ] - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - }, - "imageLookupBaseOS": { - "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", - "type": "string" - }, - "imageLookupFormat": { - "description": "ImageLookupFormat is the AMI naming format to look up the image", - "type": "string" - }, - "imageLookupOrg": { - "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", - "type": "string" - }, - "rootVolume": { - "description": "Volume encapsulates the configuration options for the storage device.", - "type": "object", - "properties": { - "deviceName": { - "description": "Device name", - "type": "string" - }, - "encrypted": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "boolean" - }, - "encryptionKey": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "string" - }, - "iops": { - "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", - "type": "integer", - "format": "int64" - }, - "throughput": { - "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", - "type": "integer", - "format": "int64" - }, - "type": { - "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", - "type": "string" - } - } - } - } - }, - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "capacityType": { - "description": "EC2 instance capacity type", - "type": "string", - "default": "on-demand", - "enum": [ - "on-demand", - "spot" - ] - }, - "enableAwsLaunchTemplate": { - "description": "flag to know if aws launch template is enabled", - "type": "boolean" - }, - "instanceType": { - "description": "instance type", - "type": "string" - }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64", - "maximum": 2000, - "minimum": 1 - }, - "spotMarketOptions": { - "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", - "type": "object", - "properties": { - "maxPrice": { - "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", - "type": "string" - } - } - }, - "subnets": { - "type": "array", - "items": { - "properties": { - "az": { + }, + "nicName": { + "description": "Deprecated - Edge host nic name", "type": "string" }, - "id": { + "staticIP": { + "description": "Deprecated - Edge host static IP", "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] } } } @@ -136094,7 +121447,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -136138,7 +121491,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -136184,7 +121537,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -136361,6 +121714,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -136401,7 +121774,7 @@ } } }, - "/v1/spectroclusters/eks/rate": { + "/v1/spectroclusters/edge-native/import": { "post": { "security": [ { @@ -136414,8 +121787,132 @@ "tags": [ "v1" ], - "summary": "Get EKS cluster estimated rate information", - "operationId": "v1SpectroClustersEksRate", + "summary": "Imports an EdgeNative cluster", + "operationId": "v1SpectroClustersEdgeNativeImport", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro EdgeNative cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/edge-native/rate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get edge-native cluster estimated rate information", + "operationId": "v1SpectroClustersEdgeNativeRate", "parameters": [ { "enum": [ @@ -136432,282 +121929,136 @@ "name": "body", "in": "body", "schema": { - "description": "Spectro EKS cluster request payload for estimating rate", + "description": "Edge-native cluster request payload for estimating rate", "type": "object", "properties": { "cloudConfig": { - "description": "EksClusterConfig defines EKS specific config", + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", "type": "object", - "required": [ - "region" - ], "properties": { - "addons": { - "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", - "type": "array", - "items": { - "description": "EksAddon represents a EKS addon", - "type": "object", - "required": [ - "name", - "version" - ], - "properties": { - "conflictResolution": { - "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", - "type": "string" - }, - "name": { - "description": "Name is the name of the addon", - "type": "string" - }, - "serviceAccountRoleARN": { - "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", - "type": "string" - }, - "version": { - "description": "Version is the version of the addon to use", - "type": "string" - } - } - } - }, - "bastionDisabled": { - "description": "BastionDisabled is the option to disable bastion node", - "type": "boolean" - }, - "controlPlaneLoadBalancer": { - "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", - "type": "string" - }, - "encryptionConfig": { - "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "controlPlaneEndpoint": { "type": "object", "properties": { - "isEnabled": { - "description": "Is encryption configuration enabled for the cluster", - "type": "boolean" + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" }, - "provider": { - "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "host": { + "description": "Host is FQDN(DDNS) or IP", "type": "string" }, - "resources": { - "description": "Resources specifies the resources to be encrypted", - "type": "array", - "items": { - "type": "string" - } + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" } } }, - "endpointAccess": { - "description": "EndpointAccess specifies how control plane endpoints are accessible", + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "overlayNetworkConfiguration": { "type": "object", "properties": { - "private": { - "description": "Private points VPC-internal control plane access to the private endpoint", - "type": "boolean" - }, - "privateCIDRs": { - "description": "PrivateCIDRs specifies which blocks can access the private endpoint", - "type": "array", - "items": { - "type": "string" - } - }, - "public": { - "description": "Public controls whether control plane endpoints are publicly accessible", - "type": "boolean" + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" }, - "publicCIDRs": { - "description": "PublicCIDRs specifies which blocks can access the public endpoint", - "type": "array", - "items": { - "type": "string" - } + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false } } }, - "region": { - "description": "The AWS Region the cluster lives in.", - "type": "string" - }, - "sshKeyName": { - "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", - "type": "string" + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } }, - "vpcId": { - "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", - "type": "string" + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" } } }, "machinepoolconfig": { "type": "array", "items": { + "type": "object", "properties": { "cloudConfig": { + "required": [ + "edgeHosts" + ], "properties": { - "awsLaunchTemplate": { - "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", - "type": "object", - "properties": { - "additionalSecurityGroups": { - "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", - "type": "array", - "uniqueItems": true, - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "edgeHosts": { + "type": "array", + "uniqueItems": true, + "items": { + "required": [ + "hostUid" + ], + "properties": { + "hostName": { + "description": "Edge host name", + "type": "string" + }, + "hostUid": { + "description": "Edge host id", + "type": "string" + }, + "nic": { "type": "object", "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", + "dns": { "type": "array", - "uniqueItems": true, "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } + "type": "string" } }, - "id": { - "description": "ID of resource", + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { "type": "string" } } - } - }, - "ami": { - "description": "AMI is the reference to the AMI from which to create the machine instance", - "type": "object", - "properties": { - "eksOptimizedLookupType": { - "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", - "type": "string", - "enum": [ - "AmazonLinux", - "AmazonLinuxGPU" - ] - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - }, - "imageLookupBaseOS": { - "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", - "type": "string" - }, - "imageLookupFormat": { - "description": "ImageLookupFormat is the AMI naming format to look up the image", - "type": "string" - }, - "imageLookupOrg": { - "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", - "type": "string" - }, - "rootVolume": { - "description": "Volume encapsulates the configuration options for the storage device.", - "type": "object", - "properties": { - "deviceName": { - "description": "Device name", - "type": "string" - }, - "encrypted": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "boolean" - }, - "encryptionKey": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "string" - }, - "iops": { - "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", - "type": "integer", - "format": "int64" - }, - "throughput": { - "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", - "type": "integer", - "format": "int64" - }, - "type": { - "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", - "type": "string" - } - } - } - } - }, - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "capacityType": { - "description": "EC2 instance capacity type", - "type": "string", - "default": "on-demand", - "enum": [ - "on-demand", - "spot" - ] - }, - "enableAwsLaunchTemplate": { - "description": "flag to know if aws launch template is enabled", - "type": "boolean" - }, - "instanceType": { - "description": "instance type", - "type": "string" - }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64", - "maximum": 2000, - "minimum": 1 - }, - "spotMarketOptions": { - "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", - "type": "object", - "properties": { - "maxPrice": { - "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", - "type": "string" - } - } - }, - "subnets": { - "type": "array", - "items": { - "properties": { - "az": { + }, + "nicName": { + "description": "Deprecated - Edge host nic name", "type": "string" }, - "id": { + "staticIP": { + "description": "Deprecated - Edge host static IP", "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] } } } @@ -136743,7 +122094,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -136787,7 +122138,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -136833,7 +122184,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -136854,7 +122205,7 @@ ], "responses": { "200": { - "description": "Eks Cluster estimated rate response", + "description": "EdgeNative Cluster estimated rate response", "schema": { "description": "Cluster estimated rate information", "type": "object", @@ -137157,7 +122508,7 @@ } } }, - "/v1/spectroclusters/eks/validate": { + "/v1/spectroclusters/edge-native/validate": { "post": { "security": [ { @@ -137170,14 +122521,14 @@ "tags": [ "v1" ], - "summary": "Validates EKS cluster create operation", - "operationId": "v1SpectroClustersEksValidate", + "summary": "Validates edge-native cluster create operation", + "operationId": "v1SpectroClustersEdgeNativeValidate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Spectro EKS cluster request payload for create and update", + "description": "EdgeNative cluster create or update request payload", "type": "object", "properties": { "metadata": { @@ -137185,7 +122536,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -137202,7 +122553,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -137214,131 +122565,72 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { "type": "object", - "required": [ - "cloudAccountUid", - "cloudConfig" - ], "properties": { - "cloudAccountUid": { - "description": "Cloud account uid to be used for cluster provisioning", - "type": "string" - }, "cloudConfig": { - "description": "EksClusterConfig defines EKS specific config", + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", "type": "object", - "required": [ - "region" - ], "properties": { - "addons": { - "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", - "type": "array", - "items": { - "description": "EksAddon represents a EKS addon", - "type": "object", - "required": [ - "name", - "version" - ], - "properties": { - "conflictResolution": { - "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", - "type": "string" - }, - "name": { - "description": "Name is the name of the addon", - "type": "string" - }, - "serviceAccountRoleARN": { - "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", - "type": "string" - }, - "version": { - "description": "Version is the version of the addon to use", - "type": "string" - } - } - } - }, - "bastionDisabled": { - "description": "BastionDisabled is the option to disable bastion node", - "type": "boolean" - }, - "controlPlaneLoadBalancer": { - "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", - "type": "string" - }, - "encryptionConfig": { - "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "controlPlaneEndpoint": { "type": "object", "properties": { - "isEnabled": { - "description": "Is encryption configuration enabled for the cluster", - "type": "boolean" + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" }, - "provider": { - "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "host": { + "description": "Host is FQDN(DDNS) or IP", "type": "string" }, - "resources": { - "description": "Resources specifies the resources to be encrypted", - "type": "array", - "items": { - "type": "string" - } + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" } } }, - "endpointAccess": { - "description": "EndpointAccess specifies how control plane endpoints are accessible", + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "type": "array", + "items": { + "type": "string", + "default": "" + } + }, + "overlayNetworkConfiguration": { "type": "object", "properties": { - "private": { - "description": "Private points VPC-internal control plane access to the private endpoint", - "type": "boolean" - }, - "privateCIDRs": { - "description": "PrivateCIDRs specifies which blocks can access the private endpoint", - "type": "array", - "items": { - "type": "string" - } - }, - "public": { - "description": "Public controls whether control plane endpoints are publicly accessible", - "type": "boolean" + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" }, - "publicCIDRs": { - "description": "PublicCIDRs specifies which blocks can access the public endpoint", - "type": "array", - "items": { - "type": "string" - } + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false } } }, - "region": { - "description": "The AWS Region the cluster lives in.", - "type": "string" - }, - "sshKeyName": { - "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", - "type": "string" + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "type": "array", + "items": { + "type": "string", + "default": "" + } }, - "vpcId": { - "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", - "type": "string" + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" } } }, @@ -137411,11 +122703,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -137429,11 +122721,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -137743,225 +123035,76 @@ } } }, - "fargateProfiles": { - "type": "array", - "items": { - "description": "FargateProfile defines the desired state of FargateProfile", - "type": "object", - "required": [ - "name" - ], - "properties": { - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "name specifies the profile name.", - "type": "string" - }, - "selectors": { - "description": "Selectors specify fargate pod selectors.", - "type": "array", - "items": { - "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", - "type": "object", - "required": [ - "namespace" - ], - "properties": { - "labels": { - "description": "Labels specifies which pod labels this selector should match.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "namespace": { - "description": "Namespace specifies which namespace this selector should match.", - "type": "string" - } - } - } - }, - "subnetIds": { - "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, "machinepoolconfig": { "type": "array", "items": { + "type": "object", "properties": { "cloudConfig": { + "required": [ + "edgeHosts" + ], "properties": { - "awsLaunchTemplate": { - "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", - "type": "object", - "properties": { - "additionalSecurityGroups": { - "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", - "type": "array", - "uniqueItems": true, - "items": { - "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "edgeHosts": { + "type": "array", + "uniqueItems": true, + "items": { + "required": [ + "hostUid" + ], + "properties": { + "hostName": { + "description": "Edge host name", + "type": "string" + }, + "hostUid": { + "description": "Edge host id", + "type": "string" + }, + "nic": { "type": "object", "properties": { - "arn": { - "description": "ARN of resource", - "type": "string" - }, - "filters": { - "description": "Filters is a set of key/value pairs used to identify a resource", + "dns": { "type": "array", - "uniqueItems": true, "items": { - "description": "Filter is a filter used to identify an AWS resource", - "type": "object", - "properties": { - "name": { - "description": "Name of the filter. Filter names are case-sensitive", - "type": "string" - }, - "values": { - "description": "Values includes one or more filter values. Filter values are case-sensitive", - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } + "type": "string" } }, - "id": { - "description": "ID of resource", + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { "type": "string" } } - } - }, - "ami": { - "description": "AMI is the reference to the AMI from which to create the machine instance", - "type": "object", - "properties": { - "eksOptimizedLookupType": { - "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", - "type": "string", - "enum": [ - "AmazonLinux", - "AmazonLinuxGPU" - ] - }, - "id": { - "description": "ID of resource", - "type": "string" - } - } - }, - "imageLookupBaseOS": { - "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", - "type": "string" - }, - "imageLookupFormat": { - "description": "ImageLookupFormat is the AMI naming format to look up the image", - "type": "string" - }, - "imageLookupOrg": { - "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", - "type": "string" - }, - "rootVolume": { - "description": "Volume encapsulates the configuration options for the storage device.", - "type": "object", - "properties": { - "deviceName": { - "description": "Device name", - "type": "string" - }, - "encrypted": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "boolean" - }, - "encryptionKey": { - "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", - "type": "string" - }, - "iops": { - "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", - "type": "integer", - "format": "int64" - }, - "throughput": { - "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", - "type": "integer", - "format": "int64" - }, - "type": { - "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", - "type": "string" - } - } - } - } - }, - "azs": { - "type": "array", - "items": { - "type": "string" - } - }, - "capacityType": { - "description": "EC2 instance capacity type", - "type": "string", - "default": "on-demand", - "enum": [ - "on-demand", - "spot" - ] - }, - "enableAwsLaunchTemplate": { - "description": "flag to know if aws launch template is enabled", - "type": "boolean" - }, - "instanceType": { - "description": "instance type", - "type": "string" - }, - "rootDeviceSize": { - "description": "rootDeviceSize in GBs", - "type": "integer", - "format": "int64", - "maximum": 2000, - "minimum": 1 - }, - "spotMarketOptions": { - "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", - "type": "object", - "properties": { - "maxPrice": { - "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", - "type": "string" - } - } - }, - "subnets": { - "type": "array", - "items": { - "properties": { - "az": { + }, + "nicName": { + "description": "Deprecated - Edge host nic name", "type": "string" }, - "id": { + "staticIP": { + "description": "Deprecated - Edge host static IP", "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "type": "string", + "enum": [ + "primary", + "secondary" + ] } } } @@ -137997,7 +123140,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -138041,7 +123184,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -138087,7 +123230,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -138264,6 +123407,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -138282,7 +123445,7 @@ ], "responses": { "200": { - "description": "Eks Cluster validation response", + "description": "EdgeNative Cluster validation response", "schema": { "description": "Cluster validator response", "type": "object", @@ -138381,232 +123544,7 @@ } } }, - "/v1/spectroclusters/features/backup/locations/{uid}": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the cluster object references based on locationUid", - "operationId": "V1ClusterFeatureBackupLocationUidGet", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "Cluster Object References", - "properties": { - "clusters": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - } - } - } - } - } - }, - "put": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Change cluster backup location", - "operationId": "V1ClusterFeatureBackupLocationUidChange", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster backup location type", - "required": [ - "locationType" - ], - "properties": { - "locationType": { - "type": "string" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/features/logFetcher/{uid}/download": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "produces": [ - "application/octet-stream" - ], - "tags": [ - "v1" - ], - "summary": "Download log fetcher logs for cluster by log fetcher uid", - "operationId": "v1ClusterFeatureLogFetcherLogDownload", - "parameters": [ - { - "type": "string", - "name": "fileName", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "file" - }, - "headers": { - "Content-Disposition": { - "type": "string" - }, - "Content-Type": { - "type": "string" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster uid for which log is requested", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/features/logFetcher/{uid}/log": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "consumes": [ - "multipart/form-data" - ], - "tags": [ - "v1" - ], - "summary": "Update log fetcher logs by log fetcher uid", - "operationId": "v1ClusterFeatureLogFetcherLogUpdate", - "parameters": [ - { - "type": "file", - "description": "Log file by agent", - "name": "fileName", - "in": "formData" - }, - { - "type": "string", - "description": "Unique request Id", - "name": "requestId", - "in": "query" - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "Ok response without content", - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster uid for which log is requested", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/gcp": { + "/v1/spectroclusters/eks": { "post": { "security": [ { @@ -138619,14 +123557,14 @@ "tags": [ "v1" ], - "summary": "Creates a GCP cluster", - "operationId": "v1SpectroClustersGcpCreate", + "summary": "Creates an EKS cluster", + "operationId": "v1SpectroClustersEksCreate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "GCP cluster request payload for create and update", + "description": "Spectro EKS cluster request payload for create and update", "type": "object", "properties": { "metadata": { @@ -138634,7 +123572,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -138651,7 +123589,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -138663,11 +123601,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -138675,7 +123613,6 @@ "spec": { "type": "object", "required": [ - "cloudType", "cloudAccountUid", "cloudConfig" ], @@ -138685,37 +123622,109 @@ "type": "string" }, "cloudConfig": { - "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "description": "EksClusterConfig defines EKS specific config", "type": "object", "required": [ - "project", "region" ], "properties": { - "managedClusterConfig": { - "description": "GCP managed cluster config", + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "type": "array", + "items": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + } + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", "type": "object", "properties": { - "enableAutoPilot": { - "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", "type": "boolean" }, - "location": { - "description": "Can be Region or Zone", + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } } } }, - "network": { - "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "region": { + "description": "The AWS Region the cluster lives in.", "type": "string" }, - "project": { - "description": "Name of the project in which cluster is to be deployed", + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", "type": "string" }, - "region": { - "description": "GCP region for the cluster", + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", "type": "string" } } @@ -138789,11 +123798,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -138807,11 +123816,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -139121,37 +124130,215 @@ } } }, - "machinepoolconfig": { + "fargateProfiles": { "type": "array", "items": { + "description": "FargateProfile defines the desired state of FargateProfile", "type": "object", "required": [ - "cloudConfig" + "name" ], "properties": { - "cloudConfig": { + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", "type": "object", - "required": [ - "instanceType" - ], + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "name specifies the profile name.", + "type": "string" + }, + "selectors": { + "description": "Selectors specify fargate pod selectors.", + "type": "array", + "items": { + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "labels": { + "description": "Labels specifies which pod labels this selector should match.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", + "type": "string" + } + } + } + }, + "subnetIds": { + "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "properties": { + "cloudConfig": { "properties": { + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, "azs": { "type": "array", "items": { "type": "string" } }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, "instanceType": { + "description": "instance type", "type": "string" }, "rootDeviceSize": { - "description": "Size of root volume in GB. Default is 30GB", + "description": "rootDeviceSize in GBs", "type": "integer", - "format": "int64" + "format": "int64", + "maximum": 2000, + "minimum": 1 }, - "subnet": { - "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", - "type": "string" + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } }, "subnets": { "type": "array", @@ -139197,7 +124384,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -139241,7 +124428,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -139287,7 +124474,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -139464,129 +124651,25 @@ "uid": { "description": "Cluster profile uid", "type": "string" - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/spectroclusters/gcp/import": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Imports a GCP cluster", - "operationId": "v1SpectroClustersGcpImport", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro GCP cluster import request payload", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "clusterConfig": { - "type": "object", - "properties": { - "importMode": { - "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", - "type": "string", - "enum": [ - "read-only" - ] - }, - "proxy": { - "description": "cluster proxy config spec", - "type": "object", - "properties": { - "caContainerMountPath": { - "description": "Location to mount Proxy CA cert inside container", - "type": "string" - }, - "caHostPath": { - "description": "Location for Proxy CA cert on host nodes", - "type": "string" - }, - "httpProxy": { - "description": "URL for HTTP requests unless overridden by NoProxy", - "type": "string" - }, - "httpsProxy": { - "description": "HTTPS requests unless overridden by NoProxy", - "type": "string" - }, - "noProxy": { - "description": "NoProxy represents the NO_PROXY or no_proxy environment", - "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } } } } @@ -139628,7 +124711,7 @@ } } }, - "/v1/spectroclusters/gcp/rate": { + "/v1/spectroclusters/eks/rate": { "post": { "security": [ { @@ -139641,8 +124724,8 @@ "tags": [ "v1" ], - "summary": "Get GCP cluster estimated rate information", - "operationId": "v1SpectroClustersGcpRate", + "summary": "Get EKS cluster estimated rate information", + "operationId": "v1SpectroClustersEksRate", "parameters": [ { "enum": [ @@ -139659,41 +124742,113 @@ "name": "body", "in": "body", "schema": { - "description": "Gcp cluster request payload for estimating rate", + "description": "Spectro EKS cluster request payload for estimating rate", "type": "object", "properties": { "cloudConfig": { - "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "description": "EksClusterConfig defines EKS specific config", "type": "object", "required": [ - "project", "region" ], "properties": { - "managedClusterConfig": { - "description": "GCP managed cluster config", + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "type": "array", + "items": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + } + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", "type": "object", "properties": { - "enableAutoPilot": { - "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", "type": "boolean" }, - "location": { - "description": "Can be Region or Zone", + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } } } }, - "network": { - "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "region": { + "description": "The AWS Region the cluster lives in.", "type": "string" }, - "project": { - "description": "Name of the project in which cluster is to be deployed", + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", "type": "string" }, - "region": { - "description": "GCP region for the cluster", + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", "type": "string" } } @@ -139701,34 +124856,158 @@ "machinepoolconfig": { "type": "array", "items": { - "type": "object", - "required": [ - "cloudConfig" - ], "properties": { "cloudConfig": { - "type": "object", - "required": [ - "instanceType" - ], "properties": { + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, "azs": { "type": "array", "items": { "type": "string" } }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, "instanceType": { + "description": "instance type", "type": "string" }, "rootDeviceSize": { - "description": "Size of root volume in GB. Default is 30GB", + "description": "rootDeviceSize in GBs", "type": "integer", - "format": "int64" + "format": "int64", + "maximum": 2000, + "minimum": 1 }, - "subnet": { - "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", - "type": "string" + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } }, "subnets": { "type": "array", @@ -139774,7 +125053,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -139818,7 +125097,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -139864,7 +125143,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -139885,7 +125164,7 @@ ], "responses": { "200": { - "description": "Gcp Cluster estimated rate response", + "description": "Eks Cluster estimated rate response", "schema": { "description": "Cluster estimated rate information", "type": "object", @@ -140188,7 +125467,7 @@ } } }, - "/v1/spectroclusters/gcp/validate": { + "/v1/spectroclusters/eks/validate": { "post": { "security": [ { @@ -140201,14 +125480,14 @@ "tags": [ "v1" ], - "summary": "Validates GCP cluster create operation", - "operationId": "v1SpectroClustersGcpValidate", + "summary": "Validates EKS cluster create operation", + "operationId": "v1SpectroClustersEksValidate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "GCP cluster request payload for create and update", + "description": "Spectro EKS cluster request payload for create and update", "type": "object", "properties": { "metadata": { @@ -140216,7 +125495,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -140233,7 +125512,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -140245,11 +125524,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -140257,7 +125536,6 @@ "spec": { "type": "object", "required": [ - "cloudType", "cloudAccountUid", "cloudConfig" ], @@ -140267,37 +125545,109 @@ "type": "string" }, "cloudConfig": { - "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "description": "EksClusterConfig defines EKS specific config", "type": "object", "required": [ - "project", "region" ], "properties": { - "managedClusterConfig": { - "description": "GCP managed cluster config", + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "type": "array", + "items": { + "description": "EksAddon represents a EKS addon", + "type": "object", + "required": [ + "name", + "version" + ], + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + } + } + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", "type": "object", "properties": { - "enableAutoPilot": { - "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", "type": "boolean" }, - "location": { - "description": "Can be Region or Zone", + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "type": "array", + "items": { + "type": "string" + } } } }, - "network": { - "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "endpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "type": "object", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "type": "array", + "items": { + "type": "string" + } + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "region": { + "description": "The AWS Region the cluster lives in.", "type": "string" }, - "project": { - "description": "Name of the project in which cluster is to be deployed", + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", "type": "string" }, - "region": { - "description": "GCP region for the cluster", + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", "type": "string" } } @@ -140371,11 +125721,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -140389,11 +125739,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -140703,37 +126053,215 @@ } } }, - "machinepoolconfig": { + "fargateProfiles": { "type": "array", "items": { + "description": "FargateProfile defines the desired state of FargateProfile", "type": "object", "required": [ - "cloudConfig" + "name" ], "properties": { - "cloudConfig": { + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", "type": "object", - "required": [ - "instanceType" - ], + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "name specifies the profile name.", + "type": "string" + }, + "selectors": { + "description": "Selectors specify fargate pod selectors.", + "type": "array", + "items": { + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", + "type": "object", + "required": [ + "namespace" + ], + "properties": { + "labels": { + "description": "Labels specifies which pod labels this selector should match.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", + "type": "string" + } + } + } + }, + "subnetIds": { + "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "properties": { + "cloudConfig": { "properties": { + "awsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "type": "object", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "type": "array", + "uniqueItems": true, + "items": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "type": "object", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Filter is a filter used to identify an AWS resource", + "type": "object", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + } + } + } + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + } + }, + "ami": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "type": "object", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "type": "string", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ] + }, + "id": { + "description": "ID of resource", + "type": "string" + } + } + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "type": "object", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "type": "integer", + "format": "int64" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "type": "integer", + "format": "int64" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + } + } + } + }, "azs": { "type": "array", "items": { "type": "string" } }, + "capacityType": { + "description": "EC2 instance capacity type", + "type": "string", + "default": "on-demand", + "enum": [ + "on-demand", + "spot" + ] + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, "instanceType": { + "description": "instance type", "type": "string" }, "rootDeviceSize": { - "description": "Size of root volume in GB. Default is 30GB", + "description": "rootDeviceSize in GBs", "type": "integer", - "format": "int64" + "format": "int64", + "maximum": 2000, + "minimum": 1 }, - "subnet": { - "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", - "type": "string" + "spotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "type": "object", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + } }, "subnets": { "type": "array", @@ -140779,7 +126307,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -140823,7 +126351,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -140869,7 +126397,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -141046,6 +126574,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -141064,7 +126612,7 @@ ], "responses": { "200": { - "description": "Gcp Cluster validation response", + "description": "Eks Cluster validation response", "schema": { "description": "Cluster validator response", "type": "object", @@ -141163,8 +126711,8 @@ } } }, - "/v1/spectroclusters/generic/import": { - "post": { + "/v1/spectroclusters/features/backup/locations/{uid}": { + "get": { "security": [ { "ApiKey": [] @@ -141173,138 +126721,105 @@ "Authorization": [] } ], - "description": "The machines information will be captured, whereas the cloud specific configuration info will not be retrieved", "tags": [ "v1" ], - "summary": "Imports a cluster of any cloud type in generic way", - "operationId": "v1SpectroClustersGenericImport", + "summary": "Returns the cluster object references based on locationUid", + "operationId": "V1ClusterFeatureBackupLocationUidGet", "parameters": [ { - "name": "body", - "in": "body", + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", "schema": { - "description": "Spectro generic cluster import request payload", - "type": "object", + "description": "Cluster Object References", "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { + "clusters": { + "type": "array", + "items": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "type": "object", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "clusterConfig": { - "type": "object", - "properties": { - "importMode": { - "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", - "type": "string", - "enum": [ - "read-only" - ] - }, - "proxy": { - "description": "cluster proxy config spec", - "type": "object", - "properties": { - "caContainerMountPath": { - "description": "Location to mount Proxy CA cert inside container", - "type": "string" - }, - "caHostPath": { - "description": "Location for Proxy CA cert on host nodes", - "type": "string" - }, - "httpProxy": { - "description": "URL for HTTP requests unless overridden by NoProxy", - "type": "string" - }, - "httpsProxy": { - "description": "HTTPS requests unless overridden by NoProxy", - "type": "string" - }, - "noProxy": { - "description": "NoProxy represents the NO_PROXY or no_proxy environment", - "type": "string" - } - } - } - } - }, - "edgeConfig": { - "type": "object", - "properties": { - "edgeHostUid": { - "description": "Deprecated. Use 'edgeHostUids' field", - "type": "string" - }, - "edgeHostUids": { - "type": "array", - "items": { - "type": "string" - } - } } } } } } } + } + } + }, + "put": { + "security": [ + { + "ApiKey": [] }, { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" + "Authorization": [] } ], - "responses": { - "201": { - "description": "Created successfully", + "tags": [ + "v1" + ], + "summary": "Change cluster backup location", + "operationId": "V1ClusterFeatureBackupLocationUidChange", + "parameters": [ + { + "name": "body", + "in": "body", "schema": { - "type": "object", + "description": "Cluster backup location type", "required": [ - "uid" + "locationType" ], "properties": { - "uid": { + "locationType": { "type": "string" } } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" } } - } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] }, - "/v1/spectroclusters/generic/rate": { - "post": { + "/v1/spectroclusters/features/logFetcher/{uid}/download": { + "get": { "security": [ { "ApiKey": [] @@ -141313,230 +126828,84 @@ "Authorization": [] } ], + "produces": [ + "application/octet-stream" + ], "tags": [ "v1" ], - "summary": "Get generic cluster estimated rate information", - "operationId": "v1SpectroClustersGenericRate", + "summary": "Download log fetcher logs for cluster by log fetcher uid", + "operationId": "v1ClusterFeatureLogFetcherLogDownload", "parameters": [ { - "enum": [ - "hourly", - "monthly", - "yearly" - ], "type": "string", - "default": "hourly", - "name": "periodType", + "name": "fileName", "in": "query" }, { - "name": "body", - "in": "body", + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", "schema": { - "description": "Generic cluster request payload for estimating rate", - "type": "object", - "properties": { - "cloudConfig": { - "description": "Generic cluster config", - "type": "object", - "properties": { - "instanceType": { - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, - "region": { - "description": "cluster region information", - "type": "string" - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "properties": { - "cloudConfig": { - "description": "Generic cluster config", - "type": "object", - "properties": { - "instanceType": { - "type": "object", - "properties": { - "diskGiB": { - "description": "DiskGiB is the size of a virtual machine's disk, in GiB", - "type": "integer", - "format": "int32" - }, - "memoryMiB": { - "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", - "type": "integer", - "format": "int64" - }, - "name": { - "type": "string" - }, - "numCPUs": { - "description": "NumCPUs is the number of virtual processors in a virtual machine", - "type": "integer", - "format": "int32" - } - } - }, - "region": { - "description": "cluster region information", - "type": "string" - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - } + "type": "file" + }, + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" } } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid for which log is requested", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/features/logFetcher/{uid}/log": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "consumes": [ + "multipart/form-data" + ], + "tags": [ + "v1" + ], + "summary": "Update log fetcher logs by log fetcher uid", + "operationId": "v1ClusterFeatureLogFetcherLogUpdate", + "parameters": [ + { + "type": "file", + "description": "Log file by agent", + "name": "fileName", + "in": "formData" + }, + { + "type": "string", + "description": "Unique request Id", + "name": "requestId", + "in": "query" }, { "type": "string", @@ -141546,311 +126915,28 @@ } ], "responses": { - "200": { - "description": "Genric Cluster estimated rate response", - "schema": { - "description": "Cluster estimated rate information", - "type": "object", - "properties": { - "machinePools": { - "type": "array", - "items": { - "description": "Machine pool estimated rate information", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "nodesCount": { - "type": "integer", - "format": "int32" - }, - "rate": { - "description": "Cloud estimated rate information", - "type": "object", - "properties": { - "compute": { - "description": "Compute estimated rate information", - "type": "object", - "properties": { - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "type": { - "type": "string" - } - } - }, - "storage": { - "type": "array", - "items": { - "description": "Storage estimated rate information", - "type": "object", - "properties": { - "iops": { - "type": "number", - "format": "float64" - }, - "rate": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "sizeGB": { - "type": "number", - "format": "float64" - }, - "throughput": { - "type": "number", - "format": "float64" - }, - "type": { - "type": "string" - } - } - } - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - } - } - } - }, - "name": { - "type": "string" - }, - "rate": { - "description": "Cluster total estimated rate information", - "type": "object", - "properties": { - "compute": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "storage": { - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "total": { - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "resourceMetadata": { - "description": "Cloud resource metadata", - "type": "object", - "properties": { - "instanceTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud Instance type details", - "type": "object", - "properties": { - "category": { - "description": "Category of instance type", - "type": "string", - "x-go-name": "Category" - }, - "cost": { - "description": "Instance cost entity", - "type": "object", - "properties": { - "price": { - "description": "Array of cloud instance price", - "type": "array", - "items": { - "description": "Cloud instance price", - "type": "object", - "properties": { - "onDemand": { - "description": "OnDemand price of instance", - "type": "number", - "format": "double" - }, - "os": { - "description": "Os associated with instance price. Allowed values - [linux, windows]", - "type": "string", - "enum": [ - "linux", - "windows" - ] - }, - "spot": { - "description": "Spot price of instance", - "type": "number", - "format": "double" - } - } - } - } - } - }, - "cpu": { - "description": "Cpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Cpu" - }, - "gpu": { - "description": "Gpu of instance type", - "type": "number", - "format": "double", - "x-go-name": "Gpu" - }, - "memory": { - "description": "Memory of instance type", - "type": "number", - "format": "double", - "x-go-name": "Memory" - }, - "nonSupportedZones": { - "description": "Non supported zones of the instance in a particular region", - "type": "array", - "items": { - "type": "string" - } - }, - "price": { - "description": "Price of instance type", - "type": "number", - "format": "double", - "x-go-name": "Price" - }, - "supportedArchitectures": { - "description": "Supported architecture of the instance", - "type": "array", - "items": { - "type": "string" - } - }, - "type": { - "description": "Type of instance type", - "type": "string", - "x-go-name": "Type" - } - } - } - }, - "storageTypes": { - "type": "object", - "additionalProperties": { - "description": "Cloud cloud Storage type details", - "type": "object", - "properties": { - "cost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "iopsCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - }, - "kind": { - "description": "kind of storage type", - "type": "string" - }, - "name": { - "description": "Name of the storage type", - "type": "string" - }, - "throughputCost": { - "description": "Cloud storage cost", - "type": "object", - "properties": { - "discountedUsage": { - "description": "Cloud storage upper limit which is free.", - "type": "string" - }, - "price": { - "description": "Array of cloud storage range prices", - "type": "array", - "items": { - "description": "Cloud storage price within an upper limit.", - "type": "object", - "properties": { - "limit": { - "description": "Upper limit of cloud storage usage", - "type": "string" - }, - "price": { - "description": "Price of cloud storage type", - "type": "string" - } - } - } - } - } - } - } - } - } - } - } + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" } } } } - } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid for which log is requested", + "name": "uid", + "in": "path", + "required": true + } + ] }, - "/v1/spectroclusters/gke": { + "/v1/spectroclusters/gcp": { "post": { "security": [ { @@ -141863,8 +126949,8 @@ "tags": [ "v1" ], - "summary": "Creates an GKE cluster", - "operationId": "v1SpectroClustersGkeCreate", + "summary": "Creates a GCP cluster", + "operationId": "v1SpectroClustersGcpCreate", "parameters": [ { "name": "body", @@ -141878,7 +126964,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -141895,7 +126981,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -141907,11 +126993,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -142033,11 +127119,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -142051,11 +127137,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -142441,7 +127527,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -142485,7 +127571,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -142531,7 +127617,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -142708,6 +127794,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -142748,7 +127854,7 @@ } } }, - "/v1/spectroclusters/gke/rate": { + "/v1/spectroclusters/gcp/import": { "post": { "security": [ { @@ -142761,8 +127867,132 @@ "tags": [ "v1" ], - "summary": "Get GKE cluster estimated rate information", - "operationId": "v1SpectroClustersGkeRate", + "summary": "Imports a GCP cluster", + "operationId": "v1SpectroClustersGcpImport", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro GCP cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/gcp/rate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get GCP cluster estimated rate information", + "operationId": "v1SpectroClustersGcpRate", "parameters": [ { "enum": [ @@ -142894,7 +128124,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -142938,7 +128168,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -142984,7 +128214,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -143005,7 +128235,7 @@ ], "responses": { "200": { - "description": "Gke Cluster estimated rate response", + "description": "Gcp Cluster estimated rate response", "schema": { "description": "Cluster estimated rate information", "type": "object", @@ -143308,7 +128538,7 @@ } } }, - "/v1/spectroclusters/gke/validate": { + "/v1/spectroclusters/gcp/validate": { "post": { "security": [ { @@ -143321,8 +128551,8 @@ "tags": [ "v1" ], - "summary": "Validates GKE cluster create operation", - "operationId": "v1SpectroClustersGkeValidate", + "summary": "Validates GCP cluster create operation", + "operationId": "v1SpectroClustersGcpValidate", "parameters": [ { "name": "body", @@ -143336,7 +128566,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -143353,7 +128583,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -143365,11 +128595,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -143491,11 +128721,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -143509,11 +128739,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -143899,7 +129129,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -143943,7 +129173,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -143989,7 +129219,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -144166,6 +129396,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -144184,7 +129434,7 @@ ], "responses": { "200": { - "description": "Gke Cluster validation response", + "description": "Gcp Cluster validation response", "schema": { "description": "Cluster validator response", "type": "object", @@ -144283,7 +129533,694 @@ } } }, - "/v1/spectroclusters/libvirt": { + "/v1/spectroclusters/generic/import": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "description": "The machines information will be captured, whereas the cloud specific configuration info will not be retrieved", + "tags": [ + "v1" + ], + "summary": "Imports a cluster of any cloud type in generic way", + "operationId": "v1SpectroClustersGenericImport", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Spectro generic cluster import request payload", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "clusterConfig": { + "type": "object", + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "type": "string", + "enum": [ + "read-only" + ] + }, + "proxy": { + "description": "cluster proxy config spec", + "type": "object", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + } + } + } + }, + "edgeConfig": { + "type": "object", + "properties": { + "edgeHostUid": { + "description": "Deprecated. Use 'edgeHostUids' field", + "type": "string" + }, + "edgeHostUids": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + } + }, + "/v1/spectroclusters/generic/rate": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get generic cluster estimated rate information", + "operationId": "v1SpectroClustersGenericRate", + "parameters": [ + { + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "type": "string", + "default": "hourly", + "name": "periodType", + "in": "query" + }, + { + "name": "body", + "in": "body", + "schema": { + "description": "Generic cluster request payload for estimating rate", + "type": "object", + "properties": { + "cloudConfig": { + "description": "Generic cluster config", + "type": "object", + "properties": { + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "region": { + "description": "cluster region information", + "type": "string" + } + } + }, + "machinepoolconfig": { + "type": "array", + "items": { + "properties": { + "cloudConfig": { + "description": "Generic cluster config", + "type": "object", + "properties": { + "instanceType": { + "type": "object", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "type": "integer", + "format": "int32" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "type": "integer", + "format": "int32" + } + } + }, + "region": { + "description": "cluster region information", + "type": "string" + } + } + }, + "poolConfig": { + "description": "Machine pool configuration for the cluster", + "type": "object", + "required": [ + "name", + "size", + "labels" + ], + "properties": { + "additionalLabels": { + "description": "Additional labels to be part of the machine pool", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "additionalTags": { + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "type": "array", + "items": { + "type": "string" + } + }, + "machinePoolProperties": { + "description": "Machine pool specific properties", + "type": "object", + "properties": { + "archType": { + "type": "string", + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ] + } + } + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "type": "integer", + "format": "int32" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "type": "integer", + "format": "int32" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "type": "integer", + "format": "int32" + }, + "taints": { + "description": "control plane or worker taints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Taint", + "type": "object", + "properties": { + "effect": { + "type": "string", + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ] + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + } + } + }, + "updateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "type": "object", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "type": "string", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ] + } + } + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "Genric Cluster estimated rate response", + "schema": { + "description": "Cluster estimated rate information", + "type": "object", + "properties": { + "machinePools": { + "type": "array", + "items": { + "description": "Machine pool estimated rate information", + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "nodesCount": { + "type": "integer", + "format": "int32" + }, + "rate": { + "description": "Cloud estimated rate information", + "type": "object", + "properties": { + "compute": { + "description": "Compute estimated rate information", + "type": "object", + "properties": { + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "type": { + "type": "string" + } + } + }, + "storage": { + "type": "array", + "items": { + "description": "Storage estimated rate information", + "type": "object", + "properties": { + "iops": { + "type": "number", + "format": "float64" + }, + "rate": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "sizeGB": { + "type": "number", + "format": "float64" + }, + "throughput": { + "type": "number", + "format": "float64" + }, + "type": { + "type": "string" + } + } + } + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + } + } + } + }, + "name": { + "type": "string" + }, + "rate": { + "description": "Cluster total estimated rate information", + "type": "object", + "properties": { + "compute": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "storage": { + "type": "number", + "format": "float64", + "x-omitempty": false + }, + "total": { + "type": "number", + "format": "float64", + "x-omitempty": false + } + } + }, + "resourceMetadata": { + "description": "Cloud resource metadata", + "type": "object", + "properties": { + "instanceTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud Instance type details", + "type": "object", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "description": "Instance cost entity", + "type": "object", + "properties": { + "price": { + "description": "Array of cloud instance price", + "type": "array", + "items": { + "description": "Cloud instance price", + "type": "object", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "type": "number", + "format": "double" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "type": "string", + "enum": [ + "linux", + "windows" + ] + }, + "spot": { + "description": "Spot price of instance", + "type": "number", + "format": "double" + } + } + } + } + } + }, + "cpu": { + "description": "Cpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "type": "number", + "format": "double", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "type": "number", + "format": "double", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "type": "array", + "items": { + "type": "string" + } + }, + "price": { + "description": "Price of instance type", + "type": "number", + "format": "double", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "type": "array", + "items": { + "type": "string" + } + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + } + } + }, + "storageTypes": { + "type": "object", + "additionalProperties": { + "description": "Cloud cloud Storage type details", + "type": "object", + "properties": { + "cost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "iopsCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "description": "Cloud storage cost", + "type": "object", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "type": "array", + "items": { + "description": "Cloud storage price within an upper limit.", + "type": "object", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/v1/spectroclusters/gke": { "post": { "security": [ { @@ -144296,14 +130233,14 @@ "tags": [ "v1" ], - "summary": "Creates a Libvirt cluster", - "operationId": "v1SpectroClustersLibvirtCreate", + "summary": "Creates an GKE cluster", + "operationId": "v1SpectroClustersGkeCreate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Libvirt cluster request payload for create and update", + "description": "GCP cluster request payload for create and update", "type": "object", "properties": { "metadata": { @@ -144311,7 +130248,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -144328,7 +130265,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -144340,55 +130277,60 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, "cloudConfig": { + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", "type": "object", + "required": [ + "project", + "region" + ], "properties": { - "controlPlaneEndpoint": { + "managedClusterConfig": { + "description": "GCP managed cluster config", "type": "object", "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", - "type": "string" - }, - "host": { - "description": "Host is FQDN(DDNS) or IP", - "type": "string" + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" }, - "type": { - "description": "Type indicates DDNS or VIP", + "location": { + "description": "Can be Region or Zone", "type": "string" } } }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", - "type": "array", - "items": { - "type": "string" - } + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" }, - "staticIp": { - "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", - "type": "boolean" + "region": { + "description": "GCP region for the cluster", + "type": "string" } } }, @@ -144461,11 +130403,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -144479,11 +130421,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -144797,183 +130739,46 @@ "type": "array", "items": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { + "type": "object", "required": [ - "instanceType", - "placements", - "rootDiskInGB" + "instanceType" ], "properties": { - "instanceType": { - "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "cpuPassthroughSpec": { - "type": "object", - "properties": { - "cachePassthrough": { - "type": "boolean" - }, - "isEnabled": { - "description": "Enables the CPU Passthrough for the libvirt domain", - "type": "boolean" - } - } - }, - "cpuset": { - "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", - "type": "string" - }, - "gpuConfig": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deviceModel": { - "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "numGPUs": { - "description": "NumGPUs is the number of GPUs", - "type": "integer", - "format": "int32" - }, - "vendorName": { - "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - }, - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } - }, - "nonRootDisksInGB": { - "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "azs": { "type": "array", "items": { - "type": "object", - "required": [ - "sizeInGB" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "managed": { - "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", - "type": "boolean" - }, - "sizeInGB": { - "description": "SizeInGB is the target size in GB of the disk to be added", - "type": "integer", - "format": "int32" - } - } + "type": "string" } }, - "placements": { - "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "instanceType": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnets": { "type": "array", - "uniqueItems": true, "items": { - "description": "Libvirt placement config", - "type": "object", - "required": [ - "hostUid" - ], "properties": { - "dataStoragePool": { - "type": "string" - }, - "gpuDevices": { - "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", - "type": "array", - "items": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "model": { - "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "vendor": { - "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - } - }, - "hostUid": { - "type": "string" - }, - "networks": { - "type": "array", - "items": { - "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", - "type": "object", - "required": [ - "networkName", - "networkType" - ], - "properties": { - "networkName": { - "description": "NetworkName of the libvirt network where this machine will be connected", - "type": "string" - }, - "networkType": { - "description": "NetworkType specifies the type of network", - "type": "string", - "enum": [ - "default", - "bridge" - ] - } - } - } - }, - "sourceStoragePool": { + "az": { "type": "string" }, - "targetStoragePool": { + "id": { "type": "string" } } } - }, - "rootDiskInGB": { - "description": "RootDiskInGB is the size of a vm's root disk, in GiB", - "type": "integer", - "format": "int32" - }, - "xslTemplate": { - "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", - "type": "string" } } }, @@ -145006,7 +130811,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -145050,7 +130855,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -145096,7 +130901,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -145273,129 +131078,25 @@ "uid": { "description": "Cluster profile uid", "type": "string" - } - } - } - } - } - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - } - }, - "/v1/spectroclusters/libvirt/import": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Imports a libvirt cluster", - "operationId": "v1SpectroClustersLibvirtImport", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Spectro Libvirt cluster import request payload", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "clusterConfig": { - "type": "object", - "properties": { - "importMode": { - "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", - "type": "string", - "enum": [ - "read-only" - ] - }, - "proxy": { - "description": "cluster proxy config spec", - "type": "object", - "properties": { - "caContainerMountPath": { - "description": "Location to mount Proxy CA cert inside container", - "type": "string" - }, - "caHostPath": { - "description": "Location for Proxy CA cert on host nodes", - "type": "string" - }, - "httpProxy": { - "description": "URL for HTTP requests unless overridden by NoProxy", - "type": "string" - }, - "httpsProxy": { - "description": "HTTPS requests unless overridden by NoProxy", - "type": "string" - }, - "noProxy": { - "description": "NoProxy represents the NO_PROXY or no_proxy environment", - "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } } } } @@ -145437,7 +131138,7 @@ } } }, - "/v1/spectroclusters/libvirt/rate": { + "/v1/spectroclusters/gke/rate": { "post": { "security": [ { @@ -145450,8 +131151,8 @@ "tags": [ "v1" ], - "summary": "Get libvirt cluster estimated rate information", - "operationId": "v1SpectroClustersLibvirtRate", + "summary": "Get GKE cluster estimated rate information", + "operationId": "v1SpectroClustersGkeRate", "parameters": [ { "enum": [ @@ -145468,46 +131169,42 @@ "name": "body", "in": "body", "schema": { - "description": "libvirt cluster request payload for estimating rate", + "description": "Gcp cluster request payload for estimating rate", "type": "object", "properties": { "cloudConfig": { + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", "type": "object", + "required": [ + "project", + "region" + ], "properties": { - "controlPlaneEndpoint": { + "managedClusterConfig": { + "description": "GCP managed cluster config", "type": "object", "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", - "type": "string" - }, - "host": { - "description": "Host is FQDN(DDNS) or IP", - "type": "string" + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" }, - "type": { - "description": "Type indicates DDNS or VIP", + "location": { + "description": "Can be Region or Zone", "type": "string" } } }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", - "type": "array", - "items": { - "type": "string" - } + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" }, - "staticIp": { - "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", - "type": "boolean" + "region": { + "description": "GCP region for the cluster", + "type": "string" } } }, @@ -145515,183 +131212,46 @@ "type": "array", "items": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { + "type": "object", "required": [ - "instanceType", - "placements", - "rootDiskInGB" + "instanceType" ], "properties": { - "instanceType": { - "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "cpuPassthroughSpec": { - "type": "object", - "properties": { - "cachePassthrough": { - "type": "boolean" - }, - "isEnabled": { - "description": "Enables the CPU Passthrough for the libvirt domain", - "type": "boolean" - } - } - }, - "cpuset": { - "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", - "type": "string" - }, - "gpuConfig": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deviceModel": { - "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "numGPUs": { - "description": "NumGPUs is the number of GPUs", - "type": "integer", - "format": "int32" - }, - "vendorName": { - "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - }, - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } - }, - "nonRootDisksInGB": { - "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "azs": { "type": "array", "items": { - "type": "object", - "required": [ - "sizeInGB" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "managed": { - "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", - "type": "boolean" - }, - "sizeInGB": { - "description": "SizeInGB is the target size in GB of the disk to be added", - "type": "integer", - "format": "int32" - } - } + "type": "string" } }, - "placements": { - "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "instanceType": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnets": { "type": "array", - "uniqueItems": true, "items": { - "description": "Libvirt placement config", - "type": "object", - "required": [ - "hostUid" - ], "properties": { - "dataStoragePool": { - "type": "string" - }, - "gpuDevices": { - "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", - "type": "array", - "items": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "model": { - "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "vendor": { - "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - } - }, - "hostUid": { - "type": "string" - }, - "networks": { - "type": "array", - "items": { - "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", - "type": "object", - "required": [ - "networkName", - "networkType" - ], - "properties": { - "networkName": { - "description": "NetworkName of the libvirt network where this machine will be connected", - "type": "string" - }, - "networkType": { - "description": "NetworkType specifies the type of network", - "type": "string", - "enum": [ - "default", - "bridge" - ] - } - } - } - }, - "sourceStoragePool": { + "az": { "type": "string" }, - "targetStoragePool": { + "id": { "type": "string" } } } - }, - "rootDiskInGB": { - "description": "RootDiskInGB is the size of a vm's root disk, in GiB", - "type": "integer", - "format": "int32" - }, - "xslTemplate": { - "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", - "type": "string" } } }, @@ -145724,7 +131284,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -145768,7 +131328,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -145814,7 +131374,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -145835,7 +131395,7 @@ ], "responses": { "200": { - "description": "Libvirt Cluster estimated rate response", + "description": "Gke Cluster estimated rate response", "schema": { "description": "Cluster estimated rate information", "type": "object", @@ -146138,7 +131698,7 @@ } } }, - "/v1/spectroclusters/libvirt/validate": { + "/v1/spectroclusters/gke/validate": { "post": { "security": [ { @@ -146151,14 +131711,14 @@ "tags": [ "v1" ], - "summary": "Validates libvirt cluster create operation", - "operationId": "v1SpectroClustersLibvirtValidate", + "summary": "Validates GKE cluster create operation", + "operationId": "v1SpectroClustersGkeValidate", "parameters": [ { "name": "body", "in": "body", "schema": { - "description": "Libvirt cluster request payload for create and update", + "description": "GCP cluster request payload for create and update", "type": "object", "properties": { "metadata": { @@ -146166,7 +131726,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -146183,7 +131743,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -146195,55 +131755,60 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } }, "spec": { "type": "object", + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, "cloudConfig": { + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", "type": "object", + "required": [ + "project", + "region" + ], "properties": { - "controlPlaneEndpoint": { + "managedClusterConfig": { + "description": "GCP managed cluster config", "type": "object", "properties": { - "ddnsSearchDomain": { - "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", - "type": "string" - }, - "host": { - "description": "Host is FQDN(DDNS) or IP", - "type": "string" + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" }, - "type": { - "description": "Type indicates DDNS or VIP", + "location": { + "description": "Can be Region or Zone", "type": "string" } } }, - "ntpServers": { - "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", - "type": "array", - "items": { - "type": "string" - } + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" }, - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" }, - "staticIp": { - "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", - "type": "boolean" + "region": { + "description": "GCP region for the cluster", + "type": "string" } } }, @@ -146316,11 +131881,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -146334,11 +131899,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -146652,183 +132217,46 @@ "type": "array", "items": { "type": "object", + "required": [ + "cloudConfig" + ], "properties": { "cloudConfig": { + "type": "object", "required": [ - "instanceType", - "placements", - "rootDiskInGB" + "instanceType" ], "properties": { - "instanceType": { - "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "cpuPassthroughSpec": { - "type": "object", - "properties": { - "cachePassthrough": { - "type": "boolean" - }, - "isEnabled": { - "description": "Enables the CPU Passthrough for the libvirt domain", - "type": "boolean" - } - } - }, - "cpuset": { - "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", - "type": "string" - }, - "gpuConfig": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "deviceModel": { - "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "numGPUs": { - "description": "NumGPUs is the number of GPUs", - "type": "integer", - "format": "int32" - }, - "vendorName": { - "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - }, - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } - }, - "nonRootDisksInGB": { - "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "azs": { "type": "array", "items": { - "type": "object", - "required": [ - "sizeInGB" - ], - "properties": { - "dataStoragePool": { - "description": "DataStoragePool is the storage pool from which additional disks are assigned", - "type": "string" - }, - "managed": { - "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", - "type": "boolean" - }, - "sizeInGB": { - "description": "SizeInGB is the target size in GB of the disk to be added", - "type": "integer", - "format": "int32" - } - } + "type": "string" } }, - "placements": { - "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "instanceType": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "type": "integer", + "format": "int64" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnets": { "type": "array", - "uniqueItems": true, "items": { - "description": "Libvirt placement config", - "type": "object", - "required": [ - "hostUid" - ], "properties": { - "dataStoragePool": { - "type": "string" - }, - "gpuDevices": { - "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", - "type": "array", - "items": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "model": { - "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "vendor": { - "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - } - }, - "hostUid": { - "type": "string" - }, - "networks": { - "type": "array", - "items": { - "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", - "type": "object", - "required": [ - "networkName", - "networkType" - ], - "properties": { - "networkName": { - "description": "NetworkName of the libvirt network where this machine will be connected", - "type": "string" - }, - "networkType": { - "description": "NetworkType specifies the type of network", - "type": "string", - "enum": [ - "default", - "bridge" - ] - } - } - } - }, - "sourceStoragePool": { + "az": { "type": "string" }, - "targetStoragePool": { + "id": { "type": "string" } } } - }, - "rootDiskInGB": { - "description": "RootDiskInGB is the size of a vm's root disk, in GiB", - "type": "integer", - "format": "int32" - }, - "xslTemplate": { - "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", - "type": "string" } } }, @@ -146861,7 +132289,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -146905,7 +132333,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -146951,7 +132379,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -147128,6 +132556,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -147146,7 +132594,7 @@ ], "responses": { "200": { - "description": "Libvirt Cluster validation response", + "description": "Gke Cluster validation response", "schema": { "description": "Cluster validator response", "type": "object", @@ -147273,7 +132721,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -147290,7 +132738,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -147302,11 +132750,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -147412,11 +132860,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -147430,11 +132878,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -147822,7 +133270,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -147866,7 +133314,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -147912,7 +133360,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -148089,6 +133537,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -148157,21 +133625,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -148385,7 +133853,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -148429,7 +133897,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -148475,7 +133943,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -148827,7 +134295,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -148844,7 +134312,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -148856,11 +134324,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -148966,11 +134434,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -148984,11 +134452,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -149376,7 +134844,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -149420,7 +134888,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -149466,7 +134934,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -149643,6 +135111,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -149788,7 +135276,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -149805,7 +135293,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -149817,11 +135305,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -149977,11 +135465,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -149995,11 +135483,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -150324,7 +135812,7 @@ ], "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -150403,7 +135891,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -150447,7 +135935,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -150493,7 +135981,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -150670,6 +136158,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -150738,21 +136246,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -150954,7 +136462,7 @@ ], "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -151033,7 +136541,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -151077,7 +136585,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -151123,7 +136631,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -151475,7 +136983,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -151492,7 +137000,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -151504,11 +137012,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -151664,11 +137172,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -151682,11 +137190,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -152011,7 +137519,7 @@ ], "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -152090,7 +137598,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -152134,7 +137642,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -152180,7 +137688,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -152357,6 +137865,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -152505,21 +138033,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -152669,7 +138197,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -152686,7 +138214,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -152698,11 +138226,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -152847,11 +138375,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -152865,11 +138393,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -153245,7 +138773,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -153289,7 +138817,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -153335,7 +138863,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -153512,6 +139040,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -153711,7 +139259,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -153755,7 +139303,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -153801,7 +139349,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -154153,7 +139701,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -154170,7 +139718,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -154182,11 +139730,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -154331,11 +139879,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -154349,11 +139897,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -154729,7 +140277,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -154773,7 +140321,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -154819,7 +140367,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -154996,6 +140544,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -155292,6 +140860,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -155435,7 +141023,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -155452,7 +141040,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -155464,11 +141052,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -155604,11 +141192,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -155622,11 +141210,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -156158,6 +141746,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -156291,7 +141899,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -156308,7 +141916,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -156320,11 +141928,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -156460,11 +142068,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -156478,11 +142086,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -157014,6 +142622,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -157159,7 +142787,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -157176,7 +142804,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -157188,11 +142816,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -157382,11 +143010,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -157400,11 +143028,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -157846,7 +143474,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -157890,7 +143518,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -157936,7 +143564,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -158113,6 +143741,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -158181,21 +143829,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -158545,7 +144193,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -158589,7 +144237,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -158635,7 +144283,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -158987,7 +144635,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -159004,7 +144652,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -159016,11 +144664,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -159210,11 +144858,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -159228,11 +144876,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -159674,7 +145322,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -159718,7 +145366,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -159764,7 +145412,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -159941,6 +145589,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -160121,11 +145789,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -160133,7 +145801,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -160150,7 +145818,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -160162,11 +145830,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -160184,11 +145852,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -160334,11 +146002,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -160352,11 +146020,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -160456,11 +146124,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -160525,11 +146193,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -160674,11 +146342,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -162077,11 +147745,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -162095,11 +147763,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -162312,7 +147980,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -162329,7 +147997,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -162341,11 +148009,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -162595,7 +148263,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -162612,7 +148280,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -162624,11 +148292,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -162882,7 +148550,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -162899,7 +148567,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -162911,11 +148579,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -163249,7 +148917,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -163266,7 +148934,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -163278,11 +148946,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -163687,984 +149355,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", - "type": "object", - "properties": { - "cloudProperties": { - "description": "Additional cloud properties of the edge host (applicable based on the cloud type)", - "type": "object", - "properties": { - "vsphere": { - "description": "Vsphere cloud properties of edge host", - "properties": { - "datacenters": { - "type": "array", - "items": { - "description": "Vsphere datacenter", - "type": "object", - "properties": { - "computeClusters": { - "type": "array", - "items": { - "description": "Vsphere compute cluster", - "type": "object", - "properties": { - "datastores": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "networks": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "resourcePools": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "folders": { - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "type": "string" - } - } - } - } - } - } - } - }, - "clusterProfileTemplates": { - "type": "array", - "items": { - "description": "ClusterProfileTemplate contains details of a clusterprofile definition", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packServerRefs": { - "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "packServerSecret": { - "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", - "type": "string" - }, - "packs": { - "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" - } - } - } - }, - "profileVersion": { - "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", - "type": "string" - }, - "relatedObject": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "description": "Deprecated. Use profileVersion", - "type": "integer", - "format": "int32" - } - } - } - }, - "device": { - "description": "DeviceSpec defines the desired state of Device", - "type": "object", - "properties": { - "archType": { - "description": "Architecture type of the edge host", - "type": "string", - "default": "amd64", - "enum": [ - "arm64", - "amd64" - ] - }, - "cpu": { - "type": "object", - "properties": { - "cores": { - "description": "number of cpu cores", - "type": "integer", - "format": "int32" - } - } - }, - "disks": { - "type": "array", - "items": { - "type": "object", - "properties": { - "controller": { - "type": "string" - }, - "partitions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "fileSystemType": { - "type": "string" - }, - "freeSpace": { - "type": "integer", - "format": "int32" - }, - "mountPoint": { - "type": "string" - }, - "totalSpace": { - "type": "integer", - "format": "int32" - }, - "usedSpace": { - "type": "integer", - "format": "int32" - } - } - } - }, - "size": { - "description": "Size in GB", - "type": "integer", - "format": "int32" - }, - "vendor": { - "type": "string" - } - } - } - }, - "gpus": { - "type": "array", - "items": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "model": { - "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "vendor": { - "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - } - }, - "memory": { - "type": "object", - "properties": { - "sizeInMB": { - "description": "memory size in bytes", - "type": "integer", - "format": "int64" - } - } - }, - "nics": { - "type": "array", - "items": { - "type": "object", - "properties": { - "dns": { - "type": "array", - "items": { - "type": "string" - } - }, - "gateway": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - }, - "macAddr": { - "type": "string" - }, - "nicName": { - "type": "string" - }, - "subnet": { - "type": "string" - } - } - } - }, - "os": { - "type": "object", - "properties": { - "family": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - } - }, - "host": { - "description": "EdgeHost is the underlying appliance", - "type": "object", - "required": [ - "hostUid", - "hostAddress" - ], - "properties": { - "disableAutoRegister": { - "description": "Set to true if auto register is disabled for the device", - "type": "boolean", - "x-omitempty": false - }, - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the Host", - "type": "string" - }, - "hostAuthToken": { - "description": "HostAuthToken to authorize auto registration", - "type": "string", - "x-omitempty": false - }, - "hostChecksum": { - "description": "HostChecksum is the checksum provided by the edge host, to be persisted in SaaS", - "type": "string", - "x-omitempty": false - }, - "hostIdentity": { - "properties": { - "caCert": { - "description": "CACert is the client CA certificate", - "type": "string" - }, - "mode": { - "description": "Mode indicates a system or session connection to the host", - "type": "string" - }, - "socketPath": { - "description": "SocketPath is an optional path to the socket on the host, if not using defaults", - "type": "string" - }, - "sshSecret": { - "type": "object", - "properties": { - "name": { - "description": "SSH secret name", - "type": "string" - }, - "privateKey": { - "description": "Private Key to access the host", - "type": "string" - } - } - } - } - }, - "hostPairingKey": { - "description": "HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS", - "type": "string", - "format": "password", - "x-omitempty": false - }, - "hostUid": { - "description": "HostUid is the ID of the EdgeHost", - "type": "string" - }, - "macAddress": { - "description": "Mac address of edgehost", - "type": "string", - "x-omitempty": false - }, - "project": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - }, - "properties": { - "description": "Additional properties of edge host", - "properties": { - "networks": { - "type": "array", - "items": { - "description": "Network defines the network configuration for a virtual machine", - "type": "object", - "required": [ - "networkName", - "networkType" - ], - "properties": { - "networkName": { - "description": "NetworkName of the network where this machine will be connected", - "type": "string" - }, - "networkType": { - "description": "NetworkType specifies the type of network", - "type": "string", - "enum": [ - "default", - "bridge" - ] - } - } - } - }, - "storagePools": { - "type": "array", - "items": { - "description": "StoragePool is the storage pool for the vm image", - "properties": { - "name": { - "type": "string" - } - } - } - } - } - }, - "service": { - "description": "ServiceSpec defines the specification of service registering edge", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - } - } - }, - "type": { - "description": "Cloudtype of the provisioned edge host", - "type": "string", - "enum": [ - "libvirt", - "vsphere", - "edge-native" - ] - }, - "version": { - "type": "string" - } - } - }, - "status": { - "description": "EdgeHostDeviceStatus defines the observed state of EdgeHostDevice", - "type": "object", - "properties": { - "health": { - "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", - "properties": { - "agentVersion": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "healthy", - "unhealthy" - ] - } - } - }, - "inUseClusters": { - "type": "array", - "items": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "packs": { - "type": "array", - "items": { - "type": "object", - "properties": { - "condition": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "manifests": { - "type": "array", - "items": { - "type": "object", - "properties": { - "condition": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - }, - "profileUid": { - "type": "string" - }, - "services": { - "type": "array", - "items": { - "type": "object", - "properties": { - "host": { - "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", - "type": "string" - }, - "name": { - "description": "name of the loadbalancer service", - "type": "string" - }, - "ports": { - "description": "port this service exposed", - "type": "array", - "items": { - "type": "object", - "required": [ - "port" - ], - "properties": { - "port": { - "description": "The port that will be exposed by this service.", - "type": "integer", - "format": "int32" - }, - "protocol": { - "type": "string" - } - } - } - } - } - } - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" - } - } - } - }, - "profileStatus": { - "type": "object", - "properties": { - "hasUserMacros": { - "description": "If it is true then profile pack values has a reference to user defined macros", - "type": "boolean", - "x-omitempty": false - } - } - }, - "serviceAuthToken": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "ready", - "unpaired", - "in-use" - ] - } - } - } - } - } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/{uid}/edge/edgeHosts": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of edge host of libvirt cluster", - "operationId": "v1EdgeClustersHostsList", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "List of edge host device", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "aclmeta": { - "description": "Resource access control information (Read-only response data)", - "type": "object", - "properties": { - "ownerUid": { - "description": "User or service uid which created the resource", - "type": "string" - }, - "projectUid": { - "description": "Project's uid if the resource is under a project", - "type": "string" - }, - "tenantUid": { - "description": "Tenant's uid", - "type": "string" - } - } - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -164681,7 +149372,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -164693,11 +149384,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -164792,11 +149483,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -164861,11 +149552,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -165010,11 +149701,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -165318,7 +150009,7 @@ } }, "type": { - "description": "Cloudtype of the provisioned edge host", + "description": "Deprecated. Cloudtype of the provisioned edge host", "type": "string", "enum": [ "libvirt", @@ -165620,7 +150311,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -165637,7 +150328,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -165649,11 +150340,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -166247,7 +150938,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -166264,7 +150955,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -166276,11 +150967,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -166539,7 +151230,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -166556,7 +151247,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -166568,11 +151259,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -166702,7 +151393,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -166719,7 +151410,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -166731,11 +151422,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -166860,7 +151551,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -166877,7 +151568,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -166889,11 +151580,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -167014,7 +151705,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -167031,7 +151722,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -167043,11 +151734,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -167879,7 +152570,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -167896,7 +152587,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -167908,11 +152599,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -168088,7 +152779,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -168105,7 +152796,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -168117,11 +152808,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -168292,7 +152983,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -168309,7 +153000,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -168321,11 +153012,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -168492,7 +153183,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -168509,7 +153200,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -168521,11 +153212,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -169139,7 +153830,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -169156,7 +153847,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -169168,11 +153859,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -169421,1458 +154112,481 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Cluster Restore Spec", - "properties": { - "clusterUid": { - "type": "string" - } - } - }, - "status": { - "description": "Cluster Restore Status", - "properties": { - "clusterRestoreStatuses": { - "type": "array", - "items": { - "description": "Cluster Restore Status Meta", - "properties": { - "actor": { - "description": "Compliance Scan actor", - "properties": { - "actorType": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "backupName": { - "type": "string" - }, - "backupRequestUid": { - "type": "string" - }, - "restoreRequestUid": { - "type": "string" - }, - "restoreStatusMeta": { - "description": "Restore status meta", - "properties": { - "isSucceeded": { - "type": "boolean" - }, - "msg": { - "type": "string" - }, - "restoreTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - } - } - }, - "sourceClusterRef": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "kind": { - "type": "string" - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "state": { - "type": "string" - } - } - } - } - } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/{uid}/features/restore/onDemand": { - "post": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Create on demand cluster restore", - "operationId": "v1ClusterFeatureRestoreOnDemandCreate", - "parameters": [ - { - "name": "body", - "in": "body", - "schema": { - "description": "Cluster restore config", - "required": [ - "backupRequestUid", - "backupName", - "destinationClusterUid" - ], - "properties": { - "backupName": { - "type": "string" - }, - "backupRequestUid": { - "type": "string" - }, - "destinationClusterUid": { - "type": "string" - }, - "includeClusterResources": { - "type": "boolean" - }, - "includeNamespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "preserveNodePorts": { - "type": "boolean" - }, - "restorePVs": { - "type": "boolean" - } - } - } - }, - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "201": { - "description": "Created successfully", - "schema": { - "type": "object", - "required": [ - "uid" - ], - "properties": { - "uid": { - "type": "string" - } - } - }, - "headers": { - "AuditUid": { - "type": "string", - "description": "Audit uid for the request" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/{uid}/import/manifest": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "produces": [ - "application/octet-stream" - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified cluster's import manifest file", - "operationId": "v1SpectroClustersUidImportManifest", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "download file", - "schema": { - "type": "string", - "format": "binary" - }, - "headers": { - "Content-Disposition": { - "type": "string" - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/{uid}/import/upgrade": { - "patch": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Upgrade the specified imported read only cluster with full permissions", - "operationId": "v1SpectroClustersUidImportUpgradePatch", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/{uid}/k8certificates": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Get K8Certificate for spectro cluster", - "operationId": "v1SpectroClustersK8Certificate", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "K8 Certificates for all the cluster's master nodes", - "type": "object", - "properties": { - "machineCertificates": { - "type": "array", - "items": { - "description": "K8 Certificates for master nodes", - "type": "object", - "properties": { - "certificateAuthorities": { - "description": "Applicable certificate authorities", - "type": "array", - "items": { - "description": "Certificate Authority", - "type": "object", - "properties": { - "certificates": { - "type": "array", - "items": { - "description": "Certificate details", - "type": "object", - "properties": { - "expiry": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "type": "string" - } - } - } - }, - "expiry": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/{uid}/k8certificates/renew": { - "patch": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Sets the cluster master nodes Kubernetes certificates for renewal", - "operationId": "v1SpectroClustersCertificatesRenew", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/{uid}/kubectl/redirect": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Returns the specified cluster's kube config file", - "operationId": "V1SpectroClustersUidKubeCtlRedirect", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "(empty)", - "schema": { - "description": "Active resources of tenant", - "type": "object", - "properties": { - "redirectUri": { - "type": "string" - } - } - } - } - } - }, - "parameters": [ - { - "type": "string", - "description": "Cluster uid", - "name": "uid", - "in": "path", - "required": true - } - ] - }, - "/v1/spectroclusters/{uid}/libvirt/edgeHosts": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Retrieves a list of edge hosts of the libvirt cluster", - "operationId": "v1LibvirtClustersHostsList", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "200": { - "description": "List of edge host devices", - "schema": { - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "properties": { - "aclmeta": { - "description": "Resource access control information (Read-only response data)", - "type": "object", - "properties": { - "ownerUid": { - "description": "User or service uid which created the resource", - "type": "string" - }, - "projectUid": { - "description": "Project's uid if the resource is under a project", - "type": "string" - }, - "tenantUid": { - "description": "Tenant's uid", - "type": "string" - } - } - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", - "type": "object", - "properties": { - "cloudProperties": { - "description": "Additional cloud properties of the edge host (applicable based on the cloud type)", - "type": "object", - "properties": { - "vsphere": { - "description": "Vsphere cloud properties of edge host", - "properties": { - "datacenters": { - "type": "array", - "items": { - "description": "Vsphere datacenter", - "type": "object", - "properties": { - "computeClusters": { - "type": "array", - "items": { - "description": "Vsphere compute cluster", - "type": "object", - "properties": { - "datastores": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "networks": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "resourcePools": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - } - }, - "folders": { - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "type": "string" - } - } - } - } - } - } - } - }, - "clusterProfileTemplates": { - "type": "array", - "items": { - "description": "ClusterProfileTemplate contains details of a clusterprofile definition", - "type": "object", - "properties": { - "cloudType": { - "type": "string" - }, - "name": { - "type": "string" - }, - "packServerRefs": { - "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "packServerSecret": { - "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", - "type": "string" - }, - "packs": { - "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", - "type": "array", - "items": { - "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", - "type": "object", - "required": [ - "layer", - "name" - ], - "properties": { - "annotations": { - "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "digest": { - "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", - "type": "string" - }, - "inValidReason": { - "type": "string" - }, - "isInvalid": { - "description": "pack is invalid when the associated tag is deleted from the registry", - "type": "boolean" - }, - "layer": { - "type": "string", - "enum": [ - "kernel", - "os", - "k8s", - "cni", - "csi", - "addon" - ] - }, - "logo": { - "description": "path to the pack logo", - "type": "string" - }, - "manifests": { - "type": "array", - "items": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - } - }, - "name": { - "description": "pack name", - "type": "string" - }, - "packUid": { - "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", - "type": "string" - }, - "params": { - "description": "params passed as env variables to be consumed at installation time", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "presets": { - "type": "array", - "items": { - "description": "PackPreset defines the preset pack values", - "type": "object", - "properties": { - "add": { - "type": "string", - "x-omitempty": false - }, - "displayName": { - "type": "string", - "x-omitempty": false - }, - "group": { - "type": "string", - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "remove": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - } - } - } - }, - "registryUid": { - "description": "pack registry uid", - "type": "string" - }, - "schema": { - "type": "array", - "items": { - "description": "PackSchema defines the schema definition, hints for the pack values", - "type": "object", - "properties": { - "format": { - "type": "string", - "x-omitempty": false - }, - "hints": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "listOptions": { - "type": "array", - "items": { - "type": "string" - }, - "x-omitempty": false - }, - "name": { - "type": "string", - "x-omitempty": false - }, - "readonly": { - "type": "boolean", - "x-omitempty": false - }, - "regex": { - "type": "string", - "x-omitempty": false - }, - "required": { - "type": "boolean", - "x-omitempty": false - }, - "type": { - "type": "string", - "x-omitempty": false - } - } - } - }, - "server": { - "description": "pack registry server or helm repo", - "type": "string" - }, - "tag": { - "description": "pack tag", - "type": "string" - }, - "type": { - "description": "type of the pack", - "type": "string", - "enum": [ - "spectro", - "helm", - "manifest" - ] - }, - "values": { - "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - }, - "version": { - "description": "pack version", - "type": "string" - } - } - } - }, - "profileVersion": { - "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", - "type": "string" - }, - "relatedObject": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "type": { - "type": "string" - }, - "uid": { - "type": "string" - }, - "version": { - "description": "Deprecated. Use profileVersion", - "type": "integer", - "format": "int32" - } - } - } - }, - "device": { - "description": "DeviceSpec defines the desired state of Device", - "type": "object", + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Cluster Restore Spec", + "properties": { + "clusterUid": { + "type": "string" + } + } + }, + "status": { + "description": "Cluster Restore Status", + "properties": { + "clusterRestoreStatuses": { + "type": "array", + "items": { + "description": "Cluster Restore Status Meta", + "properties": { + "actor": { + "description": "Compliance Scan actor", "properties": { - "archType": { - "description": "Architecture type of the edge host", - "type": "string", - "default": "amd64", - "enum": [ - "arm64", - "amd64" - ] - }, - "cpu": { - "type": "object", - "properties": { - "cores": { - "description": "number of cpu cores", - "type": "integer", - "format": "int32" - } - } - }, - "disks": { - "type": "array", - "items": { - "type": "object", - "properties": { - "controller": { - "type": "string" - }, - "partitions": { - "type": "array", - "items": { - "type": "object", - "properties": { - "fileSystemType": { - "type": "string" - }, - "freeSpace": { - "type": "integer", - "format": "int32" - }, - "mountPoint": { - "type": "string" - }, - "totalSpace": { - "type": "integer", - "format": "int32" - }, - "usedSpace": { - "type": "integer", - "format": "int32" - } - } - } - }, - "size": { - "description": "Size in GB", - "type": "integer", - "format": "int32" - }, - "vendor": { - "type": "string" - } - } - } - }, - "gpus": { - "type": "array", - "items": { - "type": "object", - "properties": { - "addresses": { - "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "model": { - "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", - "type": "string" - }, - "vendor": { - "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", - "type": "string" - } - } - } - }, - "memory": { - "type": "object", - "properties": { - "sizeInMB": { - "description": "memory size in bytes", - "type": "integer", - "format": "int64" - } - } - }, - "nics": { - "type": "array", - "items": { - "type": "object", - "properties": { - "dns": { - "type": "array", - "items": { - "type": "string" - } - }, - "gateway": { - "type": "string" - }, - "ip": { - "type": "string" - }, - "isDefault": { - "type": "boolean" - }, - "macAddr": { - "type": "string" - }, - "nicName": { - "type": "string" - }, - "subnet": { - "type": "string" - } - } - } + "actorType": { + "type": "string" }, - "os": { - "type": "object", - "properties": { - "family": { - "type": "string" - }, - "version": { - "type": "string" - } - } + "uid": { + "type": "string" } } }, - "host": { - "description": "EdgeHost is the underlying appliance", - "type": "object", - "required": [ - "hostUid", - "hostAddress" - ], + "backupName": { + "type": "string" + }, + "backupRequestUid": { + "type": "string" + }, + "restoreRequestUid": { + "type": "string" + }, + "restoreStatusMeta": { + "description": "Restore status meta", "properties": { - "disableAutoRegister": { - "description": "Set to true if auto register is disabled for the device", - "type": "boolean", - "x-omitempty": false - }, - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the Host", - "type": "string" - }, - "hostAuthToken": { - "description": "HostAuthToken to authorize auto registration", - "type": "string", - "x-omitempty": false - }, - "hostChecksum": { - "description": "HostChecksum is the checksum provided by the edge host, to be persisted in SaaS", - "type": "string", - "x-omitempty": false - }, - "hostIdentity": { - "properties": { - "caCert": { - "description": "CACert is the client CA certificate", - "type": "string" - }, - "mode": { - "description": "Mode indicates a system or session connection to the host", - "type": "string" - }, - "socketPath": { - "description": "SocketPath is an optional path to the socket on the host, if not using defaults", - "type": "string" - }, - "sshSecret": { - "type": "object", - "properties": { - "name": { - "description": "SSH secret name", - "type": "string" - }, - "privateKey": { - "description": "Private Key to access the host", - "type": "string" - } - } - } - } - }, - "hostPairingKey": { - "description": "HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS", - "type": "string", - "format": "password", - "x-omitempty": false + "isSucceeded": { + "type": "boolean" }, - "hostUid": { - "description": "HostUid is the ID of the EdgeHost", + "msg": { "type": "string" }, - "macAddress": { - "description": "Mac address of edgehost", + "restoreTime": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", "type": "string", - "x-omitempty": false - }, - "project": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - }, - "properties": { - "description": "Additional properties of edge host", - "properties": { - "networks": { - "type": "array", - "items": { - "description": "Network defines the network configuration for a virtual machine", - "type": "object", - "required": [ - "networkName", - "networkType" - ], - "properties": { - "networkName": { - "description": "NetworkName of the network where this machine will be connected", - "type": "string" - }, - "networkType": { - "description": "NetworkType specifies the type of network", - "type": "string", - "enum": [ - "default", - "bridge" - ] - } - } - } - }, - "storagePools": { - "type": "array", - "items": { - "description": "StoragePool is the storage pool for the vm image", - "properties": { - "name": { - "type": "string" - } - } - } + "format": "date-time" } } }, - "service": { - "description": "ServiceSpec defines the specification of service registering edge", + "sourceClusterRef": { "type": "object", + "required": [ + "uid" + ], "properties": { + "kind": { + "type": "string" + }, "name": { "type": "string" }, - "version": { + "uid": { "type": "string" } } }, - "type": { - "description": "Cloudtype of the provisioned edge host", - "type": "string", - "enum": [ - "libvirt", - "vsphere", - "edge-native" - ] - }, - "version": { + "state": { "type": "string" } } - }, - "status": { - "description": "EdgeHostDeviceStatus defines the observed state of EdgeHostDevice", - "type": "object", - "properties": { - "health": { - "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", - "properties": { - "agentVersion": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "healthy", - "unhealthy" - ] - } - } - }, - "inUseClusters": { - "type": "array", - "items": { - "description": "Object identity meta", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "packs": { - "type": "array", - "items": { - "type": "object", - "properties": { - "condition": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "endTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "manifests": { - "type": "array", - "items": { - "type": "object", - "properties": { - "condition": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - }, - "name": { - "type": "string" - }, - "profileUid": { - "type": "string" - }, - "services": { - "type": "array", - "items": { - "type": "object", - "properties": { - "host": { - "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", - "type": "string" - }, - "name": { - "description": "name of the loadbalancer service", - "type": "string" - }, - "ports": { - "description": "port this service exposed", - "type": "array", - "items": { - "type": "object", - "required": [ - "port" - ], - "properties": { - "port": { - "description": "The port that will be exposed by this service.", - "type": "integer", - "format": "int32" - }, - "protocol": { - "type": "string" - } - } - } - } - } + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/features/restore/onDemand": { + "post": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Create on demand cluster restore", + "operationId": "v1ClusterFeatureRestoreOnDemandCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "description": "Cluster restore config", + "required": [ + "backupRequestUid", + "backupName", + "destinationClusterUid" + ], + "properties": { + "backupName": { + "type": "string" + }, + "backupRequestUid": { + "type": "string" + }, + "destinationClusterUid": { + "type": "string" + }, + "includeClusterResources": { + "type": "boolean" + }, + "includeNamespaces": { + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, + "preserveNodePorts": { + "type": "boolean" + }, + "restorePVs": { + "type": "boolean" + } + } + } + }, + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "type": "object", + "required": [ + "uid" + ], + "properties": { + "uid": { + "type": "string" + } + } + }, + "headers": { + "AuditUid": { + "type": "string", + "description": "Audit uid for the request" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/import/manifest": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "produces": [ + "application/octet-stream" + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's import manifest file", + "operationId": "v1SpectroClustersUidImportManifest", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "download file", + "schema": { + "type": "string", + "format": "binary" + }, + "headers": { + "Content-Disposition": { + "type": "string" + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/import/upgrade": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Upgrade the specified imported read only cluster with full permissions", + "operationId": "v1SpectroClustersUidImportUpgradePatch", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/k8certificates": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get K8Certificate for spectro cluster", + "operationId": "v1SpectroClustersK8Certificate", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "K8 Certificates for all the cluster's control plane nodes", + "type": "object", + "properties": { + "machineCertificates": { + "type": "array", + "items": { + "description": "K8 Certificates for control plane nodes", + "type": "object", + "properties": { + "certificateAuthorities": { + "description": "Applicable certificate authorities", + "type": "array", + "items": { + "description": "Certificate Authority", + "type": "object", + "properties": { + "certificates": { + "type": "array", + "items": { + "description": "Certificate details", + "type": "object", + "properties": { + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" } - }, - "startTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "type": { - "type": "string" - }, - "version": { - "type": "string" } } + }, + "expiry": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "type": "string" } - }, - "profileStatus": { - "type": "object", - "properties": { - "hasUserMacros": { - "description": "If it is true then profile pack values has a reference to user defined macros", - "type": "boolean", - "x-omitempty": false - } - } - }, - "serviceAuthToken": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "ready", - "unpaired", - "in-use" - ] } } + }, + "name": { + "type": "string" } } } - }, - "listmeta": { - "description": "ListMeta describes metadata for the resource listing", - "type": "object", - "properties": { - "continue": { - "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", - "type": "string", - "x-omitempty": false - }, - "count": { - "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", - "type": "integer", - "x-omitempty": false - }, - "limit": { - "description": "Number of records feteched", - "type": "integer", - "x-omitempty": false - }, - "offset": { - "description": "The next offset for the pagination. Starting index for which next request will be placed.", - "type": "integer", - "x-omitempty": false - } - } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/k8certificates/renew": { + "patch": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Sets the cluster control plane nodes Kubernetes certificates for renewal", + "operationId": "v1SpectroClustersCertificatesRenew", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, + "/v1/spectroclusters/{uid}/kubectl/redirect": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Returns the specified cluster's kube config file", + "operationId": "V1SpectroClustersUidKubeCtlRedirect", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "description": "Active resources of tenant", + "type": "object", + "properties": { + "redirectUri": { + "type": "string" } } } @@ -171015,21 +154729,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -171308,7 +155022,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -171325,7 +155039,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -171337,11 +155051,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -171791,44 +155505,6 @@ } ] }, - "/v1/spectroclusters/{uid}/profile": { - "patch": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "tags": [ - "v1" - ], - "summary": "Replaces the specified cluster profile for the cluster", - "operationId": "v1SpectroClustersPatchProfile", - "parameters": [ - { - "type": "string", - "description": "Scope the request to the specified project uid", - "name": "ProjectUid", - "in": "header" - } - ], - "responses": { - "204": { - "description": "The resource was updated successfully" - } - } - }, - "parameters": [ - { - "type": "string", - "name": "uid", - "in": "path", - "required": true - } - ] - }, "/v1/spectroclusters/{uid}/profileUpdates": { "get": { "security": [ @@ -171883,11 +155559,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -171952,11 +155628,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -172101,11 +155777,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -172188,7 +155864,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -172205,7 +155881,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -172217,11 +155893,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -172247,7 +155923,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -172264,7 +155940,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -172276,11 +155952,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -172354,11 +156030,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -172707,11 +156383,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -172839,6 +156515,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -173020,6 +156716,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -173118,7 +156834,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -173135,7 +156851,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -173147,11 +156863,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -173172,7 +156888,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -173189,7 +156905,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -173201,11 +156917,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -173590,7 +157306,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -173607,7 +157323,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -173619,11 +157335,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -174162,7 +157878,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -174179,7 +157895,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -174191,11 +157907,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -174272,11 +157988,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -174465,11 +158181,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -174692,6 +158408,61 @@ } ] }, + "/v1/spectroclusters/{uid}/status": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Get the cluster's status", + "operationId": "v1SpectroClustersUidStatus", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "description": "Spectrocluster status entity", + "type": "object", + "properties": { + "status": { + "description": "Spectrocluster state entity", + "type": "object", + "properties": { + "state": { + "description": "Spectrocluster state", + "type": "string" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid", + "name": "uid", + "in": "path", + "required": true + } + ] + }, "/v1/spectroclusters/{uid}/status/condition": { "put": { "security": [ @@ -175359,6 +159130,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -175577,6 +159368,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -175671,11 +159482,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -175864,11 +159675,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -176010,6 +159821,118 @@ } } }, + "/v1/spectroclusters/{uid}/variables": { + "get": { + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ], + "summary": "Retrieve a list of variables associated with the cluster", + "operationId": "v1SpectroClustersUidVariablesGet", + "parameters": [ + { + "type": "string", + "description": "Scope the request to the specified project uid", + "name": "ProjectUid", + "in": "header" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "type": "object", + "properties": { + "variables": { + "description": "List of unique variable fields with schema constraints", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Unique variable field with schema definition", + "type": "object", + "required": [ + "name" + ], + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "description": "Format type of the variable value", + "type": "string", + "default": "string", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ] + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + } + } + } + } + } + } + } + }, + "parameters": [ + { + "type": "string", + "description": "Cluster uid for which variables need to be retrieved", + "name": "uid", + "in": "path", + "required": true + } + ] + }, "/v1/spectroclusters/{uid}/vms": { "get": { "security": [ @@ -208976,7 +192899,7 @@ "v1", "system", "private", - "show-docs" + "docs-show" ], "summary": "get the system config reverse proxy", "operationId": "V1SystemConfigReverseProxyGet", @@ -209029,7 +192952,7 @@ "v1", "system", "private", - "show-docs" + "docs-show" ], "summary": "updates the system config reverse proxy", "operationId": "V1SystemConfigReverseProxyUpdate", @@ -209093,7 +193016,7 @@ "tags": [ "v1", "system", - "show-docs" + "docs-show" ], "summary": "Delete a list of block listed passwords", "operationId": "V1PasswordsBlockListDelete", @@ -209140,7 +193063,7 @@ "tags": [ "v1", "system", - "show-docs" + "docs-show" ], "summary": "List of block listed passwords", "operationId": "V1PasswordsBlockListUpdate", @@ -209262,7 +193185,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -209279,7 +193202,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -209291,11 +193214,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -209391,7 +193314,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -209408,7 +193331,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -209420,11 +193343,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -209595,7 +193518,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -209612,7 +193535,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -209624,11 +193547,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -209723,7 +193646,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -209740,7 +193663,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -209752,11 +193675,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -209823,7 +193746,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -209840,7 +193763,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -209852,11 +193775,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -210534,7 +194457,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -210551,7 +194474,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -210563,11 +194486,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -210624,7 +194547,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -210641,7 +194564,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -210653,11 +194576,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -210742,7 +194665,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -210759,7 +194682,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -210771,11 +194694,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -210829,7 +194752,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -210846,7 +194769,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -210858,11 +194781,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -210956,7 +194879,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -210973,7 +194896,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -210985,11 +194908,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -211113,7 +195036,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -211130,7 +195053,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -211142,11 +195065,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -211275,7 +195198,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -211292,7 +195215,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -211304,11 +195227,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -212059,7 +195982,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -212076,7 +195999,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -212088,11 +196011,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -214937,7 +198860,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -214954,7 +198877,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -214966,11 +198889,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -215084,7 +199007,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -215101,7 +199024,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -215113,11 +199036,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -215239,7 +199162,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -215256,7 +199179,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -215268,11 +199191,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -215336,21 +199259,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -215482,21 +199405,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -215605,21 +199528,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -215744,21 +199667,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -215792,6 +199715,10 @@ "type": "string" } } + }, + "projectId": { + "description": "GCP project id", + "type": "string" } } }, @@ -215860,21 +199787,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -215908,6 +199835,10 @@ "type": "string" } } + }, + "projectId": { + "description": "GCP project id", + "type": "string" } } }, @@ -215953,21 +199884,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -216001,6 +199932,10 @@ "type": "string" } } + }, + "projectId": { + "description": "GCP project id", + "type": "string" } } }, @@ -216062,21 +199997,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -216242,21 +200177,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -216399,21 +200334,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -216572,21 +200507,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -216752,21 +200687,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -216909,21 +200844,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -217194,7 +201129,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -217211,7 +201146,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -217223,11 +201158,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -217276,21 +201211,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -217359,7 +201294,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -217376,7 +201311,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -217388,11 +201323,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -217438,7 +201373,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -217455,7 +201390,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -217467,11 +201402,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -217575,7 +201510,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -217592,7 +201527,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -217604,11 +201539,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -217703,7 +201638,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -217720,7 +201655,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -217732,11 +201667,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -217809,7 +201744,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -217826,7 +201761,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -217838,11 +201773,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -217935,7 +201870,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -217952,7 +201887,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -217964,11 +201899,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -218038,7 +201973,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -218055,7 +201990,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -218067,11 +202002,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -218306,152 +202241,6 @@ } } }, - "/v1/users/me": { - "get": { - "security": [ - { - "ApiKey": [] - }, - { - "Authorization": [] - } - ], - "description": "Returns a User with permissions with scopes", - "tags": [ - "v1", - "docs-hide" - ], - "summary": "Returns the specified User ACL information", - "operationId": "v1UsersMeGet", - "responses": { - "200": { - "description": "OK", - "schema": { - "description": "User information wrt permissions", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "User specifications", - "properties": { - "emailId": { - "description": "User's email id", - "type": "string" - }, - "firstName": { - "type": "string" - }, - "lastName": { - "type": "string" - }, - "roles": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - } - } - }, - "status": { - "description": "User status with permissions", - "properties": { - "activationLink": { - "description": "Contains activation link for the user", - "type": "string" - }, - "isActive": { - "description": "Specifies if user account is active/disabled", - "type": "boolean" - }, - "isContractAccepted": { - "description": "Specifies if user account has accepted the contract", - "type": "boolean", - "x-omitempty": false - }, - "loginMode": { - "description": "User's login Mode", - "type": "string" - }, - "projectPermissions": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "tenant": { - "type": "object", - "properties": { - "orgName": { - "type": "string" - }, - "tenantUid": { - "type": "string" - } - } - }, - "tenantPermissions": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - } - } - } - } - } - }, "/v1/users/meta": { "get": { "security": [ @@ -218729,7 +202518,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -218746,7 +202535,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -218758,11 +202547,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -219107,7 +202896,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -219124,7 +202913,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -219136,11 +202925,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -219225,7 +203014,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -219242,7 +203031,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -219254,11 +203043,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -220017,7 +203806,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -220034,7 +203823,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -220046,11 +203835,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -220145,7 +203934,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -220162,7 +203951,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -220174,11 +203963,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -220826,7 +204615,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -220843,7 +204632,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -220855,11 +204644,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -220954,7 +204743,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -220971,7 +204760,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -220983,11 +204772,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -221318,7 +205107,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -221335,7 +205124,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -221347,11 +205136,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -222135,7 +205924,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -222152,7 +205941,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -222164,11 +205953,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -222357,7 +206146,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -222374,7 +206163,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -222386,11 +206175,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -222592,7 +206381,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -222609,7 +206398,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -222621,11 +206410,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -222692,7 +206481,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -222709,7 +206498,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -222721,11 +206510,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -222977,9 +206766,6 @@ "description": "AWS properties validate spec", "type": "object", "properties": { - "cloudAccountUid": { - "type": "string" - }, "region": { "type": "string" }, @@ -223751,7 +207537,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -223768,7 +207554,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -223780,11 +207566,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -223865,7 +207651,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -223882,7 +207668,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -223894,11 +207680,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -223997,7 +207783,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -224014,7 +207800,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -224026,11 +207812,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -224084,7 +207870,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -224101,7 +207887,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -224113,11 +207899,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -224208,7 +207994,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -224225,7 +208011,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -224237,11 +208023,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -224373,11 +208159,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -224620,21 +208406,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -225125,11 +208911,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -225221,7 +209007,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -225238,7 +209024,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -225250,11 +209036,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -225284,11 +209070,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -225362,11 +209148,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -225675,11 +209461,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -225910,7 +209696,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -225927,7 +209713,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -225939,11 +209725,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -226227,21 +210013,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -226472,7 +210258,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -226489,7 +210275,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -226501,11 +210287,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -226773,7 +210559,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -226790,7 +210576,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -226802,11 +210588,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -226867,11 +210653,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -227013,21 +210799,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -227339,7 +211125,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -227356,7 +211142,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -227368,11 +211154,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -227505,11 +211291,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -227625,7 +211411,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -227642,7 +211428,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -227654,11 +211440,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -227688,11 +211474,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -227766,11 +211552,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -227836,7 +211622,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -227853,7 +211639,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -227865,11 +211651,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -227889,7 +211675,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -227906,7 +211692,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -227918,11 +211704,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -227952,11 +211738,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -228037,7 +211823,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -228054,7 +211840,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -228066,11 +211852,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -228100,11 +211886,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -228344,7 +212130,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -228361,7 +212147,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -228373,11 +212159,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -228497,7 +212283,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -228514,7 +212300,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -228526,11 +212312,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -228560,11 +212346,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -228721,7 +212507,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -228738,7 +212524,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -228750,11 +212536,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -228996,11 +212782,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -229325,7 +213111,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -229342,7 +213128,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -229354,11 +213140,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -229680,7 +213466,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -229697,7 +213483,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -229709,11 +213495,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -230146,11 +213932,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -230158,7 +213942,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -230175,7 +213959,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -230187,11 +213971,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -230276,11 +214060,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -230288,7 +214070,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -230305,7 +214087,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -230317,11 +214099,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -230586,11 +214368,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -230598,7 +214380,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -230615,7 +214397,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -230627,11 +214409,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -230649,11 +214431,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -230802,7 +214584,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -230868,7 +214650,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -230914,7 +214696,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -231024,11 +214806,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -231177,7 +214959,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -231243,7 +215025,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -231289,7 +215071,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -232181,11 +215963,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -232193,7 +215973,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -232210,7 +215990,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -232222,11 +216002,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -232619,7 +216399,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -232685,7 +216465,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -232731,7 +216511,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -232870,7 +216650,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -232914,7 +216694,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -232960,7 +216740,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -233087,11 +216867,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -233099,7 +216877,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -233116,7 +216894,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -233128,11 +216906,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -234107,11 +217885,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -234119,7 +217897,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -234136,7 +217914,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -234148,11 +217926,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -234231,11 +218009,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -234243,7 +218021,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -234260,7 +218038,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -234272,11 +218050,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -234598,11 +218376,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -234610,7 +218388,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -234627,7 +218405,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -234639,11 +218417,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -234661,11 +218439,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -234900,7 +218678,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -234987,7 +218765,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -235033,7 +218811,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -235168,11 +218946,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -235407,7 +219185,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -235494,7 +219272,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -235540,7 +219318,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -235985,11 +219763,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -235997,7 +219773,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -236014,7 +219790,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -236026,11 +219802,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -236340,7 +220116,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -236427,7 +220203,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -236473,7 +220249,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -236576,7 +220352,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -236620,7 +220396,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -236666,7 +220442,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -236855,11 +220631,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -236867,7 +220641,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -236884,7 +220658,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -236896,11 +220670,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -237845,7 +221619,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -237862,7 +221636,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -237874,11 +221648,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -238143,6 +221917,10 @@ "description": "Response for broker login request", "type": "object", "properties": { + "maxAllowedClients": { + "description": "maximum number of clients that can subscribe to the subject", + "type": "integer" + }, "msgCtxData": { "description": "message context data can be used as contextual information for the message exchange", "additionalProperties": { @@ -238243,11 +222021,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -238261,7 +222039,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -238278,7 +222056,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -238290,11 +222068,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -238376,11 +222154,6 @@ "description": "Country name the card belongs", "type": "string" }, - "expMonth": { - "description": "Expiry month of the card", - "type": "number", - "format": "uint64" - }, "expYear": { "description": "Expiry year of the card", "type": "number", @@ -238607,7 +222380,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -238624,7 +222397,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -238636,11 +222409,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -238680,7 +222453,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -238697,7 +222470,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -238709,11 +222482,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -238769,7 +222542,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -238786,7 +222559,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -238798,11 +222571,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -238868,7 +222641,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -238885,7 +222658,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -238897,11 +222670,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -239053,11 +222826,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -239213,7 +222986,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -239707,7 +223480,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -239724,7 +223497,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -239736,11 +223509,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -240395,7 +224168,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -240412,7 +224185,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -240424,11 +224197,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -240533,7 +224306,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -240550,7 +224323,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -240562,11 +224335,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -240696,7 +224469,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -240713,7 +224486,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -240725,11 +224498,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -240854,7 +224627,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -240871,7 +224644,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -240883,11 +224656,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -241008,7 +224781,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -241025,7 +224798,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -241037,11 +224810,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -241609,11 +225382,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -241627,11 +225400,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -241701,413 +225474,12 @@ } }, "updateWorkerPoolsInParallel": { - "description": "UpdateWorkerPoolsInParallel is used to decide if the update of workerpools happen in parallel. When this flag is false, the workerpools are updated sequentially.", - "type": "boolean" - } - } - }, - "v1ClusterConfigEntity": { - "type": "object", - "properties": { - "clusterMetaAttribute": { - "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", - "type": "string" - }, - "controlPlaneHealthCheckTimeout": { - "type": "string" - }, - "hostClusterConfig": { - "properties": { - "clusterEndpoint": { - "properties": { - "config": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "type": { - "description": "is enabled as host cluster", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - } - } - }, - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "hostCluster": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "isHostCluster": { - "description": "is enabled as host cluster", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "lifecycleConfig": { - "properties": { - "pause": { - "description": "enable pause life cycle config", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "machineManagementConfig": { - "type": "object", - "properties": { - "osPatchConfig": { - "type": "object", - "properties": { - "onDemandPatchAfter": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchOnBoot": { - "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", - "type": "boolean", - "x-omitempty": false - }, - "rebootIfRequired": { - "description": "Reboot once the OS patch is applied", - "type": "boolean", - "x-omitempty": false - }, - "schedule": { - "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", - "type": "string" - } - } - } - } - }, - "resources": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster Namespace resource defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster namespace spec", - "properties": { - "isRegex": { - "type": "boolean", - "x-omitempty": false - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "resourceAllocation": { - "description": "Cluster namespace resource allocation", - "properties": { - "cpuCores": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memoryMiB": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - } - }, - "rbacs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC role binding defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC spec", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } - } - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "updateWorkerPoolsInParallel": { + "description": "UpdateWorkerPoolsInParallel is used to decide if the update of workerpools happen in parallel. When this flag is false, the workerpools are updated sequentially.", "type": "boolean" } } }, - "v1ClusterConfigParamEntity": { + "v1ClusterConfigEntity": { "type": "object", "properties": { "clusterMetaAttribute": { @@ -242176,11 +225548,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -242194,11 +225566,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -242211,6 +225583,16 @@ } } }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, "location": { "description": "Cluster location information", "type": "object", @@ -242251,6 +225633,35 @@ } } }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, "resources": { "type": "object", "properties": { @@ -242483,11 +225894,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -242505,21 +225916,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -242841,7 +226252,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -242858,7 +226269,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -242870,11 +226281,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -242907,11 +226318,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -242976,11 +226387,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -243125,11 +226536,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -243413,7 +226824,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -243430,7 +226841,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -243442,11 +226853,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -243648,6 +227059,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -243909,11 +227340,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -243978,11 +227409,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -244127,11 +227558,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -244476,6 +227907,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -244505,7 +227956,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -244522,7 +227973,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -244534,11 +227985,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -244614,11 +228065,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -244917,11 +228368,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -245254,7 +228705,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -245271,7 +228722,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -245283,11 +228734,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -245363,11 +228814,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -245953,7 +229404,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -245970,7 +229421,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -245982,11 +229433,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -246294,7 +229745,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -246311,7 +229762,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -246323,11 +229774,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -246518,7 +229969,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -246535,7 +229986,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -246547,11 +229998,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -246813,6 +230264,15 @@ } } }, + "v1ClusterNotificationStatus": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, "v1ClusterNotificationUpdateEntity": { "description": "Cluster input for notification update", "type": "object", @@ -247132,11 +230592,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -247144,7 +230604,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -247161,7 +230621,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -247173,11 +230633,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -247208,11 +230668,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -247277,11 +230737,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -247426,11 +230886,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -247470,11 +230930,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -247539,11 +230999,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -247688,11 +231148,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -247893,7 +231353,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -247910,7 +231370,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -247922,11 +231382,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -248683,7 +232143,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -248700,7 +232160,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -248712,11 +232172,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -248951,7 +232411,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -248968,7 +232428,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -248980,11 +232440,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -249058,11 +232518,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -249413,7 +232873,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -249430,7 +232890,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -249442,11 +232902,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -249520,11 +232980,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -249872,7 +233332,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -249889,7 +233349,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -249901,11 +233361,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -249926,7 +233386,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -249943,7 +233403,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -249955,11 +233415,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -250226,11 +233686,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -250295,11 +233755,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -250444,11 +233904,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -250488,11 +233948,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -250557,11 +234017,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -250706,11 +234166,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -251089,7 +234549,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -251106,7 +234566,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -251118,11 +234578,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -251366,11 +234826,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -251435,11 +234895,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -251584,11 +235044,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -251886,11 +235346,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -252198,7 +235658,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -252215,7 +235675,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -252227,11 +235687,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -252404,11 +235864,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -252416,7 +235876,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -252433,7 +235893,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -252445,11 +235905,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -252480,11 +235940,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -252549,11 +236009,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -252698,11 +236158,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -252742,11 +236202,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -252811,11 +236271,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -252960,11 +236420,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -253292,7 +236752,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -253309,7 +236769,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -253321,11 +236781,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -253611,7 +237071,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -253628,7 +237088,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -253640,11 +237100,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -254249,7 +237709,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -254266,7 +237726,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -254278,11 +237738,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -254420,11 +237880,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -254769,7 +238229,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -254786,7 +238246,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -254798,11 +238258,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -255083,7 +238543,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -255100,7 +238560,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -255112,11 +238572,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -255243,7 +238703,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -255260,7 +238720,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -255272,11 +238732,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -255398,7 +238858,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -255415,7 +238875,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -255427,11 +238887,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -255549,7 +239009,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -255566,7 +239026,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -255578,11 +239038,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -268465,21 +251925,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -272687,11 +256147,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -272699,7 +256159,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -272716,7 +256176,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -272728,11 +256188,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -272793,11 +256253,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -272805,7 +256265,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -272822,7 +256282,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -272834,11 +256294,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -273019,11 +256479,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -273031,7 +256491,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -273048,7 +256508,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -273060,11 +256520,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -273082,11 +256542,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -273230,7 +256690,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -273335,7 +256795,7 @@ "type": "string" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -273381,7 +256841,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -273451,11 +256911,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -273599,7 +257059,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -273704,7 +257164,7 @@ "type": "string" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -273750,7 +257210,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -274102,11 +257562,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -274114,7 +257572,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -274131,7 +257589,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -274143,11 +257601,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -274507,7 +257965,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -274612,7 +258070,7 @@ "type": "string" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -274658,7 +258116,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -274799,7 +258257,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -274843,7 +258301,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -274889,7 +258347,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -275007,11 +258465,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -275019,7 +258475,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -275036,7 +258492,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -275048,11 +258504,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -275523,11 +258979,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -275535,7 +258991,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -275552,7 +259008,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -275564,11 +259020,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -275609,21 +259065,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -275659,11 +259115,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -275671,7 +259127,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -275688,7 +259144,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -275700,11 +259156,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -275804,7 +259260,7 @@ "type": "object", "properties": { "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -275812,7 +259268,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -275829,7 +259285,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -275841,11 +259297,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -275863,11 +259319,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -275914,7 +259370,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -275946,7 +259402,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false }, @@ -275974,11 +259430,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -276025,7 +259481,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -276057,7 +259513,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false }, @@ -276079,7 +259535,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -276096,7 +259552,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -276108,11 +259564,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -276213,21 +259669,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -276743,11 +260199,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -276755,7 +260209,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -276772,7 +260226,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -276784,11 +260238,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -276946,7 +260400,7 @@ "x-omitempty": false }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -276978,7 +260432,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -277020,7 +260474,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -277052,7 +260506,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false }, @@ -277094,7 +260548,7 @@ "x-omitempty": false }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -277126,7 +260580,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -277214,11 +260668,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -277226,7 +260678,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -277243,7 +260695,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -277255,11 +260707,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -277505,7 +260957,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -277522,7 +260974,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -277534,11 +260986,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -278064,7 +261516,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -278081,7 +261533,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -278093,11 +261545,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -278253,7 +261705,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -278270,7 +261722,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -278282,11 +261734,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -279110,7 +262562,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -279127,7 +262579,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -279139,11 +262591,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -279378,567 +262830,6 @@ } } }, - "v1EdgeCloudClusterConfigEntity": { - "description": "Edge cloud cluster config entity", - "type": "object", - "properties": { - "clusterConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", - "type": "object", - "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "v1EdgeCloudConfig": { - "description": "EdgeCloudConfig is the Schema for the Edgecloudconfigs API", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", - "type": "string" - }, - "kind": { - "description": "Cloud type of the cloud config", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "EdgeCloudConfigSpec defines the desired state of EdgeCloudConfig", - "type": "object", - "required": [ - "clusterConfig", - "machinePoolConfig" - ], - "properties": { - "clusterConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", - "type": "object", - "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "machinePoolConfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "hosts" - ], - "properties": { - "additionalLabels": { - "description": "additionalLabels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "hosts": { - "type": "array", - "items": { - "description": "EdgeHost of Edge clusters", - "type": "object", - "required": [ - "hostUid", - "hostAddress" - ], - "properties": { - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the Host", - "type": "string" - }, - "hostIdentity": { - "type": "object", - "properties": { - "caCert": { - "description": "CACert is the client CA certificate", - "type": "string" - }, - "socketPath": { - "description": "SocketPath is an optional path to the socket on the host, if not using defaults", - "type": "string" - } - } - }, - "hostName": { - "description": "HostName is the name of the EdgeHost", - "type": "string" - }, - "hostUid": { - "description": "HostUid is the ID of the EdgeHost", - "type": "string" - } - } - } - }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean" - }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean" - } - } - } - } - } - }, - "status": { - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "nodeImage": { - "type": "string" - }, - "sourceImageId": { - "description": "SourceImageId can be from packref's annotations or from pack.json", - "type": "string" - }, - "useCapiImage": { - "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", - "type": "boolean" - } - } - } - } - }, - "v1EdgeCloudConfigSpec": { - "description": "EdgeCloudConfigSpec defines the desired state of EdgeCloudConfig", - "type": "object", - "required": [ - "clusterConfig", - "machinePoolConfig" - ], - "properties": { - "clusterConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", - "type": "object", - "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "machinePoolConfig": { - "type": "array", - "items": { - "type": "object", - "required": [ - "hosts" - ], - "properties": { - "additionalLabels": { - "description": "additionalLabels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "hosts": { - "type": "array", - "items": { - "description": "EdgeHost of Edge clusters", - "type": "object", - "required": [ - "hostUid", - "hostAddress" - ], - "properties": { - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the Host", - "type": "string" - }, - "hostIdentity": { - "type": "object", - "properties": { - "caCert": { - "description": "CACert is the client CA certificate", - "type": "string" - }, - "socketPath": { - "description": "SocketPath is an optional path to the socket on the host, if not using defaults", - "type": "string" - } - } - }, - "hostName": { - "description": "HostName is the name of the EdgeHost", - "type": "string" - }, - "hostUid": { - "description": "HostUid is the ID of the EdgeHost", - "type": "string" - } - } - } - }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean" - }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean" - } - } - } - } - } - }, - "v1EdgeCloudConfigStatus": { - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "type": "object", - "required": [ - "type", - "status" - ], - "properties": { - "lastProbeTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "lastTransitionTime": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "message": { - "description": "Human-readable message indicating details about last transition.", - "type": "string" - }, - "reason": { - "description": "Unique, one-word, CamelCase reason for the condition's last transition.", - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "nodeImage": { - "type": "string" - }, - "sourceImageId": { - "description": "SourceImageId can be from packref's annotations or from pack.json", - "type": "string" - }, - "useCapiImage": { - "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", - "type": "boolean" - } - } - }, - "v1EdgeClusterConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", - "type": "object", - "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } - } - } - }, "v1EdgeHost": { "description": "EdgeHost is the underlying appliance", "type": "object", @@ -280119,7 +263010,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -280136,7 +263027,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -280148,11 +263039,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -280247,11 +263138,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -280316,11 +263207,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -280465,11 +263356,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -280773,7 +263664,7 @@ } }, "type": { - "description": "Cloudtype of the provisioned edge host", + "description": "Deprecated. Cloudtype of the provisioned edge host", "type": "string", "enum": [ "libvirt", @@ -281167,11 +264058,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -281236,11 +264127,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -281385,11 +264276,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -281693,7 +264584,7 @@ } }, "type": { - "description": "Cloudtype of the provisioned edge host", + "description": "Deprecated. Cloudtype of the provisioned edge host", "type": "string", "enum": [ "libvirt", @@ -281964,7 +264855,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -281981,7 +264872,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -281993,11 +264884,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -282092,11 +264983,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -282161,11 +265052,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -282310,11 +265201,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -282618,7 +265509,7 @@ } }, "type": { - "description": "Cloudtype of the provisioned edge host", + "description": "Deprecated. Cloudtype of the provisioned edge host", "type": "string", "enum": [ "libvirt", @@ -283157,7 +266048,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -283174,7 +266065,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -283186,11 +266077,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -283953,7 +266844,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -283970,7 +266861,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -283982,11 +266873,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -284309,7 +267200,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -284326,7 +267217,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -284338,11 +267229,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -284674,862 +267565,14 @@ } } }, - "v1EdgeInstanceType": { - "description": "EdgeInstanceType defines the instance configuration for a docker container node", + "v1EdgeHostsTags": { "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } - }, - "v1EdgeMachine": { - "description": "Edge cloud VM definition", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the machine.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Edge cloud VM definition spec", - "type": "object", - "properties": { - "bootstrapped": { - "type": "boolean" - }, - "customImage": { - "type": "string" - }, - "edgeHostUid": { - "type": "string" - }, - "instanceType": { - "description": "EdgeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } - }, - "loadBalancerConfigured": { - "type": "boolean" - }, - "mounts": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Edge mounts", - "type": "object", - "properties": { - "containerPath": { - "type": "string" - }, - "hostPath": { - "type": "string" - }, - "readonly": { - "type": "boolean" - } - } - } - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } - } - } - } - } - } - }, - "v1EdgeMachinePoolCloudConfigEntity": { - "required": [ - "edgeHosts" - ], - "properties": { - "edgeHosts": { - "type": "array", - "uniqueItems": true, - "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostUid": { - "type": "string" - } - } - } - } - } - }, - "v1EdgeMachinePoolConfig": { - "type": "object", - "required": [ - "hosts" - ], "properties": { - "additionalLabels": { - "description": "additionalLabels", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "hosts": { - "type": "array", - "items": { - "description": "EdgeHost of Edge clusters", - "type": "object", - "required": [ - "hostUid", - "hostAddress" - ], - "properties": { - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the Host", - "type": "string" - }, - "hostIdentity": { - "type": "object", - "properties": { - "caCert": { - "description": "CACert is the client CA certificate", - "type": "string" - }, - "socketPath": { - "description": "SocketPath is an optional path to the socket on the host, if not using defaults", - "type": "string" - } - } - }, - "hostName": { - "description": "HostName is the name of the EdgeHost", - "type": "string" - }, - "hostUid": { - "description": "HostUid is the ID of the EdgeHost", - "type": "string" - } - } - } - }, - "isControlPlane": { - "description": "whether this pool is for control plane", - "type": "boolean" - }, - "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "tags": { "type": "array", "items": { "type": "string" } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "size of the pool, number of machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean" - } - } - }, - "v1EdgeMachinePoolConfigEntity": { - "type": "object", - "properties": { - "cloudConfig": { - "required": [ - "edgeHosts" - ], - "properties": { - "edgeHosts": { - "type": "array", - "uniqueItems": true, - "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostUid": { - "type": "string" - } - } - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - }, - "v1EdgeMachinePoolHost": { - "description": "EdgeHost of Edge clusters", - "type": "object", - "required": [ - "hostUid", - "hostAddress" - ], - "properties": { - "hostAddress": { - "description": "HostAddress is a FQDN or IP address of the Host", - "type": "string" - }, - "hostIdentity": { - "type": "object", - "properties": { - "caCert": { - "description": "CACert is the client CA certificate", - "type": "string" - }, - "socketPath": { - "description": "SocketPath is an optional path to the socket on the host, if not using defaults", - "type": "string" - } - } - }, - "hostName": { - "description": "HostName is the name of the EdgeHost", - "type": "string" - }, - "hostUid": { - "description": "HostUid is the ID of the EdgeHost", - "type": "string" - } - } - }, - "v1EdgeMachinePoolHostEntity": { - "required": [ - "hostUid" - ], - "properties": { - "hostUid": { - "type": "string" - } - } - }, - "v1EdgeMachinePoolHostIdentity": { - "type": "object", - "properties": { - "caCert": { - "description": "CACert is the client CA certificate", - "type": "string" - }, - "socketPath": { - "description": "SocketPath is an optional path to the socket on the host, if not using defaults", - "type": "string" - } - } - }, - "v1EdgeMachineSpec": { - "description": "Edge cloud VM definition spec", - "type": "object", - "properties": { - "bootstrapped": { - "type": "boolean" - }, - "customImage": { - "type": "string" - }, - "edgeHostUid": { - "type": "string" - }, - "instanceType": { - "description": "EdgeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } - }, - "loadBalancerConfigured": { - "type": "boolean" - }, - "mounts": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Edge mounts", - "type": "object", - "properties": { - "containerPath": { - "type": "string" - }, - "hostPath": { - "type": "string" - }, - "readonly": { - "type": "boolean" - } - } - } - } - } - }, - "v1EdgeMachines": { - "description": "Edge machine list", - "type": "object", - "required": [ - "items" - ], - "properties": { - "items": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Edge cloud VM definition", - "type": "object", - "properties": { - "apiVersion": { - "description": "Deprecated. Not used for the resource info.", - "type": "string" - }, - "kind": { - "description": "Deprecated. Cloud type of the machine.", - "type": "string" - }, - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "description": "Edge cloud VM definition spec", - "type": "object", - "properties": { - "bootstrapped": { - "type": "boolean" - }, - "customImage": { - "type": "string" - }, - "edgeHostUid": { - "type": "string" - }, - "instanceType": { - "description": "EdgeInstanceType defines the instance configuration for a docker container node", - "type": "object", - "required": [ - "numCPUs", - "memoryInMB" - ], - "properties": { - "memoryInMB": { - "description": "MemoryinMB is the memory in megabytes", - "type": "integer", - "format": "int32" - }, - "numCPUs": { - "description": "NumCPUs is the number of CPUs", - "type": "integer", - "format": "int32" - } - } - }, - "loadBalancerConfigured": { - "type": "boolean" - }, - "mounts": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Edge mounts", - "type": "object", - "properties": { - "containerPath": { - "type": "string" - }, - "hostPath": { - "type": "string" - }, - "readonly": { - "type": "boolean" - } - } - } - } - } - }, - "status": { - "description": "cloud machine status", - "type": "object", - "properties": { - "health": { - "description": "Machine health state", - "type": "object", - "properties": { - "conditions": { - "type": "array", - "items": { - "description": "Machine health condition", - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "reason": { - "type": "string" - }, - "status": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "lastHeartBeatTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "state": { - "type": "string" - } - } - }, - "instanceState": { - "type": "string", - "enum": [ - "Pending", - "Provisioning", - "Provisioned", - "Running", - "Deleting", - "Deleted", - "Failed", - "Unknown" - ] - }, - "maintenanceStatus": { - "description": "Machine maintenance status", - "type": "object", - "properties": { - "action": { - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "v1EdgeMount": { - "description": "Edge mounts", - "type": "object", - "properties": { - "containerPath": { - "type": "string" - }, - "hostPath": { - "type": "string" - }, - "readonly": { - "type": "boolean" } } }, @@ -285605,7 +267648,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -285622,7 +267665,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -285634,11 +267677,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -285820,7 +267863,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string", @@ -285869,7 +267912,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "items": { "description": "Taint", @@ -285914,7 +267957,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -286150,7 +268193,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string", @@ -286199,7 +268242,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "items": { "description": "Taint", @@ -286244,7 +268287,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -286484,11 +268527,9 @@ "description": "EdgeNative cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -286496,7 +268537,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -286513,7 +268554,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -286525,11 +268566,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -286846,7 +268887,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string", @@ -286895,7 +268936,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "items": { "description": "Taint", @@ -286940,7 +268981,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -287048,7 +269089,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -287092,7 +269133,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -287138,7 +269179,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -287280,11 +269321,9 @@ "description": "EdgeNative cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -287292,7 +269331,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -287309,7 +269348,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -287321,11 +269360,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -287545,7 +269584,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -287562,7 +269601,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -287574,11 +269613,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -287643,7 +269682,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -287660,7 +269699,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -287672,11 +269711,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -287790,7 +269829,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -287807,7 +269846,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -287819,11 +269858,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -287863,7 +269902,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -287880,7 +269919,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -287892,11 +269931,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -288091,11 +270130,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -288103,7 +270142,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -288120,7 +270159,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -288132,11 +270171,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -288154,11 +270193,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -288515,7 +270554,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -288581,7 +270620,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -288627,7 +270666,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -288651,11 +270690,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -289012,7 +271051,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -289078,7 +271117,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -289124,7 +271163,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -289684,7 +271723,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -289750,7 +271789,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -289796,7 +271835,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -290000,7 +272039,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -290044,7 +272083,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -290090,7 +272129,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -290142,11 +272181,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -290160,7 +272199,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -290177,7 +272216,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -290189,11 +272228,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -290298,11 +272337,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -290316,7 +272355,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -290333,7 +272372,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -290345,11 +272384,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -290426,6 +272465,21 @@ } } }, + "v1EventsObjectsEntity": { + "type": "object", + "required": [ + "resourceType", + "resourceUid" + ], + "properties": { + "resourceType": { + "type": "string" + }, + "resourceUid": { + "type": "string" + } + } + }, "v1EventsRelatedObjectsEntity": { "type": "object", "required": [ @@ -290513,6 +272567,231 @@ } } }, + "v1Feature": { + "description": "Feature response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Feature spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "key": { + "description": "Feature key", + "type": "string" + } + } + } + } + }, + "v1FeatureFlagPing": { + "type": "object", + "properties": { + "msg": { + "type": "string" + } + } + }, + "v1FeatureSpec": { + "description": "Feature spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "key": { + "description": "Feature key", + "type": "string" + } + } + }, + "v1FeatureUpdate": { + "description": "Feature update spec", + "properties": { + "metadata": { + "description": "ObjectMeta input entity for object creation", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + } + }, + "spec": { + "description": "Feature update spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + } + } + } + } + }, + "v1FeatureUpdateSpec": { + "description": "Feature update spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + } + } + }, + "v1Features": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of features", + "type": "array", + "uniqueItems": true, + "items": { + "description": "Feature response", + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "description": "Feature spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "key": { + "description": "Feature key", + "type": "string" + } + } + } + } + } + } + } + }, "v1FileUploadResponse": { "description": "File upload response", "type": "object", @@ -290668,7 +272947,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -290685,7 +272964,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -290697,11 +272976,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -290792,7 +273071,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -290809,7 +273088,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -290821,11 +273100,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -290993,11 +273272,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -291005,7 +273284,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -291022,7 +273301,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -291034,11 +273313,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -291073,11 +273352,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -291085,7 +273364,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -291102,7 +273381,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -291114,11 +273393,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -291234,11 +273513,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -291246,7 +273525,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -291263,7 +273542,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -291275,11 +273554,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -291405,11 +273684,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -291417,7 +273696,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -291434,7 +273713,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -291446,11 +273725,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -291468,11 +273747,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -291578,7 +273857,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -291638,7 +273917,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -291684,7 +273963,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -291791,11 +274070,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -291901,7 +274180,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -291961,7 +274240,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -292007,7 +274286,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -292274,11 +274553,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -292286,7 +274563,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -292303,7 +274580,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -292315,11 +274592,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -292578,7 +274855,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -292638,7 +274915,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -292684,7 +274961,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -292763,7 +275040,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -292807,7 +275084,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -292853,7 +275130,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -292957,11 +275234,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -292969,7 +275244,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -292986,7 +275261,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -292998,11 +275273,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -293386,6 +275661,10 @@ "type": "string" } } + }, + "projectId": { + "description": "GCP project id", + "type": "string" } } }, @@ -293599,7 +275878,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -293616,7 +275895,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -293628,11 +275907,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -293650,11 +275929,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -293704,11 +275983,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -293730,7 +276009,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -293750,7 +276029,7 @@ "format": "int32" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -293773,11 +276052,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -293827,11 +276106,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -293853,7 +276132,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -293873,7 +276152,7 @@ "format": "int32" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -293941,11 +276220,9 @@ "description": "Generic cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -293953,7 +276230,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -293970,7 +276247,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -293982,11 +276259,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -294138,7 +276415,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -294158,7 +276435,7 @@ "format": "int32" }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -294227,7 +276504,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -294271,7 +276548,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -294317,7 +276594,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -294401,11 +276678,9 @@ "description": "Generic cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -294413,7 +276688,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -294430,7 +276705,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -294442,11 +276717,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -294982,7 +277257,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -294999,7 +277274,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -295011,11 +277286,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -295073,11 +277348,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -295085,7 +277358,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -295102,7 +277375,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -295114,11 +277387,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -295276,7 +277549,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -295293,7 +277566,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -295305,11 +277578,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -295393,11 +277666,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -295405,7 +277676,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -295422,7 +277693,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -295434,11 +277705,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -295582,7 +277853,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -295599,7 +277870,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -295611,11 +277882,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -295967,7 +278238,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -295984,7 +278255,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -295996,11 +278267,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -296109,11 +278380,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -296127,11 +278398,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -296206,11 +278477,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -296224,11 +278495,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -296254,11 +278525,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -296891,7 +279162,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -296908,7 +279179,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -296920,11 +279191,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -298261,7 +280532,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -298278,7 +280549,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -298290,11 +280561,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -298758,7 +281029,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -298775,7 +281046,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -298787,11 +281058,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -298889,7 +281160,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -298906,7 +281177,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -298918,11 +281189,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -299028,7 +281299,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -299045,7 +281316,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -299057,11 +281328,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -299855,11 +282126,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -299867,7 +282138,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -299884,7 +282155,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -299896,11 +282167,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -300043,7 +282314,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -300232,7 +282503,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -300278,7 +282549,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" }, "xslTemplate": { @@ -300497,7 +282768,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -300686,7 +282957,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -300732,7 +283003,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" }, "xslTemplate": { @@ -301002,11 +283273,9 @@ "description": "Libvirt cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -301014,7 +283283,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -301031,7 +283300,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -301043,11 +283312,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -301518,7 +283787,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -301707,7 +283976,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -301753,7 +284022,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" }, "xslTemplate": { @@ -301973,7 +284242,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -302017,7 +284286,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -302063,7 +284332,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -302213,11 +284482,9 @@ "description": "Libvirt cloud VM definition", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -302225,7 +284492,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -302242,7 +284509,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -302254,11 +284521,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -302860,7 +285127,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -302877,7 +285144,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -302889,11 +285156,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -302925,7 +285192,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -302942,7 +285209,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -302954,11 +285221,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -303090,11 +285357,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -303102,7 +285367,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -303119,7 +285384,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -303131,11 +285396,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -303189,11 +285454,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", "type": "string" }, "metadata": { @@ -303201,7 +285464,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -303218,7 +285481,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -303230,11 +285493,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -303357,11 +285620,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -303369,7 +285632,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -303386,7 +285649,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -303398,11 +285661,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -303420,11 +285683,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -303497,7 +285760,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -303551,7 +285814,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -303597,7 +285860,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -303698,11 +285961,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -303775,7 +286038,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -303829,7 +286092,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -303875,7 +286138,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -304047,11 +286310,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -304059,7 +286320,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -304076,7 +286337,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -304088,11 +286349,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -304206,7 +286467,7 @@ "type": "object", "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -304319,7 +286580,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -304373,7 +286634,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -304419,7 +286680,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -304500,7 +286761,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -304544,7 +286805,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -304590,7 +286851,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -304647,11 +286908,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -304659,7 +286918,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -304676,7 +286935,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -304688,11 +286947,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -305101,7 +287360,7 @@ } }, "v1MachineCertificate": { - "description": "K8 Certificates for master nodes", + "description": "K8 Certificates for control plane nodes", "type": "object", "properties": { "certificateAuthorities": { @@ -305145,13 +287404,13 @@ } }, "v1MachineCertificates": { - "description": "K8 Certificates for all the cluster's master nodes", + "description": "K8 Certificates for all the cluster's control plane nodes", "type": "object", "properties": { "machineCertificates": { "type": "array", "items": { - "description": "K8 Certificates for master nodes", + "description": "K8 Certificates for control plane nodes", "type": "object", "properties": { "certificateAuthorities": { @@ -305353,7 +287612,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -305397,7 +287656,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -305443,7 +287702,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -305527,11 +287786,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -305687,7 +287946,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -305859,7 +288118,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -305876,7 +288135,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -305888,11 +288147,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -305950,7 +288209,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -305967,7 +288226,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -305979,11 +288238,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -306035,7 +288294,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -306052,7 +288311,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -306064,11 +288323,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -307185,7 +289444,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -307202,7 +289461,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -307214,11 +289473,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -310767,7 +293026,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -310784,7 +293043,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -310796,11 +293055,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -314776,7 +297035,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -314793,7 +297052,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -314805,11 +297064,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -315021,7 +297280,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -315038,7 +297297,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -315050,11 +297309,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -315162,7 +297421,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -315179,7 +297438,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -315191,11 +297450,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -315205,21 +297464,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -315236,21 +297495,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -315290,11 +297549,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -315403,7 +297662,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -315420,7 +297679,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -315432,11 +297691,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -315506,7 +297765,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -315523,7 +297782,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -315535,11 +297794,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -315890,11 +298149,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -315902,7 +298161,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -315919,7 +298178,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -315931,11 +298190,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -316009,11 +298268,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -316021,7 +298280,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -316038,7 +298297,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -316050,11 +298309,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -316301,11 +298560,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -316313,7 +298572,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -316330,7 +298589,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -316342,11 +298601,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -316364,11 +298623,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -316467,7 +298726,7 @@ } }, "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -316516,7 +298775,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -316571,7 +298830,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -316617,7 +298876,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -316692,11 +298951,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -316795,7 +299054,7 @@ } }, "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -316844,7 +299103,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -316899,7 +299158,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -316945,7 +299204,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -317213,11 +299472,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -317225,7 +299482,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -317242,7 +299499,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -317254,11 +299511,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -317417,7 +299674,7 @@ ], "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -317458,7 +299715,7 @@ ], "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -317529,7 +299786,7 @@ } }, "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -317578,7 +299835,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -317633,7 +299890,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -317679,7 +299936,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -317697,7 +299954,7 @@ ], "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -317776,7 +300033,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -317820,7 +300077,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -317866,7 +300123,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -317965,11 +300222,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -317977,7 +300232,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -317994,7 +300249,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -318006,11 +300261,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -318669,7 +300924,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -318686,7 +300941,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -318698,11 +300953,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -318882,6 +301137,15 @@ "type": "string" } }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, "state": { "type": "string" } @@ -318909,7 +301173,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -318926,7 +301190,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -318938,11 +301202,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -318969,7 +301233,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -318986,7 +301250,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -318998,11 +301262,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -319182,6 +301446,15 @@ "type": "string" } }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, "state": { "type": "string" } @@ -319351,6 +301624,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -319424,11 +301717,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -319442,11 +301735,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -319760,7 +302053,7 @@ "type": "object", "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -320065,6 +302358,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -320138,11 +302451,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -320156,11 +302469,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -320477,7 +302790,7 @@ ], "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -320771,6 +303084,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -320844,11 +303177,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -320862,11 +303195,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -321205,7 +303538,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -321222,7 +303555,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -321234,11 +303567,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -321265,7 +303598,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -321282,7 +303615,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -321294,11 +303627,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -321478,6 +303811,15 @@ "type": "string" } }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, "state": { "type": "string" } @@ -322201,7 +304543,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -322218,7 +304560,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -322230,11 +304572,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -322451,11 +304793,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack api version", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack kind", "type": "string" }, "metadata": { @@ -322463,7 +304805,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -322480,7 +304822,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -322492,11 +304834,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -322613,11 +304955,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack api version", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack kind", "type": "string" }, "metadata": { @@ -322625,7 +304967,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -322642,7 +304984,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -322654,11 +304996,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -322983,11 +305325,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -323173,7 +305515,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -323190,7 +305532,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -323202,11 +305544,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -323295,11 +305637,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -323746,11 +306088,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -324125,11 +306467,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -324137,7 +306477,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -324154,7 +306494,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -324166,11 +306506,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -324328,7 +306668,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -324345,7 +306685,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -324357,11 +306697,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -324446,11 +306786,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -324458,7 +306796,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -324475,7 +306813,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -324487,11 +306825,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -324847,7 +307185,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -324864,7 +307202,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -324876,11 +307214,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -325040,11 +307378,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack api version", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack kind", "type": "string" }, "metadata": { @@ -325052,7 +307390,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -325069,7 +307407,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -325081,11 +307419,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -325159,11 +307497,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -325536,11 +307874,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack api version", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", + "description": "Pack kind", "type": "string" }, "metadata": { @@ -325548,7 +307886,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -325565,7 +307903,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -325577,11 +307915,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -325655,11 +307993,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -326067,11 +308405,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -328146,11 +310484,6 @@ "description": "Country name the card belongs", "type": "string" }, - "expMonth": { - "description": "Expiry month of the card", - "type": "number", - "format": "uint64" - }, "expYear": { "description": "Expiry year of the card", "type": "number", @@ -328213,11 +310546,6 @@ "description": "Country name the card belongs", "type": "string" }, - "expMonth": { - "description": "Expiry month of the card", - "type": "number", - "format": "uint64" - }, "expYear": { "description": "Expiry year of the card", "type": "number", @@ -328451,7 +310779,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -328468,7 +310796,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -328480,11 +310808,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -328511,7 +310839,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -328528,7 +310856,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -328540,11 +310868,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -328724,6 +311052,15 @@ "type": "string" } }, + "notifications": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, "state": { "type": "string" } @@ -328820,7 +311157,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -328837,7 +311174,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -328849,11 +311186,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -330777,7 +313114,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -330794,7 +313131,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -330806,11 +313143,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -331646,21 +313983,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -331792,7 +314129,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -331809,7 +314146,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -331821,11 +314158,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -332320,7 +314657,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -332337,7 +314674,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -332349,11 +314686,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -332953,7 +315290,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -332970,7 +315307,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -332982,11 +315319,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -333286,7 +315623,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -333303,7 +315640,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -333315,11 +315652,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -333615,7 +315952,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -333632,7 +315969,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -333644,11 +315981,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -334916,7 +317253,11 @@ "type": "string", "format": "date-time" }, + "includeControlPlaneMachines": { + "type": "boolean" + }, "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", "type": "boolean" }, "namespaces": { @@ -335001,7 +317342,11 @@ "type": "string", "format": "date-time" }, + "includeControlPlaneMachines": { + "type": "boolean" + }, "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", "type": "boolean" }, "namespaces": { @@ -335249,7 +317594,11 @@ "type": "string", "format": "date-time" }, + "includeControlPlaneMachines": { + "type": "boolean" + }, "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", "type": "boolean" }, "namespaces": { @@ -335335,7 +317684,11 @@ "type": "string", "format": "date-time" }, + "includeControlPlaneMachines": { + "type": "boolean" + }, "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", "type": "boolean" }, "namespaces": { @@ -335958,7 +318311,11 @@ "type": "string", "format": "date-time" }, + "includeControlPlaneMachines": { + "type": "boolean" + }, "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", "type": "boolean" }, "namespaces": { @@ -336081,7 +318438,11 @@ "type": "string", "format": "date-time" }, + "includeControlPlaneMachines": { + "type": "boolean" + }, "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", "type": "boolean" }, "namespaces": { @@ -336798,7 +319159,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -336815,7 +319176,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -336827,11 +319188,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -336988,7 +319349,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -337005,7 +319366,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -337017,11 +319378,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -337192,7 +319553,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -337209,7 +319570,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -337221,11 +319582,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -337300,7 +319661,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -337317,7 +319678,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -337329,11 +319690,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -337409,7 +319770,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -337426,7 +319787,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -337438,11 +319799,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -339356,11 +321717,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -339368,7 +321727,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -339385,7 +321744,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -339397,11 +321756,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -339511,11 +321870,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "metadata": { @@ -339523,7 +321880,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -339540,7 +321897,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -339552,11 +321909,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -340034,7 +322391,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -340051,7 +322408,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -340063,11 +322420,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -340180,11 +322537,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -340198,11 +322555,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -340647,7 +323004,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -340691,7 +323048,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -340737,7 +323094,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -340914,6 +323271,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -340931,21 +323308,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -341161,7 +323538,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -341205,7 +323582,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -341251,7 +323628,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -341271,7 +323648,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -341288,7 +323665,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -341300,11 +323677,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -341549,11 +323926,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -341567,11 +323944,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -341980,7 +324357,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -342024,7 +324401,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -342070,7 +324447,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -342247,6 +324624,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -342264,21 +324661,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -342590,7 +324987,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -342634,7 +325031,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -342680,7 +325077,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -342696,11 +325093,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -342708,7 +325105,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -342725,7 +325122,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -342737,11 +325134,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -342759,11 +325156,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -342909,11 +325306,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -342927,11 +325324,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -343031,11 +325428,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -343100,11 +325497,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -343249,11 +325646,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -344984,7 +327381,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -345001,7 +327398,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -345013,11 +327410,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -345421,15 +327818,6 @@ } } }, - "v1SpectroClusterNotifications": { - "description": "Spectro cluster notifications", - "properties": { - "isAvailable": { - "type": "boolean", - "x-omitempty": false - } - } - }, "v1SpectroClusterOidcClaims": { "type": "object", "properties": { @@ -345653,11 +328041,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -345846,11 +328234,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -346132,6 +328520,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -346312,7 +328720,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -346329,7 +328737,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -346341,11 +328749,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -346371,7 +328779,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -346388,7 +328796,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -346400,11 +328808,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -346478,11 +328886,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -346831,11 +329239,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -346924,6 +329332,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } }, @@ -346944,7 +329372,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -346961,7 +329389,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -346973,11 +329401,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -347003,7 +329431,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -347020,7 +329448,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -347032,11 +329460,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -347110,11 +329538,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -347463,11 +329891,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -347509,7 +329937,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -347526,7 +329954,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -347538,11 +329966,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -347616,11 +330044,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -347969,11 +330397,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -348017,11 +330445,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -348086,11 +330514,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -348235,11 +330663,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -348386,6 +330814,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -348434,7 +330882,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -348451,7 +330899,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -348463,11 +330911,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -348488,7 +330936,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -348505,7 +330953,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -348517,11 +330965,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -349095,7 +331543,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -349112,7 +331560,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -349124,11 +331572,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -349205,11 +331653,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -349398,11 +331846,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -349642,11 +332090,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -349835,11 +332283,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -350046,11 +332494,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -350239,11 +332687,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -350492,11 +332940,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -350685,11 +333133,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -350836,7 +333284,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -350853,7 +333301,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -350865,11 +333313,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -350887,11 +333335,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351037,11 +333485,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351055,11 +333503,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351159,11 +333607,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351228,11 +333676,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351377,11 +333825,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351498,11 +333946,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351648,11 +334096,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351666,11 +334114,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351770,11 +334218,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351839,11 +334287,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -351988,11 +334436,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -352022,6 +334470,16 @@ } } }, + "v1SpectroClusterState": { + "description": "Spectrocluster state entity", + "type": "object", + "properties": { + "state": { + "description": "Spectrocluster state", + "type": "string" + } + } + }, "v1SpectroClusterStatus": { "description": "SpectroClusterStatus", "type": "object", @@ -352562,6 +335020,22 @@ } } }, + "v1SpectroClusterStatusEntity": { + "description": "Spectrocluster status entity", + "type": "object", + "properties": { + "status": { + "description": "Spectrocluster state entity", + "type": "object", + "properties": { + "state": { + "description": "Spectrocluster state", + "type": "string" + } + } + } + } + }, "v1SpectroClusterSummary": { "description": "Spectro cluster summary", "type": "object", @@ -352571,7 +335045,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -352588,7 +335062,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -352600,11 +335074,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -352724,11 +335198,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -352884,7 +335358,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -352925,11 +335399,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -353004,11 +335478,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -353226,11 +335700,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -353640,7 +336114,7 @@ } }, "notifications": { - "description": "Spectro cluster notifications", + "description": "Cluster notifications status", "properties": { "isAvailable": { "type": "boolean", @@ -354376,7 +336850,7 @@ } }, "notifications": { - "description": "Spectro cluster notifications", + "description": "Cluster notifications status", "properties": { "isAvailable": { "type": "boolean", @@ -354776,7 +337250,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -354793,7 +337267,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -354805,11 +337279,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -354917,11 +337391,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -355077,7 +337551,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -355182,11 +337656,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -355404,11 +337878,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -355905,7 +338379,7 @@ } }, "notifications": { - "description": "Spectro cluster notifications", + "description": "Cluster notifications status", "properties": { "isAvailable": { "type": "boolean", @@ -356455,6 +338929,23 @@ } } }, + "v1SpectroClusterVariable": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + }, "v1SpectroClusters": { "type": "object", "required": [ @@ -356469,11 +338960,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -356481,7 +338972,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -356498,7 +338989,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -356510,11 +339001,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -356532,11 +339023,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -356682,11 +339173,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -356700,11 +339191,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -356804,11 +339295,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -356873,11 +339364,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -357022,11 +339513,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -357699,7 +340190,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -357716,7 +340207,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -357728,11 +340219,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -357758,7 +340249,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -357775,7 +340266,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -357787,11 +340278,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -357976,7 +340467,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -357993,7 +340484,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -358005,11 +340496,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -358129,11 +340620,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -358289,7 +340780,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -358330,11 +340821,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -358409,11 +340900,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -358631,11 +341122,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -359045,7 +341536,7 @@ } }, "notifications": { - "description": "Spectro cluster notifications", + "description": "Cluster notifications status", "properties": { "isAvailable": { "type": "boolean", @@ -359249,7 +341740,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -359266,7 +341757,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -359278,11 +341769,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -359420,11 +341911,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -359438,11 +341929,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -359890,7 +342381,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -359934,7 +342425,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -359980,7 +342471,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -360157,6 +342648,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -360356,7 +342867,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -360400,7 +342911,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -360446,7 +342957,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -360466,21 +342977,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -360831,7 +343342,7 @@ "x-omitempty": false }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -360863,7 +343374,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -360945,1046 +343456,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" - } - } - } - } - } - } - } - }, - "v1SpectroEdgeClusterEntity": { - "description": "Edge cluster request payload for create and update", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "creationTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "deletionTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "lastModifiedTimestamp": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "name": { - "description": "Name of the resource.", - "type": "string" - }, - "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "cloudConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", - "type": "object", - "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "clusterConfig": { - "type": "object", - "properties": { - "clusterMetaAttribute": { - "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", - "type": "string" - }, - "controlPlaneHealthCheckTimeout": { - "type": "string" - }, - "hostClusterConfig": { - "properties": { - "clusterEndpoint": { - "properties": { - "config": { - "properties": { - "ingressConfig": { - "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "host": { - "type": "string" - }, - "port": { - "type": "integer", - "format": "int64" - } - } - }, - "loadBalancerConfig": { - "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", - "properties": { - "externalIPs": { - "type": "array", - "items": { - "type": "string" - } - }, - "externalTrafficPolicy": { - "type": "string" - }, - "loadBalancerSourceRanges": { - "type": "array", - "items": { - "type": "string" - } - } - } - } - } - }, - "type": { - "description": "is enabled as host cluster", - "type": "string", - "enum": [ - "Ingress", - "LoadBalancer" - ] - } - } - }, - "clusterGroup": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "hostCluster": { - "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", - "type": "object", - "properties": { - "kind": { - "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "type": "string" - }, - "name": { - "description": "Name of the referent.", - "type": "string" - }, - "uid": { - "description": "UID of the referent.", - "type": "string" - } - } - }, - "isHostCluster": { - "description": "is enabled as host cluster", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "lifecycleConfig": { - "properties": { - "pause": { - "description": "enable pause life cycle config", - "type": "boolean", - "default": false, - "x-omitempty": false - } - } - }, - "location": { - "description": "Cluster location information", - "type": "object", - "properties": { - "countryCode": { - "description": "country code for cluster location", - "type": "string" - }, - "countryName": { - "description": "country name for cluster location", - "type": "string" - }, - "geoLoc": { - "description": "Geolocation Latlong entity", - "type": "object", - "properties": { - "latitude": { - "description": "Latitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - }, - "longitude": { - "description": "Longitude of a resource", - "type": "number", - "format": "float64", - "x-omitempty": false - } - } - }, - "regionCode": { - "description": "region code for cluster location", - "type": "string" - }, - "regionName": { - "description": "region name for cluster location", - "type": "string" - } - } - }, - "machineManagementConfig": { - "type": "object", - "properties": { - "osPatchConfig": { - "type": "object", - "properties": { - "onDemandPatchAfter": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "patchOnBoot": { - "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", - "type": "boolean", - "x-omitempty": false - }, - "rebootIfRequired": { - "description": "Reboot once the OS patch is applied", - "type": "boolean", - "x-omitempty": false - }, - "schedule": { - "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", - "type": "string" - } - } - } - } - }, - "resources": { - "type": "object", - "properties": { - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster Namespace resource defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster namespace spec", - "properties": { - "isRegex": { - "type": "boolean", - "x-omitempty": false - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "resourceAllocation": { - "description": "Cluster namespace resource allocation", - "properties": { - "cpuCores": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - }, - "memoryMiB": { - "type": "number", - "minimum": 0, - "exclusiveMinimum": true - } - } - } - } - } - } - } - }, - "rbacs": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC role binding defintion", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta update entity with uid as input", - "type": "object", - "properties": { - "annotations": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - }, - "spec": { - "description": "Cluster RBAC spec", - "type": "object", - "properties": { - "bindings": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster RBAC binding", - "type": "object", - "properties": { - "namespace": { - "type": "string" - }, - "role": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "Role", - "ClusterRole" - ] - }, - "name": { - "type": "string" - } - } - }, - "subjects": { - "type": "array", - "uniqueItems": true, - "items": { - "description": "Cluster role ref", - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "namespace": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "User", - "Group", - "ServiceAccount" - ] - } - } - } - }, - "type": { - "type": "string", - "enum": [ - "RoleBinding", - "ClusterRoleBinding" - ] - } - } - } - }, - "relatedObject": { - "description": "Object for which the resource is related", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "spectrocluster", - "machine", - "cloudconfig", - "clusterprofile", - "pack", - "appprofile", - "appdeployment", - "edgehost" - ] - }, - "name": { - "type": "string" - }, - "uid": { - "type": "string" - } - } - } - } - } - } - } - } - } - }, - "updateWorkerPoolsInParallel": { - "type": "boolean" - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "properties": { - "cloudConfig": { - "required": [ - "edgeHosts" - ], - "properties": { - "edgeHosts": { - "type": "array", - "uniqueItems": true, - "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostUid": { - "type": "string" - } - } - } - } - } }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", - "type": "string" - }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, - "value": { - "description": "The taint value corresponding to the taint key.", - "type": "string" - } - } - } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false - } - } - } - } - } - }, - "policies": { - "description": "Cluster policies", - "type": "object", - "properties": { - "backupPolicy": { - "description": "Cluster backup config", - "properties": { - "backupLocationName": { - "type": "string" - }, - "backupLocationUid": { - "type": "string" - }, - "backupName": { - "type": "string" - }, - "backupPrefix": { - "type": "string" - }, - "durationInHours": { - "type": "number", - "format": "int64" - }, - "includeAllDisks": { - "type": "boolean" - }, - "includeClusterResources": { - "type": "boolean" - }, - "locationType": { - "type": "string" - }, - "namespaces": { - "type": "array", - "uniqueItems": true, - "items": { - "type": "string" - } - }, - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "scanPolicy": { - "description": "Cluster compliance scan schedule configuration", - "properties": { - "kubeBench": { - "description": "Cluster compliance scan schedule config for kube bench driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "kubeHunter": { - "description": "Cluster compliance scan schedule config for kube hunter driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - }, - "sonobuoy": { - "description": "Cluster compliance scan schedule config for sonobuoy driver", - "properties": { - "schedule": { - "description": "Cluster feature schedule", - "properties": { - "scheduledRunTime": { - "type": "string" - } - } - } - } - } - } - } - } - }, - "profiles": { - "type": "array", - "items": { - "description": "Cluster profile request payload", - "type": "object", - "properties": { - "packValues": { - "description": "Cluster profile packs array", + "variables": { "type": "array", - "uniqueItems": true, "items": { - "description": "Pack values entity to refer the existing pack for the values override", + "description": "Variable with value which will be used within the packs of cluster profile", "type": "object", "required": [ "name" ], "properties": { - "manifests": { - "description": "Pack manifests are additional content as part of the profile", - "type": "array", - "items": { - "description": "Manifest update request payload", - "required": [ - "name" - ], - "properties": { - "content": { - "description": "Manifest content in yaml", - "type": "string" - }, - "name": { - "description": "Manifest name", - "type": "string" - }, - "uid": { - "description": "Manifest uid", - "type": "string" - } - } - } - }, "name": { - "description": "Pack name", - "type": "string" - }, - "tag": { - "description": "Pack version tag", - "type": "string" - }, - "type": { - "type": "string", - "default": "spectro", - "enum": [ - "spectro", - "helm", - "manifest", - "oci" - ] - }, - "values": { - "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", - "type": "string" - } - } - } - }, - "replaceWithProfile": { - "description": "Cluster profile uid to be replaced with new profile", - "type": "string" - }, - "uid": { - "description": "Cluster profile uid", - "type": "string" - } - } - } - } - } - } - } - }, - "v1SpectroEdgeClusterImportEntity": { - "description": "Spectro Edge cluster import request payload", - "type": "object", - "properties": { - "metadata": { - "description": "ObjectMeta input entity for object creation", - "type": "object", - "properties": { - "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "name": { - "description": "Name of the resource.", - "type": "string" - } - } - }, - "spec": { - "type": "object", - "properties": { - "clusterConfig": { - "type": "object", - "properties": { - "importMode": { - "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", - "type": "string", - "enum": [ - "read-only" - ] - }, - "proxy": { - "description": "cluster proxy config spec", - "type": "object", - "properties": { - "caContainerMountPath": { - "description": "Location to mount Proxy CA cert inside container", - "type": "string" - }, - "caHostPath": { - "description": "Location for Proxy CA cert on host nodes", - "type": "string" - }, - "httpProxy": { - "description": "URL for HTTP requests unless overridden by NoProxy", - "type": "string" - }, - "httpsProxy": { - "description": "HTTPS requests unless overridden by NoProxy", - "type": "string" - }, - "noProxy": { - "description": "NoProxy represents the NO_PROXY or no_proxy environment", - "type": "string" - } - } - } - } - } - } - } - } - }, - "v1SpectroEdgeClusterRateEntity": { - "description": "Edge cluster request payload for estimating rate", - "type": "object", - "properties": { - "cloudConfig": { - "description": "EdgeClusterConfig defines Edge Cluster specific Spec", - "type": "object", - "properties": { - "sshKeys": { - "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "machinepoolconfig": { - "type": "array", - "items": { - "type": "object", - "properties": { - "cloudConfig": { - "required": [ - "edgeHosts" - ], - "properties": { - "edgeHosts": { - "type": "array", - "uniqueItems": true, - "items": { - "required": [ - "hostUid" - ], - "properties": { - "hostUid": { - "type": "string" - } - } - } - } - } - }, - "poolConfig": { - "description": "Machine pool configuration for the cluster", - "type": "object", - "required": [ - "name", - "size", - "labels" - ], - "properties": { - "additionalLabels": { - "description": "Additional labels to be part of the machine pool", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "additionalTags": { - "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", - "type": "object", - "additionalProperties": { - "type": "string" - } - }, - "isControlPlane": { - "description": "Whether this pool is for control plane", - "type": "boolean", - "x-omitempty": false - }, - "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", - "type": "array", - "items": { - "type": "string" - } - }, - "machinePoolProperties": { - "description": "Machine pool specific properties", - "type": "object", - "properties": { - "archType": { - "type": "string", - "default": "amd64", - "enum": [ - "amd64", - "arm64" - ] - } - } - }, - "maxSize": { - "description": "Max size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "minSize": { - "description": "Min size of the pool, for scaling", - "type": "integer", - "format": "int32" - }, - "name": { - "type": "string" - }, - "nodeRepaveInterval": { - "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", - "type": "integer", - "format": "int32" - }, - "size": { - "description": "Size of the pool, number of nodes/machines", - "type": "integer", - "format": "int32" - }, - "taints": { - "description": "Master or worker taints", - "type": "array", - "uniqueItems": true, - "items": { - "description": "Taint", - "type": "object", - "properties": { - "effect": { - "type": "string", - "enum": [ - "NoSchedule", - "PreferNoSchedule", - "NoExecute" - ] - }, - "key": { - "description": "The taint key to be applied to a node", + "description": "Variable name", "type": "string" }, - "timeAdded": { - "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - "type": "string", - "format": "date-time" - }, "value": { - "description": "The taint value corresponding to the taint key.", + "description": "Actual value of the variable to be used within the cluster", "type": "string" } } } - }, - "updateStrategy": { - "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", - "type": "object", - "properties": { - "type": { - "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", - "type": "string", - "enum": [ - "RollingUpdateScaleOut", - "RollingUpdateScaleIn" - ] - } - } - }, - "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", - "type": "boolean", - "x-omitempty": false } } } @@ -362002,7 +343493,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -362019,7 +343510,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -362031,11 +343522,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -362169,11 +343660,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -362187,11 +343678,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -362204,6 +343695,16 @@ } } }, + "lifecycleConfig": { + "properties": { + "pause": { + "description": "enable pause life cycle config", + "type": "boolean", + "default": false, + "x-omitempty": false + } + } + }, "location": { "description": "Cluster location information", "type": "object", @@ -362244,6 +343745,35 @@ } } }, + "machineManagementConfig": { + "type": "object", + "properties": { + "osPatchConfig": { + "type": "object", + "properties": { + "onDemandPatchAfter": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + } + } + } + }, "resources": { "type": "object", "properties": { @@ -362567,7 +344097,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -362611,7 +344141,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -362657,7 +344187,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -362834,6 +344364,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -362851,21 +344401,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -363081,7 +344631,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -363125,7 +344675,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -363171,7 +344721,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -363191,7 +344741,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -363208,7 +344758,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -363220,11 +344770,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -363417,11 +344967,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -363435,11 +344985,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -364003,7 +345553,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -364047,7 +345597,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -364093,7 +345643,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -364270,6 +345820,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -364590,7 +346160,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -364634,7 +346204,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -364680,7 +346250,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -364700,7 +346270,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -364717,7 +346287,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -364729,11 +346299,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -364855,11 +346425,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -364873,11 +346443,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -365263,7 +346833,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -365307,7 +346877,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -365353,7 +346923,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -365530,6 +347100,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -365547,21 +347137,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -365727,7 +347317,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -365771,7 +347361,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -365817,7 +347407,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -365837,21 +347427,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -366019,7 +347609,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -366063,7 +347653,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -366109,7 +347699,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -366129,7 +347719,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -366146,7 +347736,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -366158,11 +347748,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -366286,21 +347876,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -366423,7 +348013,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -366440,7 +348030,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -366452,11 +348042,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -366609,7 +348199,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -366626,7 +348216,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -366638,11 +348228,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -366759,11 +348349,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -366777,11 +348367,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -367304,7 +348894,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -367348,7 +348938,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -367394,7 +348984,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -367571,6 +349161,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -367588,21 +349198,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -367909,7 +349519,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -367953,7 +349563,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -367999,7 +349609,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -368019,7 +349629,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -368036,7 +349646,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -368048,11 +349658,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -368158,11 +349768,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -368176,11 +349786,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -368568,7 +350178,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -368612,7 +350222,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -368658,7 +350268,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -368835,6 +350445,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -368852,21 +350482,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -369018,7 +350648,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -369062,7 +350692,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -369108,7 +350738,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -369128,7 +350758,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -369145,7 +350775,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -369157,11 +350787,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -369762,7 +351392,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -369779,7 +351409,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -369791,11 +351421,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -369951,11 +351581,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -369969,11 +351599,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -370298,7 +351928,7 @@ ], "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -370377,7 +352007,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -370421,7 +352051,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -370467,7 +352097,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -370644,6 +352274,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -370661,21 +352311,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -370815,7 +352465,7 @@ ], "properties": { "azs": { - "description": "for master pool, this will be the failure domains for kcp", + "description": "for control plane pool, this will be the failure domains for kcp", "type": "array", "items": { "type": "string" @@ -370894,7 +352544,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -370938,7 +352588,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -370984,7 +352634,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -371054,7 +352704,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -371071,7 +352721,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -371083,11 +352733,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -371232,11 +352882,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -371250,11 +352900,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -371630,7 +353280,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -371674,7 +353324,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -371720,7 +353370,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -371897,6 +353547,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -372034,7 +353704,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -372078,7 +353748,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -372124,7 +353794,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -372144,7 +353814,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -372161,7 +353831,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -372173,11 +353843,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -372313,11 +353983,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -372331,11 +354001,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -372867,6 +354537,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -372884,7 +354574,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -372901,7 +354591,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -372913,11 +354603,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -373107,11 +354797,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -373125,11 +354815,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -373571,7 +355261,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -373615,7 +355305,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -373661,7 +355351,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -373838,6 +355528,26 @@ "uid": { "description": "Cluster profile uid", "type": "string" + }, + "variables": { + "type": "array", + "items": { + "description": "Variable with value which will be used within the packs of cluster profile", + "type": "object", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + } + } } } } @@ -373855,21 +355565,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -374157,7 +355867,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -374201,7 +355911,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -374247,7 +355957,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -375166,7 +356876,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -375183,7 +356893,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -375195,11 +356905,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -375308,21 +357018,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -375396,21 +357106,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -375539,7 +357249,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -375556,7 +357266,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -375568,11 +357278,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -376126,6 +357836,191 @@ } } }, + "v1SystemFeature": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + }, + "key": { + "description": "Unique Feature key", + "type": "string" + } + } + } + } + }, + "v1SystemFeatures": { + "type": "object", + "required": [ + "items" + ], + "properties": { + "items": { + "description": "List of system features", + "type": "array", + "uniqueItems": true, + "items": { + "type": "object", + "properties": { + "metadata": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "type": "object", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "creationTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "deletionTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "lastModifiedTimestamp": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "type": "string", + "format": "date-time" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "spec": { + "type": "object", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + }, + "key": { + "description": "Unique Feature key", + "type": "string" + } + } + } + } + } + } + } + }, + "v1SystemFeaturesOperation": { + "type": "object", + "properties": { + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1SystemFeaturesSpec": { + "type": "object", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + }, + "key": { + "description": "Unique Feature key", + "type": "string" + } + } + }, "v1SystemFtpSpec": { "description": "system ftp config spec", "type": "object", @@ -376903,7 +358798,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -376920,7 +358815,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -376932,11 +358827,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -377810,7 +359705,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -377827,7 +359722,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -377839,11 +359734,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -378016,21 +359911,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -378198,7 +360093,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -378215,7 +360110,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -378227,11 +360122,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -378319,7 +360214,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -378336,7 +360231,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -378348,11 +360243,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -378526,7 +360421,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -378543,7 +360438,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -378555,11 +360450,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -378696,7 +360591,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -378713,7 +360608,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -378725,11 +360620,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -378807,7 +360702,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -378824,7 +360719,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -378836,11 +360731,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -378951,7 +360846,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -378968,7 +360863,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -378980,11 +360875,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -379093,7 +360988,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -379110,7 +361005,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -379122,11 +361017,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -379258,7 +361153,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -379275,7 +361170,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -379287,11 +361182,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -379555,7 +361450,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -379572,7 +361467,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -379584,11 +361479,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -379630,7 +361525,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -379647,7 +361542,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -379659,11 +361554,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -379817,7 +361712,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -379834,7 +361729,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -379846,11 +361741,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -380708,7 +362603,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -380725,7 +362620,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -380737,11 +362632,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -381016,11 +362911,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -381028,7 +362923,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -381045,7 +362940,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -381057,11 +362952,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -381109,11 +363004,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -381121,7 +363016,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -381138,7 +363033,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -381150,11 +363045,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -381356,7 +363251,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -381373,7 +363268,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -381385,11 +363280,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -381407,11 +363302,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -381538,7 +363433,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -381594,7 +363489,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "items": { "description": "Taint", @@ -381639,7 +363534,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -381662,11 +363557,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -381793,7 +363688,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -381849,7 +363744,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "items": { "description": "Taint", @@ -381894,7 +363789,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -382108,11 +364003,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -382120,7 +364013,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -382137,7 +364030,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -382149,11 +364042,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -382379,7 +364272,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -382435,7 +364328,7 @@ } }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "items": { "description": "Taint", @@ -382480,7 +364373,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -382549,7 +364442,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -382593,7 +364486,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -382639,7 +364532,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -382722,11 +364615,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -382734,7 +364625,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -382751,7 +364642,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -382763,11 +364654,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -383645,7 +365536,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -383662,7 +365553,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -383674,11 +365565,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -383777,7 +365668,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -383794,7 +365685,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -383806,11 +365697,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -383835,21 +365726,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -383883,7 +365774,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -383900,7 +365791,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -383912,11 +365803,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -383954,21 +365845,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -384128,21 +366019,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -384176,6 +366067,10 @@ "type": "string" } } + }, + "projectId": { + "description": "GCP project id", + "type": "string" } } }, @@ -384220,6 +366115,10 @@ "type": "string" } } + }, + "projectId": { + "description": "GCP project id", + "type": "string" } } }, @@ -384242,21 +366141,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -384516,7 +366415,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -384533,7 +366432,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -384545,11 +366444,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -384600,7 +366499,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -384617,7 +366516,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -384629,11 +366528,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -384671,7 +366570,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -384688,7 +366587,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -384700,11 +366599,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -384878,7 +366777,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -384895,7 +366794,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -384907,11 +366806,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -385132,7 +367031,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -385149,7 +367048,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -385161,11 +367060,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -385250,7 +367149,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -385267,7 +367166,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -385279,11 +367178,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -385577,7 +367476,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -385594,7 +367493,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -385606,11 +367505,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -385756,7 +367655,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -385773,7 +367672,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -385785,11 +367684,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -385860,7 +367759,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -385877,7 +367776,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -385889,11 +367788,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -386077,7 +367976,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -386094,7 +367993,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -386106,11 +368005,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -386251,7 +368150,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -386268,7 +368167,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -386280,11 +368179,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -387828,11 +369727,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -387840,7 +369739,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -387857,7 +369756,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -387869,11 +369768,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -388013,7 +369912,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -388055,7 +369954,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -388101,7 +370000,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -388294,7 +370193,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -388336,7 +370235,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -388382,7 +370281,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -388578,7 +370477,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -388595,7 +370494,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -388607,11 +370506,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -388805,7 +370704,7 @@ "type": "boolean" }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -388847,7 +370746,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -388893,7 +370792,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean" } } @@ -389792,7 +371691,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -389809,7 +371708,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -389821,11 +371720,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -404761,11 +386660,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -404773,7 +386672,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -404790,7 +386689,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -404802,11 +386701,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -404862,11 +386761,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", + "description": "Cloud account api version", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the account.", + "description": "Cloud account kind", "type": "string" }, "metadata": { @@ -404874,7 +386773,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -404891,7 +386790,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -404903,11 +386802,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -405120,11 +387019,11 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", "type": "string" }, "kind": { - "description": "Cloud type of the cloud config", + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", "type": "string" }, "metadata": { @@ -405132,7 +387031,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -405149,7 +387048,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -405161,11 +387060,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -405187,11 +387086,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -405360,11 +387259,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -405411,11 +387310,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -405474,7 +387373,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -405644,11 +387543,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -405680,7 +387579,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -405726,7 +387625,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -405841,11 +387740,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -406014,11 +387913,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -406065,11 +387964,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -406128,7 +388027,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -406298,11 +388197,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -406334,7 +388233,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -406380,7 +388279,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -406688,11 +388587,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -406981,7 +388880,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -406998,7 +388897,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -407010,11 +388909,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -407106,7 +389005,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -407123,7 +389022,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -407135,11 +389034,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -407235,11 +389134,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -407247,7 +389144,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -407264,7 +389161,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -407276,11 +389173,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -407499,11 +389396,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -407748,7 +389645,7 @@ "x-omitempty": false }, "labels": { - "description": "labels for this pool, example: master/worker, gpu, windows", + "description": "labels for this pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -407918,11 +389815,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -407954,7 +389851,7 @@ "format": "int32" }, "taints": { - "description": "master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -408000,7 +389897,7 @@ } }, "useControlPlaneAsWorker": { - "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -408132,7 +390029,7 @@ "x-omitempty": false }, "labels": { - "description": "Labels for this machine pool, example: master/worker, gpu, windows", + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", "type": "array", "items": { "type": "string" @@ -408176,7 +390073,7 @@ "format": "int32" }, "taints": { - "description": "Master or worker taints", + "description": "control plane or worker taints", "type": "array", "uniqueItems": true, "items": { @@ -408222,7 +390119,7 @@ } }, "useControlPlaneAsWorker": { - "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools", + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", "type": "boolean", "x-omitempty": false } @@ -408444,11 +390341,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -408494,11 +390391,9 @@ "type": "object", "properties": { "apiVersion": { - "description": "Deprecated. Not used for the resource info.", "type": "string" }, "kind": { - "description": "Deprecated. Cloud type of the machine.", "type": "string" }, "metadata": { @@ -408506,7 +390401,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -408523,7 +390418,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -408535,11 +390430,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -408758,11 +390653,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -408998,11 +390893,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -409294,11 +391189,11 @@ "type": "string" }, "name": { - "description": "Name of the referent.", + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", "type": "string" }, "uid": { - "description": "UID of the referent.", + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", "type": "string" } } @@ -409389,7 +391284,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -409406,7 +391301,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -409418,11 +391313,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -409517,7 +391412,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -409534,7 +391429,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -409546,11 +391441,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -409810,7 +391705,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -409827,7 +391722,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -409839,11 +391734,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -412162,21 +394057,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -412300,21 +394195,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -412440,21 +394335,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -412599,21 +394494,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -412716,21 +394611,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -413001,21 +394896,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -413165,21 +395060,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -413305,21 +395200,21 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" } }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" } }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" } } @@ -413334,7 +395229,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -413351,7 +395246,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -413363,11 +395258,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -413462,7 +395357,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -413479,7 +395374,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -413491,11 +395386,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -414020,7 +395915,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -414037,7 +395932,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -414049,11 +395944,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } @@ -414595,7 +396490,7 @@ "type": "object", "properties": { "annotations": { - "description": "Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.", + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", "type": "object", "additionalProperties": { "type": "string" @@ -414612,7 +396507,7 @@ "format": "date-time" }, "labels": { - "description": "Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag", + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", "type": "object", "additionalProperties": { "type": "string" @@ -414624,11 +396519,11 @@ "format": "date-time" }, "name": { - "description": "Name of the resource.", + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "type": "string" }, "uid": { - "description": "UID is the unique identifier generated for the resource. This is not an input field for any request.", + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "type": "string" } } diff --git a/docs/api-content/api-docs/v1/api.json b/docs/api-content/api-docs/v1/api.json index 79b47ddde2..d8375ff770 100644 --- a/docs/api-content/api-docs/v1/api.json +++ b/docs/api-content/api-docs/v1/api.json @@ -1 +1,82081 @@ -{"consumes":["application/json"],"definitions":{"URLEncodedBase64":{"format":"url-encoded-base64","type":"string"},"V1AwsAccountSts":{"description":"AWS cloud account sts","properties":{"accountId":{"description":"A 12-digit number, such as 123456789012, that uniquely identifies an AWS account","type":"string"},"externalId":{"description":"It can be passed to the AssumeRole API of the STS. It can be used in the condition element in a role's trust policy, allowing the role to be assumed only when a certain value is present in the external ID","type":"string"},"partition":{"$ref":"#/definitions/v1AwsPartition"}},"type":"object"},"V1AwsPropertiesValidateSpec":{"description":"AWS properties validate spec","properties":{"cloudAccountUid":{"type":"string"},"region":{"type":"string"},"sshKeyName":{"type":"string"}},"type":"object"},"V1EksPropertiesValidateSpec":{"description":"Eks properties validate spec","properties":{"cloudAccountUid":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"},"sshKeyName":{"type":"string"},"subnets":{"items":{"type":"string"},"type":"array"},"vpcId":{"type":"string"}},"type":"object"},"V1GcpPropertiesValidateSpec":{"description":"Gcp properties validate spec","properties":{"azs":{"items":{"type":"string"},"type":"array"},"cloudAccountUid":{"type":"string"},"projectId":{"type":"string"},"region":{"type":"string"}},"type":"object"},"V1PasswordsBlockList":{"description":"List of blocklisted passwords","properties":{"spec":{"$ref":"#/definitions/v1PasswordsBlockListEntity"}},"type":"object"},"urlEncodedBase64":{"format":"url-encoded-base64","type":"string"},"v1.AzureAccountEntitySpec":{"properties":{"clientCloud":{"default":"public","description":"Contains configuration for Azure cloud","enum":["azure-china","azure-government","public"],"type":"string"},"clientId":{"type":"string"},"clientSecret":{"type":"string"},"subscriptionId":{"type":"string"},"tenantId":{"type":"string"}},"type":"object"},"v1.CloudWatchConfig":{"description":"Cloud watch config entity","properties":{"credentials":{"$ref":"#/definitions/v1AwsCloudAccount"},"group":{"description":"Name of the group","type":"string"},"region":{"description":"Name of the region","type":"string"},"stream":{"description":"Name of the stream","type":"string"}},"type":"object"},"v1.DataSinkCloudWatchConfig":{"description":"Data sink cloud watch config","properties":{"payload":{"$ref":"#/definitions/v1.DataSinkPayloads"},"spec":{"$ref":"#/definitions/v1.CloudWatchConfig"}},"type":"object"},"v1.DataSinkPayload":{"additionalProperties":{"type":"object"},"description":"Data sink payload entity","properties":{"refUid":{"description":"RefUid of the data sink payload","type":"string"},"timestamp":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1.DataSinkPayloads":{"description":"List of data sink payload entities","items":{"$ref":"#/definitions/v1.DataSinkPayload"},"type":"array","uniqueItems":true},"v1.GcpAccountEntitySpec":{"properties":{"jsonCredentials":{"type":"string"},"jsonCredentialsFileUid":{"type":"string"}},"type":"object"},"v1AADProfile":{"description":"AADProfile - AAD integration is managed by AKS.","properties":{"adminGroupObjectIDs":{"description":"AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.","items":{"type":"string"},"type":"array"},"managed":{"description":"Managed - Whether to enable managed AAD.","type":"boolean","x-omitempty":false}},"required":["managed","adminGroupObjectIDs"],"type":"object"},"v1APIEndpoint":{"description":"APIEndpoint represents a reachable Kubernetes API endpoint.","properties":{"host":{"description":"The hostname on which the API server is serving.","type":"string"},"port":{"description":"The port on which the API server is serving.","format":"int32","type":"integer"}},"required":["host","port"],"type":"object"},"v1APIServerAccessProfile":{"description":"APIServerAccessProfile - access profile for AKS API server.","properties":{"authorizedIPRanges":{"description":"AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.","items":{"default":"","type":"string"},"type":"array"},"enablePrivateCluster":{"description":"EnablePrivateCluster - Whether to create the cluster as a private cluster or not.","type":"boolean"},"enablePrivateClusterPublicFQDN":{"description":"EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.","type":"boolean"},"privateDNSZone":{"description":"PrivateDNSZone - Private dns zone mode for private cluster.","type":"string"}},"type":"object"},"v1AWSVolumeTypes":{"description":"AWS Volume Types","properties":{"volumeTypes":{"items":{"$ref":"#/definitions/v1AwsVolumeType"},"type":"array"}},"type":"object"},"v1AclMeta":{"description":"Resource access control information (Read-only response data)","properties":{"ownerUid":{"description":"User or service uid which created the resource","type":"string"},"projectUid":{"description":"Project's uid if the resource is under a project","type":"string"},"tenantUid":{"description":"Tenant's uid","type":"string"}},"type":"object"},"v1ActiveTenantResources":{"description":"Active resources of tenant","properties":{"activeResources":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"type":"object"},"v1Address":{"description":"Tenant Address","properties":{"addressLine1":{"type":"string"},"addressLine2":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"pincode":{"type":"string"},"state":{"type":"string"}},"type":"object"},"v1Alert":{"properties":{"channels":{"items":{"$ref":"#/definitions/v1Channel"},"type":"array"},"component":{"type":"string"}},"type":"object"},"v1AlertEntity":{"properties":{"channels":{"items":{"$ref":"#/definitions/v1Channel"},"type":"array"}},"type":"object"},"v1AlertNotificationStatus":{"properties":{"isSucceeded":{"type":"boolean","x-omitempty":false},"message":{"type":"string"},"time":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1Alerts":{"items":{"$ref":"#/definitions/v1Alert"},"type":"array"},"v1ApiEndpoint":{"description":"APIEndpoint represents a reachable Kubernetes API endpoint.","properties":{"host":{"description":"The hostname on which the API server is serving.","type":"string"},"port":{"description":"The port on which the API server is serving.","format":"int32","type":"integer"}},"required":["host","port"],"type":"object"},"v1ApiKey":{"description":"API key information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ApiKeySpec"},"status":{"$ref":"#/definitions/v1ApiKeyStatus"}},"type":"object"},"v1ApiKeyActiveState":{"properties":{"isActive":{"description":"API key active state","type":"boolean"}}},"v1ApiKeyCreateResponse":{"description":"Response of create API key","properties":{"apiKey":{"description":"Api key is used for authentication","type":"string"},"uid":{"description":"User uid","type":"string"}},"type":"object"},"v1ApiKeyEntity":{"description":"API key request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ApiKeySpecEntity"}},"type":"object"},"v1ApiKeySpec":{"description":"API key specification","properties":{"expiry":{"$ref":"#/definitions/v1Time","description":"API key expiry date"},"key":{"description":"Deprecated: API key field will be no longer available","type":"string"},"user":{"$ref":"#/definitions/v1ApiKeyUser","description":"User to whom the API key is created"}},"type":"object"},"v1ApiKeySpecEntity":{"description":"API key specification","properties":{"expiry":{"$ref":"#/definitions/v1Time","description":"API key expiry date"},"userUid":{"description":"User to whom the API key has to be created","type":"string"}},"type":"object"},"v1ApiKeySpecUpdate":{"description":"API key update request specification","properties":{"expiry":{"$ref":"#/definitions/v1Time","description":"API key expiry date"}}},"v1ApiKeyStatus":{"description":"API key status","properties":{"isActive":{"description":"API key active state","type":"boolean"}},"type":"object"},"v1ApiKeyUpdate":{"description":"API key update request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ApiKeySpecUpdate"}},"type":"object"},"v1ApiKeyUser":{"description":"API key user information","properties":{"firstName":{"description":"First name of user","type":"string"},"lastName":{"description":"Last name of user","type":"string"},"uid":{"description":"User uid","type":"string"}},"type":"object"},"v1ApiKeys":{"properties":{"items":{"description":"List of API keys","items":{"$ref":"#/definitions/v1ApiKey"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1ApiProfiler":{"properties":{"api":{"type":"string"},"endTime":{"format":"date-time","type":"string"},"ops":{"items":{"type":"string"},"type":"array"},"requestUid":{"type":"string"},"startTime":{"format":"date-time","type":"string"},"timeTaken":{"format":"int64","type":"integer"}},"type":"object"},"v1AppDeployment":{"description":"Application deployment response","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1AppDeploymentSpec"},"status":{"$ref":"#/definitions/v1AppDeploymentStatus"}},"type":"object"},"v1AppDeploymentClusterGroupConfigEntity":{"description":"Application deployment cluster group config","properties":{"targetSpec":{"$ref":"#/definitions/v1AppDeploymentClusterGroupTargetSpec"}},"type":"object"},"v1AppDeploymentClusterGroupEntity":{"description":"Application deployment cluster group request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1AppDeploymentClusterGroupSpec"}},"type":"object"},"v1AppDeploymentClusterGroupSpec":{"description":"Application deployment cluster group spec","properties":{"config":{"$ref":"#/definitions/v1AppDeploymentClusterGroupConfigEntity"},"profile":{"$ref":"#/definitions/v1AppDeploymentProfileEntity"}},"type":"object"},"v1AppDeploymentClusterGroupTargetSpec":{"description":"Application deployment cluster group target spec","properties":{"clusterGroupUid":{"description":"Application deployment cluster group uid","type":"string"},"clusterLimits":{"$ref":"#/definitions/v1AppDeploymentTargetClusterLimits"},"clusterName":{"description":"Application deployment virtual cluster name","type":"string"}},"required":["clusterName","clusterGroupUid"],"type":"object"},"v1AppDeploymentClusterHealth":{"description":"Application deployment cluster health status","properties":{"state":{"type":"string"}}},"v1AppDeploymentClusterRef":{"description":"Application deployment cluster reference","properties":{"deploymentClusterType":{"description":"Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]","enum":["virtual","host"],"type":"string"},"name":{"description":"Application deployment cluster name","type":"string"},"uid":{"description":"Application deployment cluster uid","type":"string"}},"type":"object"},"v1AppDeploymentClusterRefSummary":{"description":"Application deployment cluster reference","properties":{"deploymentClusterType":{"description":"Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]","enum":["virtual","host"],"type":"string"},"name":{"description":"Application deployment source cluster name","type":"string"},"uid":{"description":"Application deployment source cluster uid","type":"string"}}},"v1AppDeploymentClusterStatus":{"description":"Application deployment cluster status","properties":{"health":{"$ref":"#/definitions/v1AppDeploymentClusterHealth"},"state":{"type":"string"}}},"v1AppDeploymentConfig":{"description":"Application deployment config response","properties":{"target":{"$ref":"#/definitions/v1AppDeploymentTargetConfig"}},"type":"object"},"v1AppDeploymentConfigSummary":{"description":"Application deployment config summary","properties":{"target":{"$ref":"#/definitions/v1AppDeploymentTargetConfigSummary"}}},"v1AppDeploymentFilterSpec":{"description":"Application deployment filter spec","properties":{"appDeploymentName":{"$ref":"#/definitions/v1FilterString"},"clusterUids":{"$ref":"#/definitions/v1FilterArray"},"tags":{"$ref":"#/definitions/v1FilterArray"}}},"v1AppDeploymentNotifications":{"description":"Application deployment notifications","properties":{"isAvailable":{"type":"boolean","x-omitempty":false}}},"v1AppDeploymentProfile":{"description":"Application deployment profile","properties":{"metadata":{"$ref":"#/definitions/v1AppDeploymentProfileMeta"},"template":{"$ref":"#/definitions/v1AppProfileTemplate"}},"type":"object"},"v1AppDeploymentProfileEntity":{"description":"Application deployment profile request payload","properties":{"appProfileUid":{"description":"Application deployment profile uid","type":"string"}},"required":["appProfileUid"],"type":"object"},"v1AppDeploymentProfileMeta":{"description":"Application deployment profile metadata","properties":{"name":{"description":"Application deployment profile name","type":"string"},"uid":{"description":"Application deployment profile uid","type":"string"},"version":{"description":"Application deployment profile version","type":"string"}},"type":"object"},"v1AppDeploymentProfileMetadataSummary":{"description":"Application deployment profile metadata summary","properties":{"name":{"type":"string"},"uid":{"type":"string"},"version":{"type":"string"}}},"v1AppDeploymentProfileSpec":{"description":"Application deployment profile spec","properties":{"metadata":{"$ref":"#/definitions/v1AppDeploymentProfileMeta"},"template":{"$ref":"#/definitions/v1AppProfileTemplateSpec"}},"type":"object"},"v1AppDeploymentProfileSummary":{"description":"Application deployment profile summary","properties":{"metadata":{"$ref":"#/definitions/v1AppDeploymentProfileMetadataSummary"},"template":{"$ref":"#/definitions/v1AppProfileTemplateSummary"}}},"v1AppDeploymentProfileVersion":{"description":"Application deployment profile version","properties":{"uid":{"description":"Application deployment profile uid","type":"string"},"version":{"description":"Application deployment profile version","type":"string"}},"type":"object"},"v1AppDeploymentProfileVersions":{"description":"Application deployment profile versions","properties":{"availableVersions":{"description":"Application deployment profile available versions","items":{"$ref":"#/definitions/v1AppDeploymentProfileVersion"},"type":"array"},"latestVersions":{"description":"Application deployment profile latest versions","items":{"$ref":"#/definitions/v1AppDeploymentProfileVersion"},"type":"array"},"metadata":{"$ref":"#/definitions/v1AppDeploymentProfileMeta"}},"type":"object"},"v1AppDeploymentSortFields":{"enum":["appDeploymentName","creationTimestamp","lastModifiedTimestamp"],"type":"string","x-nullable":true},"v1AppDeploymentSortSpec":{"properties":{"field":{"$ref":"#/definitions/v1AppDeploymentSortFields"},"order":{"$ref":"#/definitions/v1SortOrder"}}},"v1AppDeploymentSpec":{"description":"Application deployment spec","properties":{"config":{"$ref":"#/definitions/v1AppDeploymentConfig"},"profile":{"$ref":"#/definitions/v1AppDeploymentProfile"}},"type":"object"},"v1AppDeploymentStatus":{"description":"Application deployment status","properties":{"appTiers":{"description":"Application deployment tiers","items":{"$ref":"#/definitions/v1ClusterPackStatus"},"type":"array"},"lifecycleStatus":{"$ref":"#/definitions/v1LifecycleStatus"},"state":{"description":"Application deployment state [ \"Pending\", \"Deploying\", \"Deployed\", \"Updating\" ]","type":"string"}},"type":"object"},"v1AppDeploymentStatusSummary":{"description":"Application deployment status summary","properties":{"cluster":{"$ref":"#/definitions/v1AppDeploymentClusterStatus"},"notifications":{"$ref":"#/definitions/v1AppDeploymentNotifications"},"state":{"type":"string"}},"type":"object"},"v1AppDeploymentSummary":{"description":"Application deployment summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"description":"Application deployment spec summary","properties":{"config":{"$ref":"#/definitions/v1AppDeploymentConfigSummary"},"profile":{"$ref":"#/definitions/v1AppDeploymentProfileSummary"}},"type":"object"},"status":{"$ref":"#/definitions/v1AppDeploymentStatusSummary"}},"type":"object"},"v1AppDeploymentTargetClusterLimits":{"description":"Application deployment target cluster limits","properties":{"cpu":{"description":"CPU cores","format":"int32","type":"integer"},"memoryMiB":{"description":"Memory in MiB","format":"int32","type":"integer"},"storageGiB":{"description":"Storage in GiB","format":"int32","type":"integer"}}},"v1AppDeploymentTargetConfig":{"description":"Application deployment target config response","properties":{"clusterRef":{"$ref":"#/definitions/v1AppDeploymentClusterRef"},"envRef":{"$ref":"#/definitions/v1AppDeploymentTargetEnvironmentRef"}},"type":"object"},"v1AppDeploymentTargetConfigSummary":{"description":"Application deployment target config summary","properties":{"clusterRef":{"$ref":"#/definitions/v1AppDeploymentClusterRefSummary"}}},"v1AppDeploymentTargetEnvironmentRef":{"description":"Application deployment target environment reference","properties":{"name":{"description":"Application deployment target resource name","type":"string"},"type":{"description":"Application deployment target resource type [ \"nestedCluster\", \"clusterGroup\" ]","type":"string"},"uid":{"description":"Application deployment target resource uid","type":"string"}},"type":"object"},"v1AppDeploymentVirtualClusterConfigEntity":{"description":"Application deployment virtual cluster config","properties":{"targetSpec":{"$ref":"#/definitions/v1AppDeploymentVirtualClusterTargetSpec"}},"type":"object"},"v1AppDeploymentVirtualClusterEntity":{"description":"Application deployment virtual cluster request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1AppDeploymentVirtualClusterSpec"}},"type":"object"},"v1AppDeploymentVirtualClusterSpec":{"description":"Application deployment virtual cluster spec","properties":{"config":{"$ref":"#/definitions/v1AppDeploymentVirtualClusterConfigEntity"},"profile":{"$ref":"#/definitions/v1AppDeploymentProfileEntity"}},"type":"object"},"v1AppDeploymentVirtualClusterTargetSpec":{"description":"Application deployment virtual cluster target spec","properties":{"clusterUid":{"description":"Application deployment virtual cluster uid","type":"string"}},"required":["clusterUid"],"type":"object"},"v1AppDeploymentsFilterSpec":{"description":"Application deployment filter summary spec","properties":{"filter":{"$ref":"#/definitions/v1AppDeploymentFilterSpec"},"sort":{"items":{"$ref":"#/definitions/v1AppDeploymentSortSpec"},"type":"array","uniqueItems":true}}},"v1AppDeploymentsSummary":{"properties":{"appDeployments":{"items":{"$ref":"#/definitions/v1AppDeploymentSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"type":"object"},"v1AppFeatureFreemium":{"description":"Freemium information","properties":{"activeClustersLimit":{"type":"integer","x-omitempty":false},"isFreemium":{"type":"boolean","x-omitempty":false},"overageUsageLimit":{"format":"float64","type":"number","x-omitempty":false},"totalUsageLimit":{"format":"float64","type":"number","x-omitempty":false}}},"v1AppFeatures":{"description":"System app features","properties":{"developerCredit":{"$ref":"#/definitions/v1DeveloperCredit"},"freeCloudCredit":{"type":"boolean","x-omitempty":false},"freemium":{"$ref":"#/definitions/v1AppFeatureFreemium"}}},"v1AppProfile":{"description":"Application profile response","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"parentUid":{"description":"Application profile parent profile uid","type":"string"},"template":{"$ref":"#/definitions/v1AppProfileTemplate"},"version":{"description":"Application profile version","type":"string"},"versions":{"description":"Application profile versions list","items":{"$ref":"#/definitions/v1AppProfileVersion"},"type":"array"}},"type":"object"},"status":{"description":"Application profile status","properties":{"inUseApps":{"description":"Application profile apps array","items":{"$ref":"#/definitions/v1ObjectResReference"},"type":"array"}},"type":"object"}},"type":"object"},"v1AppProfileCloneEntity":{"description":"Application profile clone request payload","properties":{"metadata":{"$ref":"#/definitions/v1AppProfileCloneMetaInputEntity"}},"type":"object"},"v1AppProfileCloneMetaInputEntity":{"description":"Application profile clone metadata","properties":{"name":{"description":"Application profile name","type":"string"},"target":{"$ref":"#/definitions/v1AppProfileCloneTarget"},"version":{"description":"Application profile version","type":"string"}},"required":["name"],"type":"object"},"v1AppProfileCloneTarget":{"description":"Application profile clone target","properties":{"projectUid":{"description":"Application profile clone target project uid","type":"string"}},"type":"object"},"v1AppProfileEntity":{"description":"Application profile request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"description":"Application profile spec","properties":{"template":{"$ref":"#/definitions/v1AppProfileTemplateEntity"},"version":{"description":"Application profile version","type":"string"}},"type":"object"}},"type":"object"},"v1AppProfileFilterSpec":{"description":"Application profile filter spec","properties":{"profileName":{"$ref":"#/definitions/v1FilterString"},"tags":{"$ref":"#/definitions/v1FilterArray"},"version":{"$ref":"#/definitions/v1FilterVersionString"}}},"v1AppProfileMetaEntity":{"description":"Application profile metadata request payload","properties":{"metadata":{"$ref":"#/definitions/v1AppProfileMetaUpdateEntity"},"version":{"description":"Application profile version","type":"string"}},"required":["metadata"],"type":"object"},"v1AppProfileMetaUpdateEntity":{"description":"Application profile metadata update request payload","properties":{"annotations":{"additionalProperties":{"type":"string"},"description":"Application profile annotations","type":"object"},"labels":{"additionalProperties":{"type":"string"},"description":"Application profile labels","type":"object"}},"type":"object"},"v1AppProfileMetadata":{"description":"Application profile metadata summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectEntity"},"spec":{"properties":{"version":{"type":"string"}}}},"type":"object"},"v1AppProfileSortFields":{"enum":["profileName","creationTimestamp","lastModifiedTimestamp"],"type":"string","x-nullable":true},"v1AppProfileSortSpec":{"properties":{"field":{"$ref":"#/definitions/v1AppProfileSortFields"},"order":{"$ref":"#/definitions/v1SortOrder"}}},"v1AppProfileSummary":{"description":"Application profile summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"description":"Application profile spec summary","properties":{"parentUid":{"type":"string"},"template":{"$ref":"#/definitions/v1AppProfileTemplateSummary"},"version":{"type":"string"},"versions":{"description":"Application profile's list of all the versions","items":{"$ref":"#/definitions/v1AppProfileVersion"},"type":"array"}},"type":"object"}},"type":"object"},"v1AppProfileTemplate":{"description":"Application profile template information","properties":{"appTiers":{"description":"Application profile tiers","items":{"$ref":"#/definitions/v1AppTierRef"},"type":"array","uniqueItems":true},"registryRefs":{"description":"Application profile registries reference","items":{"$ref":"#/definitions/v1ObjectReference"},"type":"array"}},"type":"object"},"v1AppProfileTemplateEntity":{"description":"Application profile template spec","properties":{"appTiers":{"description":"Application profile tiers","items":{"$ref":"#/definitions/v1AppTierEntity"},"type":"array","uniqueItems":true}},"type":"object"},"v1AppProfileTemplateSpec":{"description":"Application profile template specs","properties":{"appTiers":{"description":"Application profile tiers","items":{"$ref":"#/definitions/v1AppTier"},"type":"array","uniqueItems":true},"registryRefs":{"description":"Application profile registries reference","items":{"$ref":"#/definitions/v1ObjectReference"},"type":"array"}},"type":"object"},"v1AppProfileTemplateSummary":{"description":"Application profile template summary","properties":{"appTiers":{"items":{"$ref":"#/definitions/v1AppTierSummary"},"type":"array"}},"type":"object"},"v1AppProfileTiers":{"description":"Application profile tiers information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1AppProfileTiersSpec"}},"type":"object"},"v1AppProfileTiersSpec":{"description":"Application profile tiers information","properties":{"appTiers":{"description":"Application profile tiers","items":{"$ref":"#/definitions/v1AppTier"},"type":"array","uniqueItems":true}},"type":"object"},"v1AppProfileVersion":{"description":"Application profile version","properties":{"uid":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1AppProfilesFilterSpec":{"description":"Application profile filter summary spec","properties":{"filter":{"$ref":"#/definitions/v1AppProfileFilterSpec"},"sort":{"items":{"$ref":"#/definitions/v1AppProfileSortSpec"},"type":"array","uniqueItems":true}}},"v1AppProfilesMetadata":{"properties":{"appProfiles":{"items":{"$ref":"#/definitions/v1AppProfileMetadata"},"type":"array","uniqueItems":true}},"type":"object"},"v1AppProfilesSummary":{"properties":{"appProfiles":{"items":{"$ref":"#/definitions/v1AppProfileSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"type":"object"},"v1AppTier":{"properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1AppTierSpec"}}},"v1AppTierEntity":{"description":"Application tier request payload","properties":{"containerRegistryUid":{"description":"Application tier container registry uid","type":"string"},"installOrder":{"description":"Application tier installation order","format":"int32","type":"integer"},"manifests":{"description":"Application tier manifests","items":{"$ref":"#/definitions/v1ManifestInputEntity"},"type":"array"},"name":{"description":"Application tier name","type":"string"},"properties":{"description":"Application tier properties","items":{"$ref":"#/definitions/v1AppTierPropertyEntity"},"type":"array"},"registryUid":{"description":"Application tier registry uid","type":"string"},"sourceAppTierUid":{"description":"Application tier source pack uid","type":"string"},"type":{"$ref":"#/definitions/v1AppTierType"},"values":{"description":"Application tier configuration values in yaml format","type":"string"},"version":{"description":"Application tier version","type":"string"}},"required":["name"],"type":"object"},"v1AppTierManifests":{"description":"Application tier manifests data","properties":{"manifests":{"description":"Application tier manifests array","items":{"$ref":"#/definitions/v1Manifest"},"type":"array"}}},"v1AppTierPatchEntity":{"description":"Application tier patch request payload","properties":{"appTier":{"$ref":"#/definitions/v1AppTierEntity"},"replaceWithAppTier":{"description":"Application tier UID to be replaced with new tier","type":"string"}}},"v1AppTierProperty":{"description":"Application tier property object","properties":{"format":{"description":"Application tier property format","type":"string"},"name":{"description":"Application tier property name","type":"string"},"type":{"description":"Application tier property data type","type":"string"},"value":{"description":"Application tier property value","type":"string"}}},"v1AppTierPropertyEntity":{"description":"Application tier property object","properties":{"name":{"description":"Application tier property name","type":"string"},"value":{"description":"Application tier property value","type":"string"}}},"v1AppTierRef":{"description":"Application tier reference","properties":{"name":{"description":"Application tier name","type":"string"},"type":{"$ref":"#/definitions/v1AppTierType"},"uid":{"description":"Application tier uid to uniquely identify the tier","type":"string"},"version":{"description":"Application tier version","type":"string"}},"type":"object"},"v1AppTierResolvedValues":{"description":"Application tier resolved macro values","properties":{"resolved":{"additionalProperties":{"type":"string"},"description":"Application tier resolved macro values map","type":"object"}}},"v1AppTierSourceSummary":{"description":"Application profile's tier source information","properties":{"addonSubType":{"type":"string"},"addonType":{"type":"string"},"logoUrl":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"uid":{"type":"string"}}},"v1AppTierSpec":{"description":"Application tier specs","properties":{"containerRegistryUid":{"description":"Application tier container registry uid","type":"string"},"installOrder":{"description":"Application tier installation order","format":"int32","type":"integer"},"manifests":{"description":"Application tier attached manifest content in yaml format","items":{"$ref":"#/definitions/v1ObjectReference"},"type":"array"},"properties":{"description":"Application tier properties","items":{"$ref":"#/definitions/v1AppTierProperty"},"type":"array"},"registryUid":{"description":"Registry uid","type":"string"},"sourceAppTierUid":{"description":"Application tier source pack uid","type":"string"},"type":{"$ref":"#/definitions/v1AppTierType","description":"Application tier type"},"values":{"description":"Application tier configuration values in yaml format","type":"string"},"version":{"description":"Application tier version","type":"string"}},"type":"object"},"v1AppTierSummary":{"description":"Application profile's tier summary","properties":{"name":{"type":"string"},"source":{"$ref":"#/definitions/v1AppTierSourceSummary"},"type":{"type":"string"},"uid":{"type":"string"},"version":{"type":"string"}}},"v1AppTierType":{"default":"manifest","enum":["manifest","helm","operator-instance","container"],"type":"string"},"v1AppTierUpdateEntity":{"description":"Application tier update request payload","properties":{"containerRegistryUid":{"description":"Application tier container registry uid","type":"string"},"installOrder":{"description":"Application tier installation order","format":"int32","type":"integer"},"manifests":{"description":"Application tier manifests","items":{"$ref":"#/definitions/v1ManifestRefUpdateEntity"},"type":"array"},"name":{"description":"Application tier name","type":"string"},"properties":{"description":"Application tier properties","items":{"$ref":"#/definitions/v1AppTierPropertyEntity"},"type":"array"},"values":{"description":"Application tier configuration values in yaml format","type":"string"},"version":{"description":"Application tier version","type":"string"}},"type":"object"},"v1AppVersion":{"description":"spectro application management app version information","properties":{"intermediateVersions":{"items":{"$ref":"#/definitions/v1ReleaseVersion"},"type":"array","uniqueItems":true},"latestVerson":{"$ref":"#/definitions/v1ReleaseVersion"}}},"v1ArchType":{"default":"amd64","enum":["amd64","arm64"],"type":"string"},"v1AsyncOperationIdEntity":{"description":"Async operation id","properties":{"operationId":{"description":"OperationId for a particular sync operation id","type":"string"}},"type":"object"},"v1AsyncResult":{"properties":{"data":{"type":"object"},"error":{"type":"string"},"isSuccess":{"type":"boolean"}},"type":"object"},"v1AsyncStatus":{"properties":{"endTime":{"$ref":"#/definitions/v1Time"},"result":{"$ref":"#/definitions/v1AsyncResult","type":"object"},"stage":{"type":"string"},"startTime":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1Audit":{"description":"Audit response payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1AuditSpec"}},"type":"object"},"v1AuditActor":{"description":"Audit actor object","properties":{"actorType":{"enum":["user","system","service"],"type":"string"},"project":{"$ref":"#/definitions/v1ProjectMeta"},"serviceName":{"type":"string"},"user":{"$ref":"#/definitions/v1UserMeta"}}},"v1AuditMsgUpdate":{"description":"Audit user message update request payload","properties":{"userMsg":{"description":"User message","maxLength":255,"minLength":3,"type":"string"}},"type":"object"},"v1AuditResourceReference":{"description":"Audit resource reference object","properties":{"kind":{"description":"Audit resource type","type":"string"},"label":{"description":"Audit resource label","type":"string"},"name":{"description":"Audit resource name","type":"string"},"uid":{"description":"Audit resource uid","type":"string"}},"required":["uid"],"type":"object"},"v1AuditSpec":{"description":"Audit specifications","properties":{"actionMsg":{"description":"Audit action message","type":"string"},"actionType":{"enum":["create","update","delete","publish","deploy"],"type":"string"},"actor":{"$ref":"#/definitions/v1AuditActor"},"contentMsg":{"description":"Audit content message","type":"string"},"resource":{"$ref":"#/definitions/v1AuditResourceReference"},"userMsg":{"description":"Audit user message","type":"string"}}},"v1AuditSysMsg":{"description":"Audit system message","properties":{"actionMsg":{"description":"Audit resource action message","type":"string"},"contentMsg":{"description":"Audit resource content message","type":"string"}},"type":"object"},"v1Audits":{"properties":{"items":{"description":"List of audit message","items":{"$ref":"#/definitions/v1Audit"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1AuthAllyTokenRequest":{"properties":{"edgeAuthToken":{"type":"string"},"edgeHostUid":{"type":"string"},"spectroClusterUid":{"type":"string"}},"type":"object"},"v1AuthCertsGet":{"description":"Auth certs get","properties":{"caCert":{"type":"string","x-omitempty":false},"insecureSkipVerify":{"type":"boolean","x-omitempty":false}}},"v1AuthEdgeJetKeyRequest":{"properties":{"edgeAuthToken":{"type":"string"},"edgeHostUid":{"type":"string"},"spectroClusterUid":{"type":"string"}},"required":["edgeAuthToken","edgeHostUid"],"type":"object"},"v1AuthJetKeyRequest":{"properties":{"allyAuthToken":{"type":"string"},"hostClusterUid":{"type":"string"}},"required":["allyAuthToken","hostClusterUid"],"type":"object"},"v1AuthLogin":{"description":"Describes the credential details required for authentication","properties":{"emailId":{"description":"Describes the email id required for the user to authenticate","type":"string"},"org":{"description":"Describes the user's organization name to login","type":"string"},"password":{"description":"Describes the password required for the user to authenticate","format":"password","type":"string"}},"type":"object"},"v1AuthLoginEntity":{"description":"Auth login entity","properties":{"authType":{"enum":["password","sso"],"type":"string"},"orgName":{"type":"string"},"redirectUrl":{"type":"string","x-omitempty":false}},"type":"object"},"v1AuthLogins":{"description":"Deprecated. Applicable auth logins with multiple orgs","properties":{"appEnv":{"type":"string"},"authType":{"description":"Deprecated.","enum":["password","sso"],"type":"string"},"orgName":{"description":"Deprecated.","type":"string"},"orgs":{"items":{"$ref":"#/definitions/v1AuthLoginEntity"},"type":"array"},"redirectUrl":{"description":"Deprecated.","type":"string","x-omitempty":false}},"type":"object"},"v1AuthMfaLoginFinishRequest":{"properties":{"_type":{"type":"string"},"authenticatorAttachment":{"type":"string"},"clientExtensionResults":{"additionalProperties":{"type":"object"},"type":"object"},"deviceName":{"type":"string"},"id":{"type":"string"},"rawId":{"$ref":"#/definitions/urlEncodedBase64"},"response":{"properties":{"authenticatorData":{"$ref":"#/definitions/urlEncodedBase64"},"clientDataJSON":{"$ref":"#/definitions/urlEncodedBase64"},"signature":{"$ref":"#/definitions/urlEncodedBase64"},"userHandle":{"$ref":"#/definitions/urlEncodedBase64"}},"type":"object"}},"type":"object"},"v1AuthServiceTokenRequest":{"properties":{"authKey":{"type":"string"},"edgeHostUid":{"type":"string"},"hostClusterUid":{"type":"string"},"isSystem":{"type":"boolean"},"jetUid":{"type":"string"},"overlordUid":{"type":"string"},"serviceVersion":{"type":"string"},"spectroClusterUid":{"type":"string"},"tenantUid":{"type":"string"}},"type":"object"},"v1AuthServiceTokenResponse":{"properties":{"token":{"type":"string"}},"type":"object"},"v1AuthShellyLoginRequest":{"properties":{"secret":{"type":"string"}},"type":"object"},"v1AuthToken":{"properties":{"token":{"type":"string"}},"type":"object"},"v1AuthTokenRevoke":{"properties":{"tokens":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1AuthTokenSettings":{"description":"System auth token settings","properties":{"expiryTimeMinutes":{"description":"Auth token expiry time in minutes","format":"int32","maximum":1440,"minimum":15,"type":"integer","x-omitempty":false}}},"v1AwsAMI":{"properties":{"id":{"type":"string"},"os":{"type":"string"},"region":{"type":"string"},"state":{"type":"string"}},"type":"object"},"v1AwsAccount":{"description":"Aws cloud account information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the account.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1AwsCloudAccount"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1AwsAccounts":{"description":"List of AWS accounts","properties":{"items":{"items":{"$ref":"#/definitions/v1AwsAccount"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1AwsAmiReference":{"description":"AMI is the reference to the AMI from which to create the machine instance","properties":{"eksOptimizedLookupType":{"description":"EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store","enum":["AmazonLinux","AmazonLinuxGPU"],"type":"string"},"id":{"description":"ID of resource","type":"string"}},"type":"object"},"v1AwsAvailabilityZone":{"description":"Distinct locations within an AWS Region that are engineered to be isolated from failures in other Zones","properties":{"name":{"description":"AWS availability zone name","type":"string"},"state":{"description":"AWS availability zone state","type":"string"},"zoneId":{"description":"AWS availability zone id","type":"string"}},"type":"object"},"v1AwsAvailabilityZones":{"properties":{"zones":{"description":"List of AWS Zones","items":{"$ref":"#/definitions/v1AwsAvailabilityZone"},"type":"array"}},"required":["zones"],"type":"object"},"v1AwsCloudAccount":{"description":"AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects","properties":{"accessKey":{"description":"AWS account access key","type":"string"},"credentialType":{"$ref":"#/definitions/v1AwsCloudAccountCredentialType"},"partition":{"default":"aws","description":"AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values","enum":["aws","aws-us-gov"],"type":"string"},"policyARNs":{"description":"List of policy ARNs required in case of credentialType sts.","items":{"type":"string"},"type":"array"},"secretKey":{"description":"AWS account secret key","type":"string"},"sts":{"$ref":"#/definitions/v1AwsStsCredentials","description":"AWS STS credentials in case of credentialType sts, will be empty in case of credential type secret"}},"type":"object"},"v1AwsCloudAccountCredentialType":{"default":"secret","description":"Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.","enum":["secret","sts"],"type":"string"},"v1AwsCloudClusterConfigEntity":{"description":"AWS cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1AwsClusterConfig"}},"type":"object"},"v1AwsCloudConfig":{"description":"AwsCloudConfig is the Schema for the awscloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1AwsCloudConfigSpec"},"status":{"$ref":"#/definitions/v1AwsCloudConfigStatus"}},"type":"object"},"v1AwsCloudConfigSpec":{"description":"AwsCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"cloudAccountRef should point to the secret which contains AwsCloudAccount"},"clusterConfig":{"$ref":"#/definitions/v1AwsClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1AwsMachinePoolConfig"},"type":"array"}},"type":"object"},"v1AwsCloudConfigStatus":{"description":"AwsCloudConfigStatus defines the observed state of AwsCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool","properties":{"ansibleRoleDigest":{"description":"For mold controller to identify if is there any changes in Pack","type":"string"},"conditions":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"images":{"description":"Images array items should be 1-to-1 mapping to Spec.MachinePoolConfig","items":{"$ref":"#/definitions/v1AwsAMI"},"type":"array"},"isAddonLayer":{"description":"addon layers present in spc","type":"boolean"},"roleDigest":{"additionalProperties":{"type":"string"},"description":"this map will be for ansible roles present in eack pack","type":"object"},"sourceImageId":{"description":"sourceImageId, it can be from packref's annotations or from pack.json","type":"string"},"useCapiImage":{"description":"PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add","type":"boolean"}},"type":"object"},"v1AwsCloudCostSpec":{"description":"Aws cloud account usage cost payload spec","properties":{"accountId":{"description":"AccountId of AWS cloud cost","type":"string"},"credentials":{"$ref":"#/definitions/v1AwsCloudAccount"},"filter":{"$ref":"#/definitions/v1AwsCloudCostSpecFilter"}},"required":["credentials"],"type":"object"},"v1AwsCloudCostSpecFilter":{"description":"Aws cloud account usage cost payload filter. startTime and endTime should be within 12 months range from now.","properties":{"endTime":{"$ref":"#/definitions/v1Time"},"iamUserId":{"description":"IAM UserId of AWS account","type":"string"},"startTime":{"$ref":"#/definitions/v1Time"}},"required":["startTime"],"type":"object"},"v1AwsCloudCostSummary":{"description":"AWS cloud account usage cost summary response data","properties":{"cost":{"$ref":"#/definitions/v1AwsCloudCostSummaryCloudCost"}},"type":"object"},"v1AwsCloudCostSummaryCloudCost":{"description":"AWS cloud account usage cost summary of monthlyCosts and totalCost","properties":{"monthlyCosts":{"description":"Monthly cost of AWS cost","items":{"$ref":"#/definitions/v1AwsCloudCostSummaryMonthlyCost"},"type":"array"},"total":{"description":"Total cost of AWS cost","format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1AwsCloudCostSummaryMonthlyCost":{"properties":{"amount":{"description":"Amount for aws cloud cost","format":"float64","type":"number","x-omitempty":false},"timestamp":{"description":"Time duration for aws cloud cost","type":"integer"}},"type":"object"},"v1AwsClusterConfig":{"description":"Cluster level configuration for aws cloud and applicable for all the machine pools","properties":{"bastionDisabled":{"description":"Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947","type":"boolean"},"controlPlaneLoadBalancer":{"description":"ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"","type":"string"},"region":{"type":"string"},"sshKeyName":{"type":"string"},"vpcId":{"description":"VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created","type":"string"}},"required":["region"],"type":"object"},"v1AwsCreditAccount":{"properties":{"creditLimitInDollars":{"format":"float64","type":"number"},"loginCredentials":{"$ref":"#/definitions/v1AwsLoginCredentials"},"userCloudAccount":{"$ref":"#/definitions/v1AwsUserCloudAccount"}},"type":"object"},"v1AwsCreditAccountEntity":{"properties":{"creditLimitInDollars":{"format":"float64","type":"number","x-omitempty":false},"creditUsedInDollars":{"format":"float64","type":"number","x-omitempty":false},"loginCredentials":{"$ref":"#/definitions/v1AwsLoginCredentials"},"userCloudAccount":{"$ref":"#/definitions/v1AwsUserCloudAccount"}},"type":"object"},"v1AwsFindImageRequest":{"description":"AWS image name and credentials","properties":{"amiName":{"description":"AWS image ami name","type":"string"},"awsAccount":{"$ref":"#/definitions/v1AwsCloudAccount"}},"type":"object"},"v1AwsIamPolicy":{"description":"Aws policy","properties":{"arn":{"type":"string"},"policyId":{"type":"string"},"policyName":{"type":"string"}},"type":"object"},"v1AwsImage":{"description":"AWS image name and ami","properties":{"id":{"description":"AWS image id","type":"string"},"name":{"description":"AWS image name","type":"string"},"owner":{"description":"AWS image owner id","type":"string"}},"type":"object"},"v1AwsInstanceTypes":{"description":"List of AWS instance types","properties":{"instanceTypes":{"items":{"$ref":"#/definitions/v1InstanceType"},"type":"array"}},"type":"object"},"v1AwsKeyPairs":{"description":"List of AWS keypairs","properties":{"keyNames":{"description":"Array of Aws Keypair names","items":{"type":"string"},"type":"array"}},"type":"object"},"v1AwsKmsKey":{"description":"AWS KMS Key - gives you centralized control over the cryptographic keys used to protect your data.","properties":{"keyAlias":{"description":"AWS KMS alias","type":"string"},"keyArn":{"description":"AWS KMS arn","type":"string"},"keyId":{"description":"AWS KMS keyid","type":"string"}},"required":["keyId","keyArn"],"type":"object"},"v1AwsKmsKeyEntity":{"description":"List of AWS Keys","properties":{"awsAccountId":{"description":"The twelve-digit account ID of the Amazon Web Services account that owns the KMS key","type":"string"},"enabled":{"description":"Specifies whether the KMS key is enabled.","type":"boolean"},"keyId":{"description":"The globally unique identifier for the KMS key","type":"string"}},"type":"object"},"v1AwsKmsKeys":{"description":"List of AWS Keys","properties":{"kmsKeys":{"items":{"$ref":"#/definitions/v1AwsKmsKey"},"type":"array"}},"required":["kmsKeys"],"type":"object"},"v1AwsLaunchTemplate":{"description":"AWSLaunchTemplate specifies the launch template to use to create the managed node group","properties":{"additionalSecurityGroups":{"description":"AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances","items":{"$ref":"#/definitions/v1AwsResourceReference"},"type":"array","uniqueItems":true},"ami":{"$ref":"#/definitions/v1AwsAmiReference"},"imageLookupBaseOS":{"description":"ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set","type":"string"},"imageLookupFormat":{"description":"ImageLookupFormat is the AMI naming format to look up the image","type":"string"},"imageLookupOrg":{"description":"ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set","type":"string"},"rootVolume":{"$ref":"#/definitions/v1AwsRootVolume"}},"type":"object"},"v1AwsLoginCredentials":{"properties":{"iamUser":{"type":"string"},"password":{"format":"password","type":"string"}},"type":"object"},"v1AwsMachine":{"description":"AWS cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1AwsMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1AwsMachinePoolCloudConfigEntity":{"properties":{"additionalSecurityGroups":{"description":"Additional Security groups","items":{"$ref":"#/definitions/v1AwsResourceReference"},"type":"array"},"azs":{"items":{"type":"string"},"type":"array"},"capacityType":{"default":"on-demand","description":"EC2 instance capacity type","enum":["on-demand","spot"],"type":"string"},"instanceType":{"description":"instance type","type":"string"},"rootDeviceSize":{"description":"rootDeviceSize in GBs","format":"int64","maximum":2000,"minimum":1,"type":"integer"},"spotMarketOptions":{"$ref":"#/definitions/v1SpotMarketOptions","description":"SpotMarketOptions allows users to configure instances to be run using AWS Spot instances."},"subnets":{"items":{"$ref":"#/definitions/v1AwsSubnetEntity"},"type":"array"}},"required":["instanceType"],"type":"object"},"v1AwsMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalSecurityGroups":{"description":"Additional Security groups","items":{"$ref":"#/definitions/v1AwsResourceReference"},"type":"array"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"azs":{"description":"AZs is only used for dynamic placement","items":{"type":"string"},"type":"array"},"capacityType":{"default":"on-demand","description":"EC2 instance capacity type","enum":["on-demand","spot"],"type":"string"},"instanceConfig":{"$ref":"#/definitions/v1InstanceConfig"},"instanceType":{"description":"instance type","type":"string"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean","x-omitempty":false},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"rootDeviceSize":{"description":"rootDeviceSize in GBs","format":"int64","type":"integer"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"spotMarketOptions":{"$ref":"#/definitions/v1SpotMarketOptions","description":"SpotMarketOptions allows users to configure instances to be run using AWS Spot instances."},"subnetIds":{"additionalProperties":{"type":"string"},"description":"AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment","type":"object"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean","x-omitempty":false}},"required":["isControlPlane"],"type":"object"},"v1AwsMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1AwsMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"required":["cloudConfig"],"type":"object"},"v1AwsMachineSpec":{"description":"AWS cloud VM definition spec","properties":{"additionalSecurityGroups":{"description":"Additional Security groups","items":{"$ref":"#/definitions/v1AwsResourceReference"},"type":"array"},"ami":{"type":"string"},"az":{"type":"string"},"dnsName":{"type":"string"},"iamProfile":{"type":"string"},"instanceType":{"type":"string"},"nics":{"items":{"$ref":"#/definitions/v1AwsNic"},"type":"array"},"phase":{"type":"string"},"sshKeyName":{"type":"string"},"subnetId":{"type":"string"},"type":{"type":"string"},"vpcId":{"type":"string"}},"required":["instanceType","vpcId","ami"],"type":"object"},"v1AwsMachines":{"description":"AWS machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1AwsMachine"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1AwsNic":{"description":"AWS network interface","properties":{"index":{"format":"int8","type":"integer"},"privateIPs":{"items":{"type":"string"},"type":"array"},"publicIp":{"type":"string"}},"type":"object"},"v1AwsPartition":{"default":"aws","description":"AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values","enum":["aws","aws-us-gov"],"type":"string"},"v1AwsPolicies":{"properties":{"policies":{"items":{"$ref":"#/definitions/v1AwsIamPolicy"},"type":"array"}},"required":["policies"],"type":"object"},"v1AwsPolicyArnsSpec":{"description":"Aws policy ARNs spec","properties":{"account":{"$ref":"#/definitions/v1AwsCloudAccount"},"policyArns":{"items":{"type":"string"},"type":"array"}},"required":["policyArns","account"],"type":"object"},"v1AwsRegion":{"description":"AWS region which represents separate geographic area.","properties":{"endpoint":{"description":"AWS offer a regional endpoint that can used to make requests","type":"string"},"name":{"description":"Name of the AWS region","type":"string"},"optInStatus":{"description":"Enable your account to operate in the particular regions","type":"string"}},"type":"object"},"v1AwsRegions":{"properties":{"regions":{"description":"List of AWS regions","items":{"$ref":"#/definitions/v1AwsRegion"},"type":"array"}},"required":["regions"],"type":"object"},"v1AwsResourceFilter":{"description":"Filter is a filter used to identify an AWS resource","properties":{"name":{"description":"Name of the filter. Filter names are case-sensitive","type":"string"},"values":{"description":"Values includes one or more filter values. Filter values are case-sensitive","items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1AwsResourceReference":{"description":"AWSResourceReference is a reference to a specific AWS resource by ID or filters","properties":{"arn":{"description":"ARN of resource","type":"string"},"filters":{"description":"Filters is a set of key/value pairs used to identify a resource","items":{"$ref":"#/definitions/v1AwsResourceFilter"},"type":"array","uniqueItems":true},"id":{"description":"ID of resource","type":"string"}},"type":"object"},"v1AwsRootVolume":{"description":"Volume encapsulates the configuration options for the storage device.","properties":{"deviceName":{"description":"Device name","type":"string"},"encrypted":{"description":"EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN","type":"boolean"},"encryptionKey":{"description":"EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN","type":"string"},"iops":{"description":"IOPS is the number of IOPS requested for the disk. Not applicable to all types","format":"int64","type":"integer"},"throughput":{"description":"Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.","format":"int64","type":"integer"},"type":{"description":"Type is the type of the volume (e.g. gp2, io1, etc...)","type":"string"}},"type":"object"},"v1AwsS3BucketCredentials":{"description":"AWS S3 Bucket credentials","properties":{"bucket":{"description":"Name of AWS S3 bucket","type":"string"},"credentials":{"$ref":"#/definitions/v1AwsCloudAccount"},"folder":{"description":"Name of the folder in the specified AWS S3 bucket.","type":"string"},"region":{"description":"Name of the available AWS region.","type":"string"}},"required":["credentials","bucket","region"],"type":"object"},"v1AwsSecurityGroups":{"properties":{"groups":{"items":{"$ref":"#/definitions/v1AwsSecuritygroup"},"type":"array"}},"required":["groups"],"type":"object"},"v1AwsSecuritygroup":{"description":"Aws security group","properties":{"groupId":{"type":"string"},"groupName":{"type":"string"},"ownerId":{"type":"string"}},"type":"object"},"v1AwsStorageTypes":{"properties":{"storageTypes":{"description":"List of AWS storage types","items":{"$ref":"#/definitions/v1StorageType"},"type":"array"}},"type":"object"},"v1AwsStsCredentials":{"description":"Aws sts credentials","properties":{"arn":{"description":"Arn for the aws sts credentials in cloud account","type":"string"},"externalId":{"description":"ExternalId for the aws sts credentials in cloud account","type":"string"}},"type":"object"},"v1AwsSubnet":{"description":"A subnet is a range of IP addresses in a AWS VPC","properties":{"az":{"description":"Every subnet can only be associated with only one Availability Zone","type":"string"},"isPrivate":{"description":"Is this subnet private","type":"boolean"},"mapPublicIpOnLaunch":{"description":"Indicates whether instances launched in this subnet receive a public IPv4 address.","type":"boolean","x-omitempty":false},"name":{"description":"Name of the subnet","type":"string"},"subnetId":{"description":"Id of the subnet","type":"string"}}},"v1AwsSubnetEntity":{"properties":{"az":{"type":"string"},"id":{"type":"string"}}},"v1AwsUserCloudAccount":{"properties":{"accountId":{"type":"string"},"cloudAccount":{"$ref":"#/definitions/v1AwsCloudAccount"}}},"v1AwsVolumeSize":{"description":"AWS Volume Size entity","properties":{"sizeGB":{"description":"AWS volume size","type":"integer"}},"type":"object"},"v1AwsVolumeType":{"description":"AWS Volume Type entity","properties":{"id":{"description":"AWS volume type id","type":"string"},"maxIops":{"description":"Iops through put of volume type","type":"string"},"maxThroughPut":{"description":"Max through put of volume type","type":"string"},"name":{"description":"AWS Volume Type Name","type":"string"}},"type":"object"},"v1AwsVpc":{"description":"A virtual network dedicated to a AWS account","properties":{"cidrBlock":{"type":"string"},"name":{"description":"Name of the virtual network","type":"string"},"subnets":{"description":"List of subnets associated to a AWS VPC","items":{"$ref":"#/definitions/v1AwsSubnet"},"type":"array"},"vpcId":{"description":"Id of the virtual network","type":"string"}},"required":["vpcId"],"type":"object"},"v1AwsVpcs":{"description":"List of AWS VPCs","properties":{"vpcs":{"items":{"$ref":"#/definitions/v1AwsVpc"},"type":"array"}},"required":["vpcs"],"type":"object"},"v1AzValidateEntity":{"description":"Az validate entity","properties":{"azs":{"description":"Gcp Azs","items":{"type":"string"},"type":"array"},"project":{"description":"Gcp project","type":"string"},"region":{"description":"Gcp region","type":"string"},"uid":{"description":"Cloud account uid","type":"string"}},"type":"object"},"v1AzureAccount":{"description":"Azure account information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the account.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1AzureCloudAccount"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1AzureAccounts":{"properties":{"items":{"items":{"$ref":"#/definitions/v1AzureAccount"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1AzureAvailabilityZone":{"description":"Azure availability zone","properties":{"name":{"description":"Azure availability zone name","type":"string"}},"type":"object"},"v1AzureCloudAccount":{"properties":{"azureEnvironment":{"default":"AzurePublicCloud","description":"Contains configuration for Azure cloud","enum":["AzureChinaCloud","AzurePublicCloud","AzureUSGovernment","AzureUSGovernmentCloud"],"type":"string"},"clientId":{"description":"Client ID(Directory ID) is a unique identifier generated by Azure AD that is tied to an application","type":"string"},"clientSecret":{"description":"ClientSecret is the secret associated with Client","type":"string"},"settings":{"$ref":"#/definitions/v1CloudAccountSettings","description":"Palette internal cloud settings"},"tenantId":{"description":"Tenant ID is the ID for the Azure AD tenant that the user belongs to.","type":"string"},"tenantName":{"description":"Tenant ID is the ID for the Azure AD tenant that the user belongs to.","type":"string"}},"required":["tenantId","clientId","clientSecret"],"type":"object"},"v1AzureCloudClusterConfigEntity":{"description":"Azure cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1AzureClusterConfig"}},"type":"object"},"v1AzureCloudConfig":{"description":"AzureCloudConfig is the Schema for the azurecloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1AzureCloudConfigSpec"},"status":{"$ref":"#/definitions/v1AzureCloudConfigStatus"}},"type":"object"},"v1AzureCloudConfigSpec":{"description":"AzureCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"cloudAccountRef should point to the secret which contains AzureCloudAccount"},"clusterConfig":{"$ref":"#/definitions/v1AzureClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1AzureMachinePoolConfig"},"type":"array"}},"type":"object"},"v1AzureCloudConfigStatus":{"description":"AzureCloudConfigStatus defines the observed state of AzureCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool","properties":{"ansibleRoleDigest":{"description":"For mold controller to identify if is there any changes in Pack","type":"string"},"conditions":{"description":"spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`","items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"images":{"$ref":"#/definitions/v1AzureImage","description":"Images array items should be 1-to-1 mapping to Spec.MachinePoolConfig"},"isAddonLayer":{"description":"addon layers present in spc","type":"boolean"},"roleDigest":{"additionalProperties":{"type":"string"},"description":"this map will be for ansible roles present in eack pack","type":"object"},"sourceImageId":{"description":"sourceImageId, it can be from packref's annotations or from pack.json","type":"string"},"useCapiImage":{"description":"PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add","type":"boolean"},"vhdImage":{"$ref":"#/definitions/v1AzureVHDImage"}},"type":"object"},"v1AzureClusterConfig":{"description":"Cluster level configuration for Azure cloud and applicable for all the machine pools","properties":{"aadProfile":{"$ref":"#/definitions/v1AADProfile","description":"AadProfile is Azure Active Directory configuration to integrate with AKS for aad authentication."},"apiServerAccessProfile":{"$ref":"#/definitions/v1APIServerAccessProfile","description":"APIServerAccessProfile is the access profile for AKS API server."},"containerName":{"type":"string"},"controlPlaneSubnet":{"$ref":"#/definitions/v1Subnet","description":"Subnet for Kubernetes control-plane node"},"enablePrivateCluster":{"description":"Deprecated. use apiServerAccessProfile.enablePrivateCluster","type":"boolean"},"infraLBConfig":{"$ref":"#/definitions/v1InfraLBConfig","description":"APIServerLB is the configuration for the control-plane load balancer."},"location":{"description":"Location is the Azure datacenter location","type":"string"},"resourceGroup":{"type":"string"},"sshKey":{"type":"string"},"storageAccountName":{"type":"string"},"subscriptionId":{"description":"Subscription ID is unique identifier for the subscription used to access Azure services","type":"string"},"vnetCidrBlock":{"type":"string"},"vnetName":{"description":"VNETName is the virtual network in which the cluster is to be provisioned.","type":"string"},"vnetResourceGroup":{"type":"string"},"workerSubnet":{"$ref":"#/definitions/v1Subnet","description":"Subnet for Kubernetes worker node"}},"required":["subscriptionId","location","sshKey"],"type":"object"},"v1AzureGroup":{"description":"Azure group entity","properties":{"id":{"description":"Azure group id","type":"string"},"name":{"description":"Azure group name","type":"string"}},"type":"object"},"v1AzureGroups":{"description":"List of Azure groups","properties":{"groups":{"items":{"$ref":"#/definitions/v1AzureGroup"},"type":"array"}},"required":["groups"],"type":"object"},"v1AzureImage":{"description":"Refers to Azure Shared Gallery image","properties":{"gallery":{"type":"string"},"name":{"type":"string"},"resourceGroup":{"type":"string"},"state":{"type":"string"},"subscriptionID":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1AzureInstanceTypes":{"description":"List of Azure instance types","properties":{"instanceTypes":{"items":{"$ref":"#/definitions/v1InstanceType"},"type":"array"}},"type":"object"},"v1AzureMachine":{"description":"Azure cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1AzureMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1AzureMachinePoolCloudConfigEntity":{"properties":{"azs":{"items":{"type":"string"},"type":"array"},"instanceType":{"description":"Instance type stands for VMSize in Azure","type":"string"},"isSystemNodePool":{"description":"whether this pool is for system node Pool","type":"boolean"},"osDisk":{"$ref":"#/definitions/v1AzureOSDisk"}},"type":"object"},"v1AzureMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"azs":{"items":{"type":"string"},"type":"array"},"instanceConfig":{"$ref":"#/definitions/v1InstanceConfig"},"instanceType":{"description":"Instance type stands for VMSize in Azure","type":"string"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean","x-omitempty":false},"isSystemNodePool":{"description":"whether this pool is for system node Pool","type":"boolean","x-omitempty":false},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"osDisk":{"$ref":"#/definitions/v1AzureOSDisk"},"osType":{"$ref":"#/definitions/v1OsType","type":"string"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"spotVMOptions":{"$ref":"#/definitions/v1SpotVMOptions","description":"SpotVMOptions allows the ability to specify the Machine should use a Spot VM"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean","x-omitempty":false}},"required":["isControlPlane"],"type":"object"},"v1AzureMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1AzureMachinePoolCloudConfigEntity"},"managedPoolConfig":{"$ref":"#/definitions/v1AzureManagedMachinePoolConfig"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"required":["cloudConfig"],"type":"object"},"v1AzureMachineSpec":{"description":"Azure cloud VM definition spec","properties":{"additionalTags":{"additionalProperties":{"type":"string"},"type":"object"},"allocatePublicIP":{"type":"boolean"},"availabilityZone":{"$ref":"#/definitions/v1AzureMachineSpecAvailabilityZone"},"image":{"$ref":"#/definitions/v1AzureMachineSpecImage"},"instanceType":{"type":"string"},"location":{"type":"string"},"nics":{"items":{"$ref":"#/definitions/v1AzureNic"},"type":"array"},"osDisk":{"$ref":"#/definitions/v1AzureOSDisk"},"sshPublicKey":{"type":"string"}},"required":["instanceType","location","osDisk"],"type":"object"},"v1AzureMachineSpecAvailabilityZone":{"description":"Azure Machine Spec Availability zone","properties":{"enabled":{"type":"boolean"},"id":{"type":"string"}},"type":"object"},"v1AzureMachineSpecImage":{"description":"Azure Machine Spec Image","properties":{"gallery":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"offer":{"type":"string"},"publisher":{"type":"string"},"resourceGroup":{"type":"string"},"sku":{"type":"string"},"subscriptionId":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1AzureMachines":{"description":"Azure machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1AzureMachine"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1AzureManagedMachinePoolConfig":{"properties":{"isSystemNodePool":{"description":"whether this pool is for system node Pool","type":"boolean","x-omitempty":false},"osType":{"$ref":"#/definitions/v1OsType","type":"string"}},"type":"object"},"v1AzureNic":{"description":"AWS network interface","properties":{"index":{"format":"int8","type":"integer"},"privateIPs":{"items":{"type":"string"},"type":"array"},"publicIp":{"type":"string"}},"type":"object"},"v1AzureOSDisk":{"properties":{"diskSizeGB":{"format":"int32","type":"integer"},"managedDisk":{"$ref":"#/definitions/v1ManagedDisk"},"osType":{"$ref":"#/definitions/v1OsType","type":"string"}},"type":"object"},"v1AzurePrivateDnsZone":{"description":"Azure Private DNS zone entity","properties":{"id":{"description":"Fully qualified resource Id for the resource","type":"string"},"location":{"description":"The Azure Region where the resource lives","type":"string"},"name":{"description":"The name of the resource","type":"string"}},"type":"object"},"v1AzurePrivateDnsZones":{"description":"List of Azure storage accounts","properties":{"privateDnsZones":{"items":{"$ref":"#/definitions/v1AzurePrivateDnsZone"},"type":"array"}},"type":"object"},"v1AzureRegion":{"description":"Azure region entity","properties":{"displayName":{"description":"Azure region displayname","type":"string"},"name":{"description":"Azure region name","type":"string"},"zones":{"description":"List of zones associated to a particular Azure region","items":{"$ref":"#/definitions/v1AzureAvailabilityZone"},"type":"array"}},"type":"object"},"v1AzureRegions":{"description":"List of Azure regions","properties":{"regions":{"items":{"$ref":"#/definitions/v1AzureRegion"},"type":"array"}},"required":["regions"],"type":"object"},"v1AzureResourceGroupList":{"description":"List of Azure resource group","properties":{"resourceGroupList":{"items":{"$ref":"#/definitions/v1ResourceGroup"},"type":"array"}},"type":"object"},"v1AzureStorageAccountEntity":{"description":"Azure Storage Account Entity","properties":{"storageAccountTypes":{"items":{"$ref":"#/definitions/v1StorageAccountEntity"},"type":"array"}},"type":"object"},"v1AzureStorageAccounts":{"description":"List of Azure storage accounts","properties":{"accounts":{"items":{"$ref":"#/definitions/v1StorageAccount"},"type":"array"}},"type":"object"},"v1AzureStorageConfig":{"description":"Azure storage config object","properties":{"containerName":{"description":"Azure container name","type":"string"},"credentials":{"$ref":"#/definitions/v1.AzureAccountEntitySpec","description":"Azure cloud account credentials"},"resourceGroup":{"description":"Azure resource group name, to which the storage account is mapped","type":"string"},"sku":{"description":"Azure sku","type":"string"},"storageName":{"description":"Azure storage name","type":"string"}},"required":["resourceGroup","containerName","storageName","credentials"],"type":"object"},"v1AzureStorageContainers":{"description":"List of Azure storage containers","properties":{"containers":{"items":{"$ref":"#/definitions/v1StorageContainer"},"type":"array"}},"type":"object"},"v1AzureStorageTypes":{"description":"List of Azure storage types","properties":{"storageTypes":{"items":{"$ref":"#/definitions/v1StorageType"},"type":"array"}},"type":"object"},"v1AzureSubscriptionList":{"description":"List of Azure subscription","properties":{"subscriptionList":{"items":{"$ref":"#/definitions/v1Subscription"},"type":"array"}},"type":"object"},"v1AzureVHDImage":{"description":"Mold always create VHD image for custom image, and this can be use as golden images","properties":{"id":{"type":"string"},"name":{"type":"string"},"os":{"type":"string"},"region":{"type":"string"},"state":{"type":"string"}},"type":"object"},"v1AzureVhdUrlEntity":{"description":"Azure vhd url entity","properties":{"name":{"description":"The name of the resource","type":"string"},"url":{"description":"The url of the Azure Vhd","type":"string"}},"type":"object"},"v1AzureVirtualNetworkList":{"description":"List of Azure virtual network","properties":{"virtualNetworkList":{"items":{"$ref":"#/definitions/v1VirtualNetwork"},"type":"array"}},"type":"object"},"v1AzureZoneEntity":{"description":"List of Azure zone","properties":{"zoneList":{"items":{"$ref":"#/definitions/v1ZoneEntity"},"type":"array"}},"type":"object"},"v1BackupLocationConfig":{"description":"Backup location configuration","properties":{"name":{"type":"string"},"type":{"type":"string"},"uid":{"type":"string"}}},"v1BackupRestoreStatusMeta":{"description":"Backup restored status","properties":{"backupName":{"type":"string"},"destinationClusterRef":{"$ref":"#/definitions/v1ResourceReference"},"restoreState":{"type":"string"}}},"v1BackupState":{"description":"Backup state","properties":{"backupTime":{"$ref":"#/definitions/v1Time"},"deleteState":{"type":"string"},"msg":{"type":"string"},"state":{"type":"string"}}},"v1BackupStatusConfig":{"description":"Backup config","properties":{"includeAllDisks":{"type":"boolean"},"includeClusterResources":{"type":"boolean"},"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1BackupStatusMeta":{"description":"Backup status meta","properties":{"backupName":{"type":"string"},"backupState":{"$ref":"#/definitions/v1BackupState"},"backupedNamespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true},"expiryDate":{"$ref":"#/definitions/v1Time"}}},"v1BasicOciRegistry":{"description":"Basic oci registry information","properties":{"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1BasicOciRegistrySpec"}},"type":"object"},"v1BasicOciRegistrySpec":{"description":"Basic oci registry spec","properties":{"auth":{"$ref":"#/definitions/v1RegistryAuth"},"baseContentPath":{"description":"OCI registry content base path","type":"string"},"basePath":{"description":"OCI registry api base path","type":"string"},"endpoint":{"description":"OCI registry endpoint","type":"string"},"providerType":{"default":"helm","enum":["helm","zarf","pack"],"type":"string"},"registryUid":{"description":"Basic oci registry uid","type":"string"},"scope":{"type":"string"}},"required":["endpoint","auth"],"type":"object"},"v1Billing":{"description":"billing preference","properties":{"billingDay":{"type":"integer"},"tierPricing":{"$ref":"#/definitions/v1TierPrice"}}},"v1BrokerLogin":{"description":"Request for broker login request","properties":{"subscriberSubjects":{"description":"subjects that client need to subscribe","items":{"type":"string"},"type":"array"}},"type":"object"},"v1BrokerToken":{"description":"Response for broker login request","properties":{"msgCtxData":{"additionalProperties":{"type":"string"},"description":"message context data can be used as contextual information for the message exchange"},"publisherSubjects":{"description":"subjects that client can publish","items":{"type":"string"},"type":"array"},"subscriberSubjects":{"description":"subjects that client has subscribed","items":{"type":"string"},"type":"array"}},"type":"object"},"v1BulkDeleteFailure":{"properties":{"errMsg":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}}},"v1BulkDeleteRequest":{"properties":{"uids":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"required":["uids"]},"v1BulkDeleteResponse":{"properties":{"deletedCount":{"type":"integer","x-omitempty":false},"failures":{"items":{"$ref":"#/definitions/v1BulkDeleteFailure"},"type":"array","uniqueItems":true,"x-omitempty":false},"isSucceeded":{"type":"boolean","x-omitempty":false},"message":{"type":"string","x-omitempty":false}}},"v1BulkEvents":{"description":"Describes a list component events' details","items":{"$ref":"#/definitions/v1Event"},"type":"array","uniqueItems":true},"v1CPU":{"properties":{"cores":{"description":"number of cpu cores","format":"int32","type":"integer"}},"type":"object"},"v1CPUPassthroughSpec":{"properties":{"cachePassthrough":{"type":"boolean"},"isEnabled":{"description":"Enables the CPU Passthrough for the libvirt domain","type":"boolean"}},"type":"object"},"v1Card":{"description":"Card details object","properties":{"brand":{"description":"Card brand","type":"string"},"country":{"description":"Country name the card belongs","type":"string"},"expMonth":{"description":"Expiry month of the card","format":"uint64","type":"number"},"expYear":{"description":"Expiry year of the card","format":"uint64","type":"number"},"fingerPrint":{"description":"Finger print","type":"string"},"funding":{"description":"Funding","type":"string"},"last4":{"description":"Last 4 digit of the card","type":"string"}}},"v1Cert":{"properties":{"certificate":{"type":"string","x-omitempty":false},"isCA":{"type":"boolean","x-omitempty":false},"key":{"type":"string","x-omitempty":false}},"type":"object"},"v1Certificate":{"description":"Certificate details","properties":{"expiry":{"$ref":"#/definitions/v1Time","description":"Certificate expiry time"},"name":{"type":"string"}},"type":"object"},"v1CertificateAuthority":{"description":"Certificate Authority","properties":{"certificates":{"items":{"$ref":"#/definitions/v1Certificate"},"type":"array"},"expiry":{"$ref":"#/definitions/v1Time","description":"Certificate expiry time"},"name":{"type":"string"}},"type":"object"},"v1Channel":{"properties":{"alertAllUsers":{"type":"boolean","x-omitempty":false},"createdBy":{"type":"string"},"http":{"properties":{"body":{"type":"string"},"headers":{"additionalProperties":{"type":"string"}},"method":{"type":"string"},"url":{"type":"string"}},"type":"object"},"identifiers":{"items":{"type":"string"},"type":"array","uniqueItems":true},"isActive":{"type":"boolean","x-omitempty":false},"status":{"$ref":"#/definitions/v1AlertNotificationStatus"},"type":{"enum":["email","app","http"],"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1CleanUpResource":{"description":"Resources of tenant","properties":{"activeResources":{"$ref":"#/definitions/v1ActiveTenantResources"},"tenantStatus":{"$ref":"#/definitions/v1TenantCleanUpStatus"}},"type":"object"},"v1CloudAccountMeta":{"description":"Cloud account meta information","properties":{"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1CloudAccountMetadata":{"description":"Cloud account metadata summary","properties":{"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"}}},"v1CloudAccountSettings":{"description":"Cloud account settings","properties":{"disablePropertiesRequest":{"description":"Will disable certain properties request to cloud and the input is collected directly from the user","type":"boolean","x-omitempty":false}},"type":"object"},"v1CloudAccountStatus":{"description":"Status of the account","properties":{"state":{"description":"Cloud account status","type":"string"}},"type":"object"},"v1CloudAccountSummary":{"description":"Cloud account summary","properties":{"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"specSummary":{"description":"Cloud account spec summary","properties":{"accountId":{"type":"string"}},"type":"object"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1CloudAccountUidEntity":{"description":"Cloud account uid entity","properties":{"uid":{"description":"Cloud account uid","type":"string"}},"type":"object"},"v1CloudAccountsMetadata":{"properties":{"items":{"items":{"$ref":"#/definitions/v1CloudAccountMetadata"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1CloudAccountsPatch":{"items":{"$ref":"#/definitions/v1HttpPatch"},"type":"array"},"v1CloudAccountsSummary":{"properties":{"items":{"items":{"$ref":"#/definitions/v1CloudAccountSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1CloudCategory":{"default":"cloud","description":"Cloud category description","enum":["datacenter","cloud","edge"],"type":"string"},"v1CloudConfigMeta":{"properties":{"cloudType":{"type":"string"},"machinePools":{"description":"Machine pool meta information","items":{"$ref":"#/definitions/v1MachinePoolMeta"},"type":"array"},"uid":{"description":"Cluster's cloud config uid","type":"string"}},"type":"object"},"v1CloudCost":{"description":"Cloud cost information","properties":{"compute":{"format":"float64","type":"number","x-omitempty":false},"storage":{"format":"float64","type":"number","x-omitempty":false},"total":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1CloudCostDataPoint":{"description":"Cloud cost data point information","properties":{"compute":{"format":"float64","type":"number","x-omitempty":false},"storage":{"format":"float64","type":"number","x-omitempty":false},"timestamp":{"format":"int64","type":"number"},"total":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1CloudInstanceRateConfig":{"description":"Cloud instance rate config","properties":{"computeRateProportion":{"format":"float","type":"number"},"memoryRateProportion":{"format":"float","type":"number"}}},"v1CloudMachineStatus":{"description":"cloud machine status","properties":{"health":{"$ref":"#/definitions/v1MachineHealth"},"instanceState":{"enum":["Pending","Provisioning","Provisioned","Running","Deleting","Deleted","Failed","Unknown"],"type":"string"},"maintenanceStatus":{"$ref":"#/definitions/v1MachineMaintenanceStatus"}},"type":"object"},"v1CloudRate":{"description":"Cloud estimated rate information","properties":{"compute":{"$ref":"#/definitions/v1ComputeRate"},"storage":{"items":{"$ref":"#/definitions/v1StorageRate"},"type":"array"},"total":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1CloudResourceMetadata":{"description":"Cloud resource metadata","properties":{"instanceTypes":{"additionalProperties":{"$ref":"#/definitions/v1InstanceType"},"type":"object"},"storageTypes":{"additionalProperties":{"$ref":"#/definitions/v1StorageType"},"type":"object"}},"type":"object"},"v1CloudSpotPrice":{"description":"Spot price entity of a particular cloud type","properties":{"spotPrice":{"description":"Spot price of a resource for a particular cloud","format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1CloudWatch":{"properties":{"credentials":{"$ref":"#/definitions/v1AwsCloudAccount"},"group":{"type":"string"},"region":{"type":"string"},"stream":{"type":"string"}},"type":"object"},"v1ClusterBackup":{"description":"Cluster Backup","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterBackupSpec"},"status":{"$ref":"#/definitions/v1ClusterBackupStatus"}}},"v1ClusterBackupConfig":{"description":"Cluster backup config","properties":{"backupLocationName":{"type":"string"},"backupLocationUid":{"type":"string"},"backupName":{"type":"string"},"backupPrefix":{"type":"string"},"durationInHours":{"format":"int64","type":"number"},"includeAllDisks":{"type":"boolean"},"includeClusterResources":{"type":"boolean"},"locationType":{"type":"string"},"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true},"schedule":{"$ref":"#/definitions/v1ClusterFeatureSchedule"}}},"v1ClusterBackupLocationType":{"description":"Cluster backup location type","properties":{"locationType":{"type":"string"}},"required":["locationType"]},"v1ClusterBackupSpec":{"description":"Cluster Backup Spec","properties":{"clusterUid":{"type":"string"},"config":{"$ref":"#/definitions/v1ClusterBackupConfig"}}},"v1ClusterBackupStatus":{"description":"Cluster Backup Status","properties":{"clusterBackupStatuses":{"items":{"$ref":"#/definitions/v1ClusterBackupStatusMeta"},"type":"array"}}},"v1ClusterBackupStatusMeta":{"description":"Cluster Backup Status Meta","properties":{"actor":{"$ref":"#/definitions/v1ClusterFeatureActor"},"backupConfig":{"$ref":"#/definitions/v1BackupStatusConfig"},"backupLocationConfig":{"$ref":"#/definitions/v1BackupLocationConfig"},"backupRequestUid":{"type":"string"},"backupStatusMeta":{"items":{"$ref":"#/definitions/v1BackupStatusMeta"},"type":"array"},"restoreStatusMeta":{"items":{"$ref":"#/definitions/v1BackupRestoreStatusMeta"},"type":"array"},"state":{"type":"string"}}},"v1ClusterComplianceOnDemandConfig":{"description":"Cluster compliance scan on demand configuration","properties":{"kubeBench":{"$ref":"#/definitions/v1ClusterComplianceScanKubeBenchConfig"},"kubeHunter":{"$ref":"#/definitions/v1ClusterComplianceScanKubeHunterConfig"},"sonobuoy":{"$ref":"#/definitions/v1ClusterComplianceScanSonobuoyConfig"},"syft":{"$ref":"#/definitions/v1ClusterComplianceScanSyftConfig"}}},"v1ClusterComplianceScan":{"description":"Cluster Compliance Scan","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterComplianceScanSpec"}}},"v1ClusterComplianceScanKubeBenchConfig":{"description":"Cluster compliance scan config for kube bench driver","properties":{"runScan":{"type":"boolean"}}},"v1ClusterComplianceScanKubeBenchScheduleConfig":{"description":"Cluster compliance scan schedule config for kube bench driver","properties":{"schedule":{"$ref":"#/definitions/v1ClusterFeatureSchedule"}}},"v1ClusterComplianceScanKubeHunterConfig":{"description":"Cluster compliance scan config for kube hunter driver","properties":{"runScan":{"type":"boolean"}}},"v1ClusterComplianceScanKubeHunterScheduleConfig":{"description":"Cluster compliance scan schedule config for kube hunter driver","properties":{"schedule":{"$ref":"#/definitions/v1ClusterFeatureSchedule"}}},"v1ClusterComplianceScanLogSpec":{"description":"Cluster compliance scan logs spec","properties":{"clusterUid":{"type":"string"},"driverType":{"type":"string"}}},"v1ClusterComplianceScanLogs":{"description":"Cluster compliance scan Logs","properties":{"kubeBenchLogs":{"items":{"$ref":"#/definitions/v1ClusterScanLogKubeBench"},"type":"array"},"kubeHunterLogs":{"items":{"$ref":"#/definitions/v1ClusterScanLogKubeHunter"},"type":"array"},"sonobuoyLogs":{"items":{"$ref":"#/definitions/v1ClusterScanLogSonobuoy"},"type":"array"},"syftLogs":{"items":{"$ref":"#/definitions/v1ClusterScanLogSyft"},"type":"array"}}},"v1ClusterComplianceScanSonobuoyConfig":{"description":"Cluster compliance scan config for sonobuoy driver","properties":{"runScan":{"type":"boolean"}}},"v1ClusterComplianceScanSonobuoyScheduleConfig":{"description":"Cluster compliance scan schedule config for sonobuoy driver","properties":{"schedule":{"$ref":"#/definitions/v1ClusterFeatureSchedule"}}},"v1ClusterComplianceScanSpec":{"description":"Cluster compliance scan Spec","properties":{"clusterUid":{"type":"string"},"driverSpec":{"additionalProperties":{"$ref":"#/definitions/v1ComplianceScanDriverSpec"},"type":"object"}}},"v1ClusterComplianceScanSyftConfig":{"description":"Cluster compliance scan config for syft driver","properties":{"config":{"$ref":"#/definitions/v1ClusterComplianceScanSyftDriverConfig"},"runScan":{"type":"boolean"}}},"v1ClusterComplianceScanSyftDriverConfig":{"description":"Cluster compliance scan specification","properties":{"format":{"enum":["cyclonedx-json","github-json","spdx-json","syft-json"],"type":"string"},"labelSelector":{"type":"string"},"location":{"$ref":"#/definitions/v1ObjectEntity"},"namespace":{"type":"string"},"podName":{"type":"string"},"scope":{"enum":["cluster","namespace","label-selector","pod"],"type":"string"}}},"v1ClusterComplianceScheduleConfig":{"description":"Cluster compliance scan schedule configuration","properties":{"kubeBench":{"$ref":"#/definitions/v1ClusterComplianceScanKubeBenchScheduleConfig"},"kubeHunter":{"$ref":"#/definitions/v1ClusterComplianceScanKubeHunterScheduleConfig"},"sonobuoy":{"$ref":"#/definitions/v1ClusterComplianceScanSonobuoyScheduleConfig"}}},"v1ClusterCondition":{"properties":{"lastProbeTime":{"$ref":"#/definitions/v1Time"},"lastTransitionTime":{"$ref":"#/definitions/v1Time"},"message":{"description":"Human-readable message indicating details about last transition.","type":"string"},"reason":{"description":"Unique, one-word, CamelCase reason for the condition's last transition.","type":"string"},"status":{"type":"string"},"type":{"type":"string"}},"required":["type","status"],"type":"object"},"v1ClusterConfig":{"properties":{"clusterMetaAttribute":{"description":"ClusterMetaAttribute contains additional cluster metadata information.","type":"string"},"clusterRbac":{"description":"Deprecated. Use clusterResources","items":{"$ref":"#/definitions/v1ResourceReference"},"type":"array"},"clusterResources":{"$ref":"#/definitions/v1ClusterResources","description":"ClusterResources defines the managment of namespace resource allocations, role bindings."},"controlPlaneHealthCheckTimeout":{"description":"ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes. If the node is not ready within the time out set, the node will be deleted and a new node will be launched.","type":"string"},"hostClusterConfig":{"$ref":"#/definitions/v1HostClusterConfig","description":"HostClusterConfiguration defines the configuration of host clusters, where virtual clusters be deployed"},"lifecycleConfig":{"$ref":"#/definitions/v1LifecycleConfig"},"machineHealthConfig":{"$ref":"#/definitions/v1MachineHealthCheckConfig","description":"MachineHealthCheckConfig defines the healthcheck timeouts for the node. The timeouts are configured by the user to overide the default healthchecks."},"machineManagementConfig":{"$ref":"#/definitions/v1MachineManagementConfig","description":"MachineManagementConfig defines the management configurations for the node. Patching OS security updates etc can be configured by user."},"updateWorkerPoolsInParallel":{"description":"UpdateWorkerPoolsInParallel is used to decide if the update of workerpools happen in parallel. When this flag is false, the workerpools are updated sequentially.","type":"boolean"}},"type":"object"},"v1ClusterConfigEntity":{"properties":{"clusterMetaAttribute":{"description":"ClusterMetaAttribute can be used to set additional cluster metadata information.","type":"string"},"controlPlaneHealthCheckTimeout":{"type":"string"},"hostClusterConfig":{"$ref":"#/definitions/v1HostClusterConfig"},"lifecycleConfig":{"$ref":"#/definitions/v1LifecycleConfig"},"location":{"$ref":"#/definitions/v1ClusterLocation"},"machineManagementConfig":{"$ref":"#/definitions/v1MachineManagementConfig"},"resources":{"$ref":"#/definitions/v1ClusterResourcesEntity"},"updateWorkerPoolsInParallel":{"type":"boolean"}},"type":"object"},"v1ClusterConfigParamEntity":{"properties":{"clusterMetaAttribute":{"description":"ClusterMetaAttribute can be used to set additional cluster metadata information.","type":"string"},"controlPlaneHealthCheckTimeout":{"type":"string"},"hostClusterConfig":{"$ref":"#/definitions/v1HostClusterConfig"},"location":{"$ref":"#/definitions/v1ClusterLocation"},"resources":{"$ref":"#/definitions/v1ClusterResourcesEntity"},"updateWorkerPoolsInParallel":{"type":"boolean"}},"type":"object"},"v1ClusterConfigResponse":{"properties":{"hostClusterConfig":{"$ref":"#/definitions/v1HostClusterConfigResponse","description":"HostClusterConfig defines the configuration entity of host clusters config entity"}},"type":"object"},"v1ClusterDefinitionEntity":{"description":"Cluster definition entity","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1ClusterDefinitionSpecEntity"}},"type":"object"},"v1ClusterDefinitionProfileEntity":{"description":"Cluster definition profile entity","properties":{"packs":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1PackValuesEntity"},"type":"array","uniqueItems":true},"uid":{"description":"Cluster profile uid","type":"string"}},"required":["uid"],"type":"object"},"v1ClusterDefinitionSpecEntity":{"description":"Cluster definition spec entity","properties":{"cloudType":{"type":"string"},"profiles":{"description":"Cluster definition profiles","items":{"$ref":"#/definitions/v1ClusterDefinitionProfileEntity"},"type":"array","uniqueItems":true}},"required":["profiles","cloudType"],"type":"object"},"v1ClusterEdgeInstallerConfig":{"properties":{"installerDownloadLinks":{"additionalProperties":{"type":"string"}}}},"v1ClusterFeatureActor":{"description":"Compliance Scan actor","properties":{"actorType":{"type":"string"},"uid":{"type":"string"}}},"v1ClusterFeatureSchedule":{"description":"Cluster feature schedule","properties":{"scheduledRunTime":{"type":"string"}}},"v1ClusterFips":{"properties":{"mode":{"$ref":"#/definitions/v1ClusterFipsMode"}}},"v1ClusterFipsMode":{"default":"none","enum":["full","none","partial","unknown"],"type":"string"},"v1ClusterGroup":{"description":"Cluster group information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterGroupSpec"},"status":{"$ref":"#/definitions/v1ClusterGroupStatus"}}},"v1ClusterGroupClusterRef":{"description":"Cluster group cluster reference","properties":{"clusterName":{"type":"string"},"clusterUid":{"type":"string"}}},"v1ClusterGroupClustersConfig":{"description":"Clusters config of cluster group","properties":{"endpointType":{"description":"Host cluster endpoint type","enum":["Ingress","LoadBalancer"],"type":"string"},"hostClustersConfig":{"items":{"$ref":"#/definitions/v1ClusterGroupHostClusterConfig"},"type":"array","uniqueItems":true},"kubernetesDistroType":{"$ref":"#/definitions/v1ClusterKubernetesDistroType"},"limitConfig":{"$ref":"#/definitions/v1ClusterGroupLimitConfig"},"values":{"type":"string"}}},"v1ClusterGroupEntity":{"description":"Cluster group information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterGroupSpecEntity"}}},"v1ClusterGroupHostClusterConfig":{"properties":{"clusterUid":{"type":"string"},"endpointConfig":{"$ref":"#/definitions/v1HostClusterEndpointConfig","description":"host cluster endpoint configuration"}}},"v1ClusterGroupHostClusterEntity":{"description":"Clusters and clusters config of cluster group","properties":{"clusterRefs":{"items":{"$ref":"#/definitions/v1ClusterGroupClusterRef"},"type":"array","uniqueItems":true},"clustersConfig":{"$ref":"#/definitions/v1ClusterGroupClustersConfig"}}},"v1ClusterGroupLimitConfig":{"description":"Cluster group limit config","properties":{"cpu":{"description":"Deprecated. Use field cpuMilliCore","format":"int32","type":"integer"},"cpuMilliCore":{"description":"CPU in milli cores","format":"int32","type":"integer"},"memory":{"description":"Deprecated. Use field memoryMiB","format":"int32","type":"integer"},"memoryMiB":{"description":"Memory in MiB","format":"int32","type":"integer"},"overSubscription":{"description":"Over subscription percentage","format":"int32","type":"integer"},"storageGiB":{"description":"Storage in GiB","format":"int32","type":"integer"}}},"v1ClusterGroupResource":{"description":"Cluster group resource allocated and usage information","properties":{"allocated":{"format":"float64","type":"number","x-omitempty":false},"used":{"format":"float64","type":"number","x-omitempty":false}}},"v1ClusterGroupSpec":{"description":"Cluster group specifications","properties":{"clusterProfileTemplates":{"description":"ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec. It consists of list of add on profiles at a cluster group level which will be enforced on all virtual cluster. ClusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef","items":{"$ref":"#/definitions/v1ClusterProfileTemplate"},"type":"array"},"clusterRefs":{"items":{"$ref":"#/definitions/v1ClusterGroupClusterRef"},"type":"array","uniqueItems":true},"clustersConfig":{"$ref":"#/definitions/v1ClusterGroupClustersConfig"},"type":{"enum":["hostCluster"],"type":"string"}}},"v1ClusterGroupSpecEntity":{"description":"Cluster group specifications request entity","properties":{"clusterRefs":{"items":{"$ref":"#/definitions/v1ClusterGroupClusterRef"},"type":"array","uniqueItems":true},"clustersConfig":{"$ref":"#/definitions/v1ClusterGroupClustersConfig"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"},"type":{"enum":["hostCluster"],"type":"string"}}},"v1ClusterGroupStatus":{"description":"Cluster group status","properties":{"isActive":{"type":"boolean","x-omitempty":false}}},"v1ClusterGroupSummary":{"description":"Cluster group summay","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterGroupSummarySpec"}}},"v1ClusterGroupSummarySpec":{"description":"Cluster group summay spec","properties":{"clusterProfileTemplates":{"items":{"$ref":"#/definitions/v1ClusterProfileTemplateMeta"},"type":"array"},"cpu":{"$ref":"#/definitions/v1ClusterGroupResource","description":"Deprecated"},"endpointType":{"enum":["Ingress","LoadBalancer"],"type":"string"},"hostClusters":{"items":{"$ref":"#/definitions/v1ObjectResReference"},"type":"array","uniqueItems":true},"hostClustersCount":{"type":"integer","x-omitempty":false},"memory":{"$ref":"#/definitions/v1ClusterGroupResource","description":"Deprecated"},"scope":{"type":"string"},"virtualClustersCount":{"type":"integer","x-omitempty":false}}},"v1ClusterGroupsDeveloperCreditUsage":{"description":"Cluster group resource allocated and usage information","properties":{"allocatedCredit":{"$ref":"#/definitions/v1DeveloperCredit"},"usedCredit":{"$ref":"#/definitions/v1DeveloperCredit"}}},"v1ClusterGroupsHostClusterMetadata":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ObjectScopeEntity"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1ClusterGroupsHostClusterSummary":{"properties":{"summaries":{"items":{"$ref":"#/definitions/v1ClusterGroupSummary"},"type":"array","uniqueItems":true}},"required":["summaries"],"type":"object"},"v1ClusterHelmChart":{"description":"Cluster helm chart metadata","properties":{"localName":{"type":"string"},"matchedRegistries":{"items":{"$ref":"#/definitions/v1ClusterHelmRegistry"},"type":"array","uniqueItems":true},"name":{"type":"string"},"values":{"type":"string"},"version":{"type":"string"}}},"v1ClusterHelmCharts":{"description":"Cluster helm charts metadata","properties":{"charts":{"items":{"$ref":"#/definitions/v1ClusterHelmChart"},"type":"array","uniqueItems":true}}},"v1ClusterHelmRegistry":{"description":"Cluster helm registry information","properties":{"name":{"type":"string"},"uid":{"type":"string"}}},"v1ClusterImport":{"properties":{"importLink":{"description":"import link to download and install ally-lite, palette-lite","type":"string"},"isBrownfield":{"description":"Deprecated. Use the 'spec.clusterType'","type":"boolean","x-omitempty":false},"state":{"description":"cluster import status","type":"string"}},"type":"object"},"v1ClusterKubeBenchLogStatus":{"description":"Cluster compliance scan KubeBench Log Status","properties":{"actor":{"$ref":"#/definitions/v1ClusterFeatureActor"},"message":{"type":"string"},"reports":{"additionalProperties":{"$ref":"#/definitions/v1KubeBenchReport"},"type":"object"},"requestUid":{"type":"string"},"scanTime":{"$ref":"#/definitions/v1ClusterScanTime"},"state":{"type":"string"}}},"v1ClusterKubeHunterLogStatus":{"description":"Cluster compliance scan KubeHunter Log Status","properties":{"actor":{"$ref":"#/definitions/v1ClusterFeatureActor"},"message":{"type":"string"},"reports":{"additionalProperties":{"$ref":"#/definitions/v1KubeHunterReport"},"type":"object"},"requestUid":{"type":"string"},"scanTime":{"$ref":"#/definitions/v1ClusterScanTime"},"state":{"type":"string"}}},"v1ClusterKubernetesDistroType":{"default":"k3s","enum":["k3s","cncf_k8s"],"type":"string"},"v1ClusterLocation":{"description":"Cluster location information","properties":{"countryCode":{"description":"country code for cluster location","type":"string"},"countryName":{"description":"country name for cluster location","type":"string"},"geoLoc":{"$ref":"#/definitions/v1GeolocationLatlong"},"regionCode":{"description":"region code for cluster location","type":"string"},"regionName":{"description":"region name for cluster location","type":"string"}},"type":"object"},"v1ClusterLogFetcher":{"description":"Cluster Log Fetcher","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterLogFetcherSpec"},"status":{"$ref":"#/definitions/v1ClusterLogFetcherStatus"}}},"v1ClusterLogFetcherK8sRequest":{"description":"Cluster Log Fetcher K8s","properties":{"labelSelector":{"items":{"type":"string"},"type":"array","uniqueItems":true},"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1ClusterLogFetcherNodeRequest":{"description":"Cluster Log Fetcher Node Request","properties":{"logs":{"description":"Array of logs","items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1ClusterLogFetcherRequest":{"description":"Cluster Log Fetcher Request","properties":{"duration":{"default":10,"description":"Duration for which log is requested","format":"int64","type":"integer"},"k8s":{"$ref":"#/definitions/v1ClusterLogFetcherK8sRequest"},"mode":{"default":"cluster","description":"Accepted Values - [\"cluster\", \"app\"]. if \"app\" then logs will be fetched from the virtual cluster","enum":["cluster","app"],"type":"string"},"noOfLines":{"default":1000,"description":"No of lines of logs requested","format":"int64","type":"integer"},"node":{"$ref":"#/definitions/v1ClusterLogFetcherNodeRequest"}}},"v1ClusterLogFetcherSpec":{"description":"Cluster Log Fetcher Spec","properties":{"clusterUid":{"type":"string"},"log":{"type":"string"}}},"v1ClusterLogFetcherStatus":{"description":"Cluster Log Fetcher Status","properties":{"state":{"type":"string"}}},"v1ClusterManifest":{"description":"Cluster manifest information","properties":{"content":{"type":"string"},"name":{"type":"string"},"namespace":{"type":"string"},"type":{"type":"string"}}},"v1ClusterManifests":{"description":"Cluster manifests information","properties":{"manifests":{"items":{"$ref":"#/definitions/v1ClusterManifest"},"type":"array","uniqueItems":true}}},"v1ClusterMeta":{"description":"Active cluster meta","properties":{"cloudType":{"type":"string"},"clusterType":{"type":"string"},"creationTimestamp":{"$ref":"#/definitions/v1Time"},"duration":{"type":"string"},"name":{"type":"string"},"projectName":{"type":"string"},"state":{"$ref":"#/definitions/v1ClusterState"},"uid":{"type":"string"}},"type":"object"},"v1ClusterMetaAttributeEntity":{"description":"Cluster additional metadata entity","properties":{"clusterMetaAttribute":{"type":"string"}},"type":"object"},"v1ClusterMetaSpecLocation":{"description":"Cluster location information","properties":{"coordinates":{"items":{"format":"float64","type":"number"},"type":"array"},"countryCode":{"type":"string"},"countryName":{"type":"string"},"regionCode":{"type":"string"},"regionName":{"type":"string"}},"type":"object"},"v1ClusterMetaStatusCost":{"description":"Cluster meta Cost information","properties":{"total":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1ClusterMetaStatusHealth":{"description":"Cluster meta health information","properties":{"isHeartBeatFailed":{"type":"boolean","x-omitempty":false},"state":{"type":"string"}},"type":"object"},"v1ClusterMetaStatusUpdates":{"description":"Cluster meta updates information","properties":{"isUpdatesPending":{"type":"boolean","x-omitempty":false}},"type":"object"},"v1ClusterNamespace":{"description":"Cluster's namespace","properties":{"namespace":{"type":"string"},"pvcCount":{"format":"int32","type":"number"}}},"v1ClusterNamespaceResource":{"description":"Cluster Namespace resource defintion","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterNamespaceSpec"},"status":{"$ref":"#/definitions/v1ClusterNamespaceStatus"}},"type":"object"},"v1ClusterNamespaceResourceAllocation":{"description":"Cluster namespace resource allocation","properties":{"cpuCores":{"exclusiveMinimum":true,"minimum":0,"type":"number"},"memoryMiB":{"exclusiveMinimum":true,"minimum":0,"type":"number"}}},"v1ClusterNamespaceResourceInputEntity":{"description":"Cluster Namespace resource defintion","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaUpdateEntity"},"spec":{"$ref":"#/definitions/v1ClusterNamespaceSpec"}},"type":"object"},"v1ClusterNamespaceResources":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ClusterNamespaceResource"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1ClusterNamespaceResourcesUpdateEntity":{"properties":{"namespaces":{"items":{"$ref":"#/definitions/v1ClusterNamespaceResourceInputEntity"},"type":"array","uniqueItems":true}},"type":"object"},"v1ClusterNamespaceSpec":{"description":"Cluster namespace spec","properties":{"isRegex":{"type":"boolean","x-omitempty":false},"relatedObject":{"$ref":"#/definitions/v1RelatedObject"},"resourceAllocation":{"$ref":"#/definitions/v1ClusterNamespaceResourceAllocation"}}},"v1ClusterNamespaceStatus":{"description":"Cluster namespace status","properties":{"errors":{"items":{"$ref":"#/definitions/v1ClusterResourceError"},"type":"array","uniqueItems":true}}},"v1ClusterNamespaces":{"description":"Cluster's available namespaces","properties":{"namespaces":{"items":{"$ref":"#/definitions/v1ClusterNamespace"},"type":"array"}}},"v1ClusterNotificationUpdateEntity":{"description":"Cluster input for notification update","properties":{"profiles":{"items":{"$ref":"#/definitions/v1ClusterProfileNotificationUpdateEntity"},"type":"array","uniqueItems":true},"spcApplySettings":{"$ref":"#/definitions/v1SpcApplySettings"}},"type":"object"},"v1ClusterPackManifestStatus":{"properties":{"condition":{"$ref":"#/definitions/v1ClusterCondition"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1ClusterPackStatus":{"properties":{"condition":{"$ref":"#/definitions/v1ClusterCondition"},"endTime":{"$ref":"#/definitions/v1Time"},"manifests":{"items":{"$ref":"#/definitions/v1ClusterPackManifestStatus"},"type":"array"},"name":{"type":"string"},"profileUid":{"type":"string"},"services":{"items":{"$ref":"#/definitions/v1LoadBalancerService"},"type":"array"},"startTime":{"$ref":"#/definitions/v1Time"},"type":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1ClusterPreference":{"description":"cluster preference","properties":{"archivalIntervalInHour":{"description":"clusters cleanup interval post deletion","type":"integer"},"deletePeriodInHour":{"description":"clusters deleted before delete period are eligible for cleanup","type":"integer"},"healthPollIntervalInMinutes":{"description":"clusters health poll interval","maximum":60,"minimum":3,"type":"integer"},"monitorIntervalInMinutes":{"description":"clusters state and consistency monitor","type":"integer"}}},"v1ClusterProfile":{"description":"ClusterProfile is the Schema for the clusterprofiles API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterProfileSpec"},"status":{"$ref":"#/definitions/v1ClusterProfileStatus"}},"type":"object"},"v1ClusterProfileCloneEntity":{"description":"Cluster profile clone request payload","properties":{"metadata":{"$ref":"#/definitions/v1ClusterProfileCloneMetaInputEntity"}},"type":"object"},"v1ClusterProfileCloneMetaInputEntity":{"description":"Cluster profile clone metadata","properties":{"name":{"description":"Cloned cluster profile name","type":"string"},"target":{"$ref":"#/definitions/v1ClusterProfileCloneTarget"},"version":{"description":"Cloned cluster profile version","type":"string"}},"required":["name"],"type":"object"},"v1ClusterProfileCloneTarget":{"description":"Cluster profile clone meta input entity","properties":{"projectUid":{"description":"Cloned cluster profile project uid","type":"string"},"scope":{"$ref":"#/definitions/v1Scope"}},"required":["scope"],"type":"object"},"v1ClusterProfileEntity":{"description":"Cluster profile request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"template":{"$ref":"#/definitions/v1ClusterProfileTemplateDraft"},"variables":{"description":"List of unique variable fields defined for a cluster profile with schema constraints","items":{"$ref":"#/definitions/v1Variable"},"type":"array","uniqueItems":true},"version":{"description":"Cluster profile version","type":"string"}},"type":"object"}},"type":"object"},"v1ClusterProfileFilterSpec":{"description":"Cluster profile filter spec","properties":{"environment":{"items":{"type":"string"},"type":"array","uniqueItems":true},"fips":{"$ref":"#/definitions/v1ClusterFipsMode"},"profileName":{"$ref":"#/definitions/v1FilterString"},"profileType":{"items":{"$ref":"#/definitions/v1ProfileType"},"type":"array","uniqueItems":true},"scope":{"$ref":"#/definitions/v1ClusterProfileScope"},"tags":{"$ref":"#/definitions/v1FilterArray"},"version":{"$ref":"#/definitions/v1FilterVersionString"}}},"v1ClusterProfileFips":{"description":"Cluster profile fips compliance status","properties":{"mode":{"$ref":"#/definitions/v1ClusterFipsMode"}}},"v1ClusterProfileImportEntity":{"description":"Cluster profile import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ClusterProfileMetadataImportEntity"},"spec":{"$ref":"#/definitions/v1ClusterProfileSpecImportEntity"}},"type":"object"},"v1ClusterProfileMetadata":{"description":"Cluster profile filter spec","properties":{"metadata":{"$ref":"#/definitions/v1ObjectEntity"},"spec":{"properties":{"cloudType":{"type":"string"},"version":{"type":"string"}}}}},"v1ClusterProfileMetadataImportEntity":{"description":"Cluster profile import metadata","properties":{"description":{"description":"Cluster profile description","type":"string"},"labels":{"additionalProperties":{"type":"string"},"description":"Cluster profile labels","type":"object"},"name":{"description":"Cluster profile name","type":"string"}},"type":"object"},"v1ClusterProfileNotificationUpdateEntity":{"description":"Cluster profile notification update request payload","properties":{"packs":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1PackManifestUpdateEntity"},"type":"array","uniqueItems":true},"uid":{"description":"Cluster profile uid","type":"string"}},"type":"object"},"v1ClusterProfilePackConfigList":{"properties":{"items":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1PackConfig"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1ClusterProfilePackManifests":{"description":"Cluster profile pack manifests","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1PackManifestsSpec"},"status":{"$ref":"#/definitions/v1PackSummaryStatus"}},"type":"object"},"v1ClusterProfilePackSummary":{"description":"Cluster profile packs summary about the deprecated, disabled, deleted packs count","properties":{"deleted":{"description":"Total count of deleted packs in a cluster profile","type":"number","x-omitempty":false},"deprecated":{"description":"Total count of deprecated packs in a cluster profile","type":"number","x-omitempty":false},"disabled":{"description":"Total count of disabled packs in a cluster profile","type":"number","x-omitempty":false}},"type":"object"},"v1ClusterProfilePacksEntities":{"description":"List of cluster profile packs","properties":{"items":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1ClusterProfilePacksEntity"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1ClusterProfilePacksEntity":{"description":"Cluster profile packs object","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1PackSummarySpec"},"status":{"$ref":"#/definitions/v1PackSummaryStatus"}},"type":"object"},"v1ClusterProfilePacksManifests":{"description":"Cluster profile pack manifests","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"packs":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1ClusterProfilePackManifests"},"type":"array","uniqueItems":true}},"type":"object"}},"type":"object"},"v1ClusterProfileScope":{"enum":["system","tenant","project"],"type":"string"},"v1ClusterProfileSortFields":{"enum":["profileName","environment","profileType","creationTimestamp","lastModifiedTimestamp"],"type":"string","x-nullable":true},"v1ClusterProfileSortSpec":{"properties":{"field":{"$ref":"#/definitions/v1ClusterProfileSortFields"},"order":{"$ref":"#/definitions/v1SortOrder"}}},"v1ClusterProfileSpec":{"description":"ClusterProfileTemplate can be in draft mode, or published mode User only see the latest published template, and (or) the draft template User can apply either the draft version or the latest published version to a cluster when user create a draft version, just copy the Published template, increment the version, and keep changing the draft template without increment the draft version when user publish a draft, the version is fixed, and won't be able to make any modification on published template For each clusterprofile that has a published version, there will be a ClusterProfileArchive automatically created when user publish a draft, the published version will also be copied over to the corresponding ClusterProfileArchive it is just in case in the future for whatever reason we may want to expose earlier versions","properties":{"draft":{"$ref":"#/definitions/v1ClusterProfileTemplate"},"published":{"$ref":"#/definitions/v1ClusterProfileTemplate"},"version":{"type":"string"},"versions":{"description":"Cluster profile's list of all the versions","items":{"$ref":"#/definitions/v1ClusterProfileVersion"},"type":"array"}},"type":"object"},"v1ClusterProfileSpecEntity":{"description":"Cluster profile update spec","properties":{"version":{"description":"Cluster profile version","type":"string"}},"type":"object"},"v1ClusterProfileSpecImportEntity":{"description":"Cluster profile import spec","properties":{"template":{"$ref":"#/definitions/v1ClusterProfileTemplateImportEntity"},"variables":{"description":"List of unique variable fields defined for a cluster profile with schema constraints","items":{"$ref":"#/definitions/v1Variable"},"type":"array","uniqueItems":true},"version":{"description":"Cluster profile version","type":"string"}},"type":"object"},"v1ClusterProfileStatus":{"description":"ClusterProfileStatus defines the observed state of ClusterProfile","properties":{"hasUserMacros":{"description":"If it is true then profile pack values has a reference to user defined macros","type":"boolean","x-omitempty":false},"inUseClusterUids":{"description":"Deprecated. Use inUseClusters","items":{"type":"string"},"type":"array"},"inUseClusters":{"items":{"$ref":"#/definitions/v1ObjectResReference"},"type":"array"},"isPublished":{"type":"boolean","x-omitempty":false}},"type":"object"},"v1ClusterProfileStatusSummary":{"description":"ClusterProfileStatusSummary defines the observed state of ClusterProfile","properties":{"fips":{"$ref":"#/definitions/v1ClusterProfileFips"},"inUseClusterUids":{"description":"Deprecated. Use inUseClusters","items":{"type":"string"},"type":"array"},"inUseClusters":{"items":{"$ref":"#/definitions/v1ObjectEntity"},"type":"array"},"isPublished":{"type":"boolean","x-omitempty":false},"pack":{"$ref":"#/definitions/v1ClusterProfilePackSummary"}},"type":"object"},"v1ClusterProfileSummary":{"description":"Cluster profile summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"specSummary":{"description":"Cluster profile spec summary","properties":{"draft":{"$ref":"#/definitions/v1ClusterProfileTemplateSummary"},"published":{"$ref":"#/definitions/v1ClusterProfileTemplateSummary"},"version":{"description":"Cluster profile's latest version","type":"string"},"versions":{"description":"Cluster profile's list of all the versions","items":{"$ref":"#/definitions/v1ClusterProfileVersion"},"type":"array"}},"type":"object"},"status":{"$ref":"#/definitions/v1ClusterProfileStatusSummary"}},"type":"object"},"v1ClusterProfileTemplate":{"description":"ClusterProfileTemplate contains details of a clusterprofile definition","properties":{"cloudType":{"type":"string"},"name":{"type":"string"},"packServerRefs":{"description":"PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array","items":{"$ref":"#/definitions/v1ObjectReference"},"type":"array"},"packServerSecret":{"description":"This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette","type":"string"},"packs":{"description":"Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge","items":{"$ref":"#/definitions/v1PackRef"},"type":"array"},"profileVersion":{"description":"version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster","type":"string"},"relatedObject":{"$ref":"#/definitions/v1ObjectReference","description":"RelatedObject refers to the type of object(clustergroup, cluster or edgeHost) the cluster profile is associated with"},"type":{"type":"string"},"uid":{"type":"string"},"version":{"description":"Deprecated. Use profileVersion","format":"int32","type":"integer"}},"type":"object"},"v1ClusterProfileTemplateDraft":{"description":"Cluster profile template spec","properties":{"cloudType":{"type":"string"},"packs":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1PackManifestEntity"},"type":"array","uniqueItems":true},"type":{"$ref":"#/definitions/v1ProfileType"}},"type":"object"},"v1ClusterProfileTemplateImportEntity":{"description":"Cluster profile import template","properties":{"cloudType":{"description":"Cluster profile cloud type","type":"string"},"packs":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1PackImportEntity"},"type":"array","uniqueItems":true},"type":{"description":"Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]","type":"string"}},"type":"object"},"v1ClusterProfileTemplateMeta":{"description":"Cluster profile template meta information","properties":{"cloudType":{"type":"string"},"name":{"description":"Cluster profile name","type":"string"},"packs":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1PackRef"},"type":"array"},"scope":{"description":"scope or context(system, tenant or project)","type":"string"},"type":{"description":"Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]","type":"string"},"uid":{"description":"Cluster profile uid","type":"string"},"version":{"format":"int32","type":"integer"}},"type":"object"},"v1ClusterProfileTemplateSummary":{"description":"Cluster profile template summary","properties":{"cloudType":{"type":"string"},"packs":{"items":{"$ref":"#/definitions/v1PackRefSummary"},"type":"array"},"type":{"type":"string"}},"type":"object"},"v1ClusterProfileTemplateUpdate":{"description":"Cluster profile template update spec","properties":{"packs":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1PackManifestUpdateEntity"},"type":"array","uniqueItems":true},"type":{"$ref":"#/definitions/v1ProfileType"}},"type":"object"},"v1ClusterProfileUpdateEntity":{"description":"Cluster profile update request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"description":"Cluster profile update spec","properties":{"template":{"$ref":"#/definitions/v1ClusterProfileTemplateUpdate"},"version":{"description":"Cluster profile version","type":"string"}},"type":"object"}},"type":"object"},"v1ClusterProfileValidatorResponse":{"description":"Cluster profile validator response","properties":{"packs":{"$ref":"#/definitions/v1ConstraintValidatorResponse"}},"type":"object"},"v1ClusterProfileVersion":{"description":"Cluster profile with version","properties":{"uid":{"type":"string"},"version":{"type":"string"}}},"v1ClusterProfiles":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ClusterProfile"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1ClusterProfilesFilterSpec":{"description":"Spectro cluster filter summary spec","properties":{"filter":{"$ref":"#/definitions/v1ClusterProfileFilterSpec"},"sort":{"items":{"$ref":"#/definitions/v1ClusterProfileSortSpec"},"type":"array","uniqueItems":true}}},"v1ClusterProfilesMetadata":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ClusterProfileMetadata"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1ClusterProfilesSummary":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ClusterProfileSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1ClusterProxySpec":{"description":"cluster proxy config spec","properties":{"caContainerMountPath":{"description":"Location to mount Proxy CA cert inside container","type":"string"},"caHostPath":{"description":"Location for Proxy CA cert on host nodes","type":"string"},"httpProxy":{"description":"URL for HTTP requests unless overridden by NoProxy","type":"string"},"httpsProxy":{"description":"HTTPS requests unless overridden by NoProxy","type":"string"},"noProxy":{"description":"NoProxy represents the NO_PROXY or no_proxy environment","type":"string"}},"type":"object"},"v1ClusterRbac":{"description":"Cluster RBAC role binding defintion","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterRbacSpec"},"status":{"$ref":"#/definitions/v1ClusterRbacStatus"}},"type":"object"},"v1ClusterRbacBinding":{"description":"Cluster RBAC binding","properties":{"namespace":{"type":"string"},"role":{"$ref":"#/definitions/v1ClusterRoleRef"},"subjects":{"items":{"$ref":"#/definitions/v1ClusterRbacSubjects"},"type":"array","uniqueItems":true},"type":{"enum":["RoleBinding","ClusterRoleBinding"],"type":"string"}},"type":"object"},"v1ClusterRbacEntity":{"properties":{"clusterRbac":{"description":"Cluster RBAC role bindings","items":{"$ref":"#/definitions/v1ResourceReference"},"type":"array"}}},"v1ClusterRbacInputEntity":{"description":"Cluster RBAC role binding defintion","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaUpdateEntity"},"spec":{"$ref":"#/definitions/v1ClusterRbacSpec"}},"type":"object"},"v1ClusterRbacResourcesUpdateEntity":{"properties":{"rbacs":{"items":{"$ref":"#/definitions/v1ClusterRbacInputEntity"},"type":"array","uniqueItems":true}},"type":"object"},"v1ClusterRbacSpec":{"description":"Cluster RBAC spec","properties":{"bindings":{"items":{"$ref":"#/definitions/v1ClusterRbacBinding"},"type":"array","uniqueItems":true},"relatedObject":{"$ref":"#/definitions/v1RelatedObject"}},"type":"object"},"v1ClusterRbacStatus":{"description":"Cluster rbac status","properties":{"errors":{"items":{"$ref":"#/definitions/v1ClusterResourceError"},"type":"array","uniqueItems":true}}},"v1ClusterRbacSubjects":{"description":"Cluster role ref","properties":{"name":{"type":"string"},"namespace":{"type":"string"},"type":{"enum":["User","Group","ServiceAccount"],"type":"string"}},"type":"object"},"v1ClusterRbacs":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ClusterRbac"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1ClusterRefs":{"description":"Cluster Object References","properties":{"clusters":{"items":{"$ref":"#/definitions/v1ObjectReference"},"type":"array"}}},"v1ClusterRepaveSource":{"enum":["user","hubble","palette","stylus"],"type":"string"},"v1ClusterRepaveState":{"default":"Pending","enum":["Pending","Approved","Reverted"],"type":"string"},"v1ClusterRepaveStatus":{"description":"Cluster repave status","properties":{"state":{"$ref":"#/definitions/v1ClusterRepaveState"}}},"v1ClusterResourceAllocation":{"description":"Workspace resource allocation","properties":{"clusterUid":{"type":"string"},"resourceAllocation":{"$ref":"#/definitions/v1WorkspaceResourceAllocation"}}},"v1ClusterResourceError":{"description":"Cluster resource error","properties":{"msg":{"type":"string"},"name":{"type":"string"},"resourceType":{"type":"string"}}},"v1ClusterResources":{"properties":{"namespaces":{"description":"Cluster namespaces","items":{"$ref":"#/definitions/v1ResourceReference"},"type":"array"},"rbacs":{"description":"Cluster RBAC role bindings","items":{"$ref":"#/definitions/v1ResourceReference"},"type":"array"}},"type":"object"},"v1ClusterResourcesEntity":{"properties":{"namespaces":{"items":{"$ref":"#/definitions/v1ClusterNamespaceResourceInputEntity"},"type":"array","uniqueItems":true},"rbacs":{"items":{"$ref":"#/definitions/v1ClusterRbacInputEntity"},"type":"array","uniqueItems":true}},"type":"object"},"v1ClusterRestore":{"description":"Cluster Restore","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterRestoreSpec"},"status":{"$ref":"#/definitions/v1ClusterRestoreStatus"}}},"v1ClusterRestoreConfig":{"description":"Cluster restore config","properties":{"backupName":{"type":"string"},"backupRequestUid":{"type":"string"},"destinationClusterUid":{"type":"string"},"includeClusterResources":{"type":"boolean"},"includeNamespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true},"preserveNodePorts":{"type":"boolean"},"restorePVs":{"type":"boolean"}},"required":["backupRequestUid","backupName","destinationClusterUid"]},"v1ClusterRestoreSpec":{"description":"Cluster Restore Spec","properties":{"clusterUid":{"type":"string"}}},"v1ClusterRestoreStatus":{"description":"Cluster Restore Status","properties":{"clusterRestoreStatuses":{"items":{"$ref":"#/definitions/v1ClusterRestoreStatusMeta"},"type":"array"}}},"v1ClusterRestoreStatusMeta":{"description":"Cluster Restore Status Meta","properties":{"actor":{"$ref":"#/definitions/v1ClusterFeatureActor"},"backupName":{"type":"string"},"backupRequestUid":{"type":"string"},"restoreRequestUid":{"type":"string"},"restoreStatusMeta":{"$ref":"#/definitions/v1RestoreStatusMeta"},"sourceClusterRef":{"$ref":"#/definitions/v1ResourceReference"},"state":{"type":"string"}}},"v1ClusterRoleRef":{"description":"Cluster role ref","properties":{"kind":{"enum":["Role","ClusterRole"],"type":"string"},"name":{"type":"string"}},"type":"object"},"v1ClusterScanLogKubeBench":{"description":"Cluster compliance scan KubeBench Log","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterComplianceScanLogSpec"},"status":{"$ref":"#/definitions/v1ClusterKubeBenchLogStatus"}}},"v1ClusterScanLogKubeHunter":{"description":"Cluster compliance scan KubeHunter Log","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterComplianceScanLogSpec"},"status":{"$ref":"#/definitions/v1ClusterKubeHunterLogStatus"}}},"v1ClusterScanLogSonobuoy":{"description":"Cluster compliance scan Sonobuoy Log","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterComplianceScanLogSpec"},"status":{"$ref":"#/definitions/v1ClusterSonobuoyLogStatus"}}},"v1ClusterScanLogSyft":{"description":"Cluster Compliance Scan Syft Log","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterComplianceScanLogSpec"},"status":{"$ref":"#/definitions/v1ClusterSyftLogStatus"}}},"v1ClusterScanTime":{"description":"Cluster compliance scan Time","properties":{"endTime":{"$ref":"#/definitions/v1Time"},"startTime":{"$ref":"#/definitions/v1Time"}}},"v1ClusterSearchInputSpec":{"properties":{"inputs":{"additionalProperties":{"$ref":"#/definitions/v1ClusterSearchInputSpecProperty"},"type":"object"}}},"v1ClusterSearchInputSpecProperty":{"properties":{"values":{"items":{"$ref":"#/definitions/v1ObjectEntity"},"type":"array","x-omitempty":true}}},"v1ClusterSonobuoyLogStatus":{"description":"Cluster compliance scan Sonobuoy Log Status","properties":{"actor":{"$ref":"#/definitions/v1ClusterFeatureActor"},"message":{"type":"string"},"reports":{"additionalProperties":{"$ref":"#/definitions/v1SonobuoyReport"},"type":"object"},"requestUid":{"type":"string"},"scanTime":{"$ref":"#/definitions/v1ClusterScanTime"},"state":{"type":"string"}}},"v1ClusterState":{"enum":["Pending","Provisioning","Running","Deleting","Deleted","Error","Importing"],"type":"string"},"v1ClusterSyftLogStatus":{"description":"Cluster compliance scan Syft Log Status","properties":{"actor":{"$ref":"#/definitions/v1ClusterFeatureActor"},"location":{"$ref":"#/definitions/v1ObjectEntity"},"message":{"type":"string"},"reports":{"items":{"$ref":"#/definitions/v1SyftReport"},"type":"array"},"requestUid":{"type":"string"},"scanContext":{"$ref":"#/definitions/v1SyftScanContext"},"scanTime":{"$ref":"#/definitions/v1ClusterScanTime"},"state":{"type":"string"}}},"v1ClusterUpgradeSettingsEntity":{"properties":{"spectroComponents":{"enum":["lock","unlock"],"type":"string"}}},"v1ClusterUsageSummary":{"description":"Cluster usage summary","properties":{"cpuCores":{"type":"number","x-omitempty":false},"isAlloy":{"type":"boolean","x-omitempty":false},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1ClusterVirtualMachine":{"description":"VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.","type":"string"},"metadata":{"$ref":"#/definitions/v1VmObjectMeta"},"spec":{"$ref":"#/definitions/v1ClusterVirtualMachineSpec"},"status":{"$ref":"#/definitions/v1ClusterVirtualMachineStatus"}},"required":["spec"]},"v1ClusterVirtualMachineList":{"description":"VirtualMachineList is a list of virtual machines","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.","type":"string"},"items":{"items":{"$ref":"#/definitions/v1ClusterVirtualMachine"},"type":"array"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/v1VmListMeta"}},"required":["items"],"type":"object"},"v1ClusterVirtualMachineSpec":{"description":"VirtualMachineSpec describes how the proper VirtualMachine should look like","properties":{"dataVolumeTemplates":{"description":"dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.","items":{"$ref":"#/definitions/v1VmDataVolumeTemplateSpec"},"type":"array"},"instancetype":{"$ref":"#/definitions/v1VmInstancetypeMatcher"},"preference":{"$ref":"#/definitions/v1VmPreferenceMatcher"},"runStrategy":{"description":"Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running","type":"string"},"running":{"description":"Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy","type":"boolean"},"template":{"$ref":"#/definitions/v1VmVirtualMachineInstanceTemplateSpec"}},"required":["template"],"type":"object"},"v1ClusterVirtualMachineStatus":{"description":"VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing","properties":{"conditions":{"description":"Hold the state information of the VirtualMachine and its VirtualMachineInstance","items":{"$ref":"#/definitions/v1VmVirtualMachineCondition"},"type":"array"},"created":{"description":"Created indicates if the virtual machine is created in the cluster","type":"boolean"},"memoryDumpRequest":{"$ref":"#/definitions/v1VmVirtualMachineMemoryDumpRequest"},"printableStatus":{"description":"PrintableStatus is a human readable, high-level representation of the status of the virtual machine","type":"string"},"ready":{"description":"Ready indicates if the virtual machine is running and ready","type":"boolean"},"restoreInProgress":{"description":"RestoreInProgress is the name of the VirtualMachineRestore currently executing","type":"string"},"snapshotInProgress":{"description":"SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing","type":"string"},"startFailure":{"$ref":"#/definitions/v1VmVirtualMachineStartFailure"},"stateChangeRequests":{"description":"StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.","items":{"$ref":"#/definitions/v1VmVirtualMachineStateChangeRequest"},"type":"array"},"volumeRequests":{"description":"VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.","items":{"$ref":"#/definitions/v1VmVirtualMachineVolumeRequest"},"type":"array","x-kubernetes-list-type":"atomic"},"volumeSnapshotStatuses":{"description":"VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.","items":{"$ref":"#/definitions/v1VmVolumeSnapshotStatus"},"type":"array"}},"type":"object","x-nullable":true},"v1ClusterVirtualPacksValue":{"description":"Virtual cluster packs value","properties":{"distroType":{"type":"string"},"layer":{"type":"string"},"values":{"type":"string"}},"type":"object"},"v1ClusterVirtualPacksValues":{"description":"Virtual cluster packs values","properties":{"packs":{"items":{"$ref":"#/definitions/v1ClusterVirtualPacksValue"},"type":"array"}},"type":"object"},"v1ClusterWorkload":{"description":"Cluster workload summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1ClusterWorkloadSpec"}},"type":"object"},"v1ClusterWorkloadCondition":{"description":"Cluster workload condition","properties":{"lastTransitionTime":{"$ref":"#/definitions/v1Time"},"lastUpdateTime":{"$ref":"#/definitions/v1Time"},"message":{"type":"string"},"reason":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"}},"type":"object"},"v1ClusterWorkloadCronJob":{"description":"Cluster workload cronjob summary","properties":{"metadata":{"$ref":"#/definitions/v1ClusterWorkloadMetadata"},"spec":{"$ref":"#/definitions/v1ClusterWorkloadCronJobSpec"},"status":{"$ref":"#/definitions/v1ClusterWorkloadCronJobStatus"}},"type":"object"},"v1ClusterWorkloadCronJobSpec":{"description":"Cluster workload cronjob spec","properties":{"schedule":{"type":"string"}},"type":"object"},"v1ClusterWorkloadCronJobStatus":{"description":"Cluster workload cronjob status","properties":{"lastScheduleTime":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1ClusterWorkloadCronJobs":{"description":"Cluster workload cronjobs summary","properties":{"cronJobs":{"items":{"$ref":"#/definitions/v1ClusterWorkloadCronJob"},"type":"array"}},"type":"object"},"v1ClusterWorkloadDaemonSet":{"description":"Cluster workload daemonset summary","properties":{"metadata":{"$ref":"#/definitions/v1ClusterWorkloadMetadata"},"status":{"$ref":"#/definitions/v1ClusterWorkloadDaemonSetStatus"}},"type":"object"},"v1ClusterWorkloadDaemonSetStatus":{"description":"Cluster workload daemonset status","properties":{"available":{"format":"int32","type":"integer"},"currentScheduled":{"format":"int32","type":"integer"},"desiredScheduled":{"format":"int32","type":"integer"},"misScheduled":{"format":"int32","type":"integer"},"ready":{"format":"int32","type":"integer"},"updatedScheduled":{"format":"int32","type":"integer"}},"type":"object"},"v1ClusterWorkloadDaemonSets":{"description":"Cluster workload daemonset summary","properties":{"daemonSets":{"items":{"$ref":"#/definitions/v1ClusterWorkloadDaemonSet"},"type":"array"}},"type":"object"},"v1ClusterWorkloadDeployment":{"description":"Cluster workload deployment summary","properties":{"metadata":{"$ref":"#/definitions/v1ClusterWorkloadMetadata"},"status":{"$ref":"#/definitions/v1ClusterWorkloadDeploymentStatus"}},"type":"object"},"v1ClusterWorkloadDeploymentStatus":{"description":"Cluster workload deployment status","properties":{"replicas":{"$ref":"#/definitions/v1ClusterWorkloadReplicaStatus"}},"type":"object"},"v1ClusterWorkloadDeployments":{"description":"Cluster workload deployments summary","properties":{"deployments":{"items":{"$ref":"#/definitions/v1ClusterWorkloadDeployment"},"type":"array"}},"type":"object"},"v1ClusterWorkloadJob":{"description":"Cluster workload job summary","properties":{"metadata":{"$ref":"#/definitions/v1ClusterWorkloadMetadata"},"status":{"$ref":"#/definitions/v1ClusterWorkloadJobStatus"}},"type":"object"},"v1ClusterWorkloadJobStatus":{"description":"Cluster workload job status","properties":{"completionTime":{"$ref":"#/definitions/v1Time"},"conditions":{"items":{"$ref":"#/definitions/v1ClusterWorkloadCondition"},"type":"array"},"startTime":{"$ref":"#/definitions/v1Time"},"succeeded":{"format":"int32","type":"integer"}},"type":"object"},"v1ClusterWorkloadJobs":{"description":"Cluster workload jobs summary","properties":{"jobs":{"items":{"$ref":"#/definitions/v1ClusterWorkloadJob"},"type":"array"}},"type":"object"},"v1ClusterWorkloadMetadata":{"description":"Cluster workload metadata","properties":{"creationTimestamp":{"$ref":"#/definitions/v1Time"},"entity":{"$ref":"#/definitions/v1ClusterWorkloadRef"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"namespace":{"type":"string"}},"type":"object"},"v1ClusterWorkloadNamespace":{"description":"Cluster workload namespace summary","properties":{"metadata":{"$ref":"#/definitions/v1ClusterWorkloadMetadata"},"status":{"$ref":"#/definitions/v1ClusterWorkloadNamespaceStatus"}},"type":"object"},"v1ClusterWorkloadNamespaceStatus":{"description":"Cluster workload namespace status","properties":{"phase":{"type":"string"}},"type":"object"},"v1ClusterWorkloadNamespaces":{"description":"Cluster workload namespaces summary","properties":{"namespaces":{"items":{"$ref":"#/definitions/v1ClusterWorkloadNamespace"},"type":"array"}}},"v1ClusterWorkloadPod":{"description":"Cluster workload pod summary","properties":{"metadata":{"$ref":"#/definitions/v1ClusterWorkloadPodMetadata"},"spec":{"$ref":"#/definitions/v1ClusterWorkloadPodSpec"},"status":{"$ref":"#/definitions/v1ClusterWorkloadPodStatus"}},"type":"object"},"v1ClusterWorkloadPodContainer":{"description":"Cluster workload pod container","properties":{"image":{"type":"string"},"name":{"type":"string"},"resources":{"$ref":"#/definitions/v1ClusterWorkloadPodContainerResources"}},"type":"object"},"v1ClusterWorkloadPodContainerResource":{"description":"Cluster workload pod container resource","properties":{"cpu":{"format":"int32","type":"integer","x-omitempty":false},"cpuUnit":{"type":"string"},"memory":{"format":"int64","type":"integer","x-omitempty":false},"memoryUnit":{"type":"string"}},"type":"object"},"v1ClusterWorkloadPodContainerResources":{"description":"Cluster workload pod container resources","properties":{"limits":{"$ref":"#/definitions/v1ClusterWorkloadPodContainerResource"},"requests":{"$ref":"#/definitions/v1ClusterWorkloadPodContainerResource"}},"type":"object"},"v1ClusterWorkloadPodContainerState":{"description":"Cluster workload pod container state","properties":{"exitCode":{"format":"int32","type":"integer","x-omitempty":false},"finishedAt":{"$ref":"#/definitions/v1Time"},"reason":{"type":"string"},"startedAt":{"$ref":"#/definitions/v1Time"},"state":{"type":"string"}},"type":"object"},"v1ClusterWorkloadPodContainerStatus":{"description":"Cluster workload pod container status","properties":{"image":{"type":"string"},"name":{"type":"string"},"ready":{"type":"boolean","x-omitempty":false},"restartCount":{"format":"int32","type":"integer","x-omitempty":false},"started":{"type":"boolean","x-omitempty":false},"state":{"$ref":"#/definitions/v1ClusterWorkloadPodContainerState"}},"type":"object"},"v1ClusterWorkloadPodMetadata":{"description":"Cluster workload pod metadata","properties":{"associatedRefs":{"items":{"$ref":"#/definitions/v1ClusterWorkloadRef"},"type":"array"},"creationTimestamp":{"$ref":"#/definitions/v1Time"},"entity":{"$ref":"#/definitions/v1ClusterWorkloadRef"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"machineUid":{"type":"string"},"namespace":{"type":"string"},"nodename":{"type":"string"}},"type":"object"},"v1ClusterWorkloadPodSpec":{"description":"Cluster workload pod spec","properties":{"containers":{"items":{"$ref":"#/definitions/v1ClusterWorkloadPodContainer"},"type":"array"},"volumes":{"items":{"$ref":"#/definitions/v1ClusterWorkloadPodVolume"},"type":"array"}},"type":"object"},"v1ClusterWorkloadPodStatus":{"description":"Cluster workload pod status","properties":{"containers":{"items":{"$ref":"#/definitions/v1ClusterWorkloadPodContainerStatus"},"type":"array"},"phase":{"type":"string"},"podIp":{"type":"string"},"qosClass":{"type":"string"}},"type":"object"},"v1ClusterWorkloadPodVolume":{"description":"Cluster workload pod volume","properties":{"name":{"type":"string"}},"type":"object"},"v1ClusterWorkloadPods":{"description":"Cluster workload pods summary","properties":{"pods":{"items":{"$ref":"#/definitions/v1ClusterWorkloadPod"},"type":"array"}}},"v1ClusterWorkloadRef":{"description":"Cluster workload ref","properties":{"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1ClusterWorkloadReplicaStatus":{"description":"Cluster workload replica status","properties":{"available":{"format":"int32","type":"integer","x-omitempty":false},"ready":{"format":"int32","type":"integer","x-omitempty":false},"total":{"format":"int32","type":"integer","x-omitempty":false},"updated":{"format":"int32","type":"integer","x-omitempty":false}},"type":"object"},"v1ClusterWorkloadRoleBinding":{"description":"Cluster workload rbac binding summary","properties":{"metadata":{"$ref":"#/definitions/v1ClusterWorkloadMetadata"},"spec":{"$ref":"#/definitions/v1ClusterRbacBinding"}},"type":"object"},"v1ClusterWorkloadRoleBindings":{"description":"Cluster workload rbac bindings summary","properties":{"bindings":{"items":{"$ref":"#/definitions/v1ClusterWorkloadRoleBinding"},"type":"array"}},"type":"object"},"v1ClusterWorkloadSpec":{"description":"Cluster workload spec","properties":{"clusterroleBindings":{"items":{"$ref":"#/definitions/v1ClusterWorkloadRoleBinding"},"type":"array"},"cronJobs":{"items":{"$ref":"#/definitions/v1ClusterWorkloadCronJob"},"type":"array"},"daemonSets":{"items":{"$ref":"#/definitions/v1ClusterWorkloadDaemonSet"},"type":"array"},"deployments":{"items":{"$ref":"#/definitions/v1ClusterWorkloadDeployment"},"type":"array"},"jobs":{"items":{"$ref":"#/definitions/v1ClusterWorkloadJob"},"type":"array"},"pods":{"items":{"$ref":"#/definitions/v1ClusterWorkloadPod"},"type":"array"},"roleBindings":{"items":{"$ref":"#/definitions/v1ClusterWorkloadRoleBinding"},"type":"array"},"statefulSets":{"items":{"$ref":"#/definitions/v1ClusterWorkloadStatefulSet"},"type":"array"}},"type":"object"},"v1ClusterWorkloadStatefulSet":{"description":"Cluster workload statefulset summary","properties":{"metadata":{"$ref":"#/definitions/v1ClusterWorkloadMetadata"},"status":{"$ref":"#/definitions/v1ClusterWorkloadStatefulSetStatus"}},"type":"object"},"v1ClusterWorkloadStatefulSetStatus":{"description":"Cluster workload statefulset status","properties":{"replicas":{"$ref":"#/definitions/v1ClusterWorkloadReplicaStatus"}},"type":"object"},"v1ClusterWorkloadStatefulSets":{"description":"Cluster workload statefulsets summary","properties":{"statefulSets":{"items":{"$ref":"#/definitions/v1ClusterWorkloadStatefulSet"},"type":"array"}},"type":"object"},"v1ClusterWorkloadsFilter":{"description":"Cluster workloads filter","properties":{"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1ClusterWorkloadsSpec":{"description":"Cluster workloads spec","properties":{"filter":{"$ref":"#/definitions/v1ClusterWorkloadsFilter"}},"type":"object"},"v1ClustersInfo":{"description":"Active clusters information","properties":{"clustersMeta":{"items":{"$ref":"#/definitions/v1ClusterMeta"},"type":"array","uniqueItems":true},"totalActiveClusters":{"format":"int64","type":"number"},"totalActiveGreenFieldClusters":{"format":"int64","type":"number"},"totalActiveImportedClusters":{"format":"int64","type":"number"},"totalClustersDeleted":{"format":"int64","type":"number"},"totalClustersDeployed":{"format":"int64","type":"number"}},"type":"object"},"v1ComplianceScanConfig":{"description":"Compliance Scan config","properties":{"schedule":{"$ref":"#/definitions/v1ClusterFeatureSchedule"}}},"v1ComplianceScanDriverSpec":{"description":"Compliance Scan driver spec","properties":{"config":{"$ref":"#/definitions/v1ComplianceScanConfig"},"isClusterConfig":{"type":"boolean"}}},"v1ComputeMetrics":{"description":"Compute metrics","properties":{"lastUpdatedTime":{"$ref":"#/definitions/v1Time"},"limit":{"type":"number","x-omitempty":false},"request":{"type":"number","x-omitempty":false},"total":{"type":"number","x-omitempty":false},"unit":{"type":"string"},"usage":{"type":"number","x-omitempty":false}},"type":"object"},"v1ComputeRate":{"description":"Compute estimated rate information","properties":{"rate":{"format":"float64","type":"number","x-omitempty":false},"type":{"type":"string"}},"type":"object"},"v1ConfigReverseProxy":{"description":"Describes the reverse proxy configuration","properties":{"caCert":{"description":"Describes the ca certificate for system's reverse proxy","type":"string"},"clientCert":{"description":"Describes the client certificate for system's reverse proxy","type":"string"},"clientKey":{"description":"Describes the client certificate key for system's reverse proxy","type":"string"},"port":{"description":"Describes the system's reverse proxy server port","type":"integer"},"protocol":{"description":"Describes the system's reverse proxy server protocol. Possible values [https, http]","enum":["http","https"],"type":"string"},"server":{"description":"Describes the system's reverse proxy server","type":"string"}}},"v1ConstraintError":{"properties":{"code":{"type":"string"},"message":{"type":"string"}},"type":"object"},"v1ConstraintValidatorResponse":{"description":"Constraint validator response","properties":{"results":{"items":{"$ref":"#/definitions/v1ConstraintValidatorResult"},"type":"array","uniqueItems":true}},"type":"object"},"v1ConstraintValidatorResult":{"description":"Constraint validator result","properties":{"displayName":{"type":"string"},"errors":{"items":{"$ref":"#/definitions/v1ConstraintError"},"type":"array","uniqueItems":true},"name":{"type":"string"}},"type":"object"},"v1ControlPlaneEndPoint":{"properties":{"ddnsSearchDomain":{"description":"DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required","type":"string"},"host":{"description":"IP or FQDN(External/DDNS)","type":"string"},"type":{"description":"VIP or External","enum":["VIP","External","DDNS"],"type":"string"}},"type":"object"},"v1ControlPlaneHealthCheckTimeoutEntity":{"properties":{"controlPlaneHealthCheckTimeout":{"description":"ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes","type":"string"}},"type":"object"},"v1CoxEdgeAccount":{"description":"CoxEdge cloud account information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the account.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1CoxEdgeCloudAccount"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1CoxEdgeAccounts":{"properties":{"items":{"items":{"$ref":"#/definitions/v1CoxEdgeAccount"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1CoxEdgeBaseUrls":{"description":"List of CoxEdge base urls","properties":{"baseUrls":{"items":{"type":"string"},"type":"array"}},"required":["baseUrls"],"type":"object"},"v1CoxEdgeCloudAccount":{"description":"CoxEdge cloud account","properties":{"apiBaseUrl":{"description":"The base url - used to make api calls","type":"string"},"apiKey":{"description":"CoxEdge cloud account ApiKey","type":"string"},"environment":{"description":"The environment belonging to the organization","type":"string"},"organizationId":{"description":"The Id of organization","type":"string"},"service":{"description":"The service for which the organization is allowed to provision resources","type":"string"}},"required":["apiBaseUrl","apiKey"],"type":"object"},"v1CoxEdgeCloudClusterConfigEntity":{"description":"CoxEdge cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1CoxEdgeClusterConfig"}},"type":"object"},"v1CoxEdgeCloudConfig":{"description":"CoxEdgeCloudConfig is the Schema for the coxedgecloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1CoxEdgeCloudConfigSpec"},"status":{"$ref":"#/definitions/v1CoxEdgeCloudConfigStatus"}},"type":"object"},"v1CoxEdgeCloudConfigSpec":{"description":"CoxEdgeCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"cloudAccountRef should point to the secret which contains GcpCloudAccount"},"clusterConfig":{"$ref":"#/definitions/v1CoxEdgeClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1CoxEdgeMachinePoolConfig"},"type":"array"}},"type":"object"},"v1CoxEdgeCloudConfigStatus":{"description":"CoxEdgeCloudConfigStatus defines the observed state of CoxEdgeCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool","properties":{"conditions":{"description":"spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`","items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"imageID":{"description":"For mold controller to identify if is there any changes in Pack","type":"string"}},"type":"object"},"v1CoxEdgeClusterConfig":{"description":"Cluster level configuration for coxedge cloud and applicable for all the machine pools","properties":{"coxEdgeLoadBalancerConfig":{"$ref":"#/definitions/v1CoxEdgeLoadBalancerConfig"},"coxEdgeWorkerLoadBalancerConfig":{"$ref":"#/definitions/v1CoxEdgeLoadBalancerConfig"},"environment":{"type":"string"},"organizationId":{"type":"string"},"sshAuthorizedKeys":{"description":"CoxEdge ssh authorized keys","items":{"type":"string"},"type":"array"}},"required":["sshAuthorizedKeys","coxEdgeLoadBalancerConfig"],"type":"object"},"v1CoxEdgeCredentials":{"description":"CoxEdge credentials to get organizations","properties":{"apiBaseUrl":{"description":"CoxEdge baseUrl - for api calls","type":"string"},"apiKey":{"description":"CoxEdge ApiKey - secret for api calls","type":"string"}},"type":"object"},"v1CoxEdgeDeployment":{"properties":{"cpuUtilization":{"format":"int32","type":"integer"},"enableAutoScaling":{"type":"boolean"},"instancesPerPop":{"format":"int32","type":"integer"},"maxInstancesPerPop":{"format":"int32","type":"integer"},"minInstancesPerPop":{"format":"int32","type":"integer"},"name":{"type":"string"},"pops":{"items":{"type":"string"},"type":"array"}}},"v1CoxEdgeEnvironment":{"description":"CoxEdge environment entity","properties":{"id":{"description":"CoxEdge environment id","type":"string"},"isDeleted":{"description":"CoxEdge environment state","type":"boolean"},"name":{"description":"CoxEdge environment name","type":"string"}},"type":"object"},"v1CoxEdgeEnvironments":{"description":"List of CoxEdge environments","properties":{"environments":{"items":{"$ref":"#/definitions/v1CoxEdgeEnvironment"},"type":"array"}},"required":["environments"],"type":"object"},"v1CoxEdgeEnvironmentsRequest":{"description":"Request payload to get CoxEdge environments","properties":{"credentials":{"$ref":"#/definitions/v1CoxEdgeCredentials"},"organizationId":{"description":"CoxEdge organizationId","type":"string"}},"type":"object"},"v1CoxEdgeInstanceTypes":{"description":"List of CoxEdge instance types","properties":{"instanceTypes":{"items":{"$ref":"#/definitions/v1InstanceType"},"type":"array"}},"type":"object"},"v1CoxEdgeLoadBalancerConfig":{"description":"CoxEdge loadbalancer config","properties":{"pops":{"description":"CoxEdge PoPs - geographical location for the loadbalancer","items":{"type":"string"},"type":"array"}},"type":"object"},"v1CoxEdgeLoadPersistentStorage":{"description":"CoxEdge load persistent storage","properties":{"path":{"description":"Coxedge load persistent storage path","type":"string"},"size":{"description":"Coxedge load persistent storage size","format":"int64","type":"integer"}},"type":"object"},"v1CoxEdgeMachine":{"description":"CoxEdge cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1CoxEdgeMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1CoxEdgeMachinePoolCloudConfigEntity":{"properties":{"deployments":{"items":{"$ref":"#/definitions/v1CoxEdgeDeployment"},"type":"array"},"persistentStorages":{"description":"Array of coxedge load persistent storages","items":{"$ref":"#/definitions/v1CoxEdgeLoadPersistentStorage"},"type":"array","uniqueItems":true},"securityGroupRules":{"items":{"$ref":"#/definitions/v1CoxEdgeSecurityGroupRule"},"type":"array"},"spec":{"type":"string"}},"type":"object"},"v1CoxEdgeMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"deployments":{"items":{"$ref":"#/definitions/v1CoxEdgeDeployment"},"type":"array"},"instanceConfig":{"$ref":"#/definitions/v1InstanceConfig"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean"},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"persistentStorages":{"description":"Array of coxedge load persistent storages","items":{"$ref":"#/definitions/v1CoxEdgeLoadPersistentStorage"},"type":"array","uniqueItems":true},"securityGroupRules":{"items":{"$ref":"#/definitions/v1CoxEdgeSecurityGroupRule"},"type":"array"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"spec":{"type":"string"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean"}},"required":["isControlPlane"],"type":"object"},"v1CoxEdgeMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1CoxEdgeMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"required":["cloudConfig"],"type":"object"},"v1CoxEdgeMachineSpec":{"description":"CoxEdge cloud VM definition spec","properties":{"addAnycastIpAddress":{"type":"boolean"},"deployments":{"items":{"$ref":"#/definitions/v1CoxEdgeDeployment"},"type":"array"},"image":{"type":"string"},"persistentStorages":{"items":{"$ref":"#/definitions/v1CoxEdgeLoadPersistentStorage"},"type":"array"},"ports":{"items":{"$ref":"#/definitions/v1CoxEdgePort"},"type":"array"},"providerId":{"type":"string"},"specs":{"type":"string"},"sshAuthorizedKeys":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1CoxEdgeMachines":{"description":"CoxEdge machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1CoxEdgeMachine"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1CoxEdgeOrganization":{"description":"CoxEdge Organization entity","properties":{"id":{"description":"CoxEdge organization id","type":"string"},"isDeleted":{"description":"CoxEdge organization state","type":"boolean"},"name":{"description":"CoxEdge organization name","type":"string"}},"type":"object"},"v1CoxEdgeOrganizations":{"description":"List of CoxEdge organizations","properties":{"organizations":{"items":{"$ref":"#/definitions/v1CoxEdgeOrganization"},"type":"array"}},"required":["organizations"],"type":"object"},"v1CoxEdgePort":{"description":"CoxEdge network port","properties":{"protocol":{"type":"string"},"publicPort":{"type":"string"},"publicPortDesc":{"type":"string"}},"type":"object"},"v1CoxEdgeRegion":{"description":"CoxEdge region entity","properties":{"code":{"description":"Code of the CoxEdge region","type":"string"},"location":{"$ref":"#/definitions/v1ClusterLocation"},"name":{"description":"Name of the CoxEdge region","type":"string"}},"type":"object"},"v1CoxEdgeRegions":{"description":"List of CoxEdge regions","properties":{"regions":{"items":{"$ref":"#/definitions/v1CoxEdgeRegion"},"type":"array"}},"required":["regions"],"type":"object"},"v1CoxEdgeSecurityGroupRule":{"properties":{"action":{"enum":["block","allow"],"type":"string"},"description":{"type":"string"},"portRange":{"type":"string"},"protocol":{"enum":["TCP","UDP","TCP_UDP","ESP","AH","ICMP","GRE"],"type":"string"},"source":{"type":"string"},"type":{"type":"string"}}},"v1CoxEdgeService":{"description":"CoxEdge service entity","properties":{"code":{"description":"CoxEdge service code","type":"string"},"id":{"description":"CoxEdge service id","type":"string"},"name":{"description":"CoxEdge service name","type":"string"}},"type":"object"},"v1CoxEdgeServices":{"description":"List of CoxEdge services","properties":{"services":{"items":{"$ref":"#/definitions/v1CoxEdgeService"},"type":"array"}},"required":["services"],"type":"object"},"v1CustomAccount":{"description":"Custom account information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the account.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1CustomCloudAccount"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1CustomAccountEntity":{"description":"Custom account information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1CustomCloudAccount"}},"type":"object"},"v1CustomAccounts":{"properties":{"items":{"items":{"$ref":"#/definitions/v1CustomAccount"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1CustomCloudAccount":{"properties":{"credentials":{"additionalProperties":{"type":"string"},"description":"Cloud account credentials","type":"object"}},"required":["credentials"],"type":"object"},"v1CustomCloudClusterConfigEntity":{"description":"Custom cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1CustomClusterConfig"}},"type":"object"},"v1CustomCloudConfig":{"description":"CustomCloudConfig is the Schema for the custom cloudconfigs API","properties":{"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1CustomCloudConfigSpec"}},"type":"object"},"v1CustomCloudConfigSpec":{"description":"CustomCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"cloudAccountRef should point to the secret which contains CustomCloudAccount"},"clusterConfig":{"$ref":"#/definitions/v1CustomClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1CustomMachinePoolConfig"},"type":"array"}},"type":"object"},"v1CustomCloudMetaEntity":{"description":"Custom cloud meta entity","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta","description":"Custom cloud metadata"},"spec":{"$ref":"#/definitions/v1CustomCloudMetaSpecEntity"}},"type":"object"},"v1CustomCloudMetaSpecEntity":{"description":"Custom cloud spec response entity","properties":{"cloudCategory":{"$ref":"#/definitions/v1CloudCategory"},"displayName":{"description":"Custom cloud displayName","type":"string"},"isManaged":{"description":"If the custom cloud is a managed cluster","type":"boolean"},"logo":{"description":"Custom cloud logo","type":"string"}},"type":"object"},"v1CustomCloudRateConfig":{"description":"Private cloud rate config","properties":{"cloudType":{"type":"string"},"rateConfig":{"$ref":"#/definitions/v1PrivateCloudRateConfig"}}},"v1CustomCloudRequestEntity":{"description":"Custom cloud request entity","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity","description":"Custom cloud metadata"},"spec":{"$ref":"#/definitions/v1CustomCloudSpecEntity"}},"type":"object"},"v1CustomCloudSpecEntity":{"description":"Custom cloud request entity spec","properties":{"cloudCategory":{"$ref":"#/definitions/v1CloudCategory"},"displayName":{"description":"Custom cloud displayName","type":"string"},"isControlPlaneManaged":{"description":"If the custom cloud is a managed cluster","type":"boolean"},"logo":{"description":"Custom cloud logo","type":"string"}},"type":"object"},"v1CustomCloudType":{"properties":{"cloudCategory":{"$ref":"#/definitions/v1CloudCategory"},"cloudFamily":{"description":"Cloud grouping as family","type":"string"},"displayName":{"description":"Custom cloudtype displayName","type":"string"},"isCustom":{"description":"If it is a custom cloudtype","type":"boolean","x-omitempty":false},"isManaged":{"description":"If custom cloudtype is managed","type":"boolean","x-omitempty":false},"isVertex":{"description":"If cloud is support for Vertex env","type":"boolean","x-omitempty":false},"logo":{"description":"Custom cloudtype logo","type":"string"},"name":{"description":"Custom cloudtype name","type":"string"}},"type":"object"},"v1CustomCloudTypeCloudAccountKeys":{"description":"Custom cloudType custom cloud account keys","properties":{"keys":{"description":"Array of custom cloud type cloud account keys","items":{"type":"string"},"type":"array"}},"type":"object"},"v1CustomCloudTypeContentResponse":{"description":"Custom cloudType content response","properties":{"yaml":{"description":"custom cloud type content","type":"string"}},"type":"object"},"v1CustomCloudTypes":{"description":"Custom cloudType content response","properties":{"cloudTypes":{"description":"Array of custom cloud types","items":{"$ref":"#/definitions/v1CustomCloudType"},"type":"array"}},"type":"object"},"v1CustomClusterConfig":{"description":"Cluster level configuration for Custom cloud and applicable for all the machine pools","properties":{"values":{"description":"YAML string for Cluster and CloudCluster","type":"string"}},"required":["values"],"type":"object"},"v1CustomClusterConfigEntity":{"properties":{"location":{"$ref":"#/definitions/v1ClusterLocation"},"machineManagementConfig":{"$ref":"#/definitions/v1MachineManagementConfig"},"resources":{"$ref":"#/definitions/v1ClusterResourcesEntity"}},"type":"object"},"v1CustomInstanceType":{"properties":{"diskGiB":{"description":"DiskGiB is the size of a custom machine's disk, in GiB","format":"int32","type":"integer"},"memoryMiB":{"description":"MemoryMiB is the size of a custom machine's memory, in MiB","format":"int64","type":"integer"},"name":{"type":"string"},"numCPUs":{"description":"NumCPUs is the number in a custom machine","format":"int32","type":"integer"}},"type":"object"},"v1CustomMachine":{"description":"Custom cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1CustomMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1CustomMachinePoolBaseConfigEntity":{"description":"Machine pool configuration for the custom cluster","properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"Additional labels to be part of the machine pool","type":"object"},"isControlPlane":{"description":"Whether this pool is for control plane","type":"boolean","x-omitempty":false},"taints":{"description":"Master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"useControlPlaneAsWorker":{"description":"If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean","x-omitempty":false}},"type":"object"},"v1CustomMachinePoolCloudConfigEntity":{"properties":{"values":{"description":"Machine pool configuration as yaml content","type":"string"}},"type":"object"},"v1CustomMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean","x-omitempty":false},"name":{"type":"string"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean","x-omitempty":false},"values":{"description":"YAML string for machine","type":"string"}},"required":["isControlPlane"],"type":"object"},"v1CustomMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1CustomMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1CustomMachinePoolBaseConfigEntity"}},"required":["cloudConfig"],"type":"object"},"v1CustomMachineSpec":{"description":"Custom cloud VM definition spec","properties":{"cloudType":{"type":"string"},"hostName":{"type":"string"},"imageId":{"type":"string"},"instanceType":{"$ref":"#/definitions/v1CustomInstanceType"},"nics":{"items":{"$ref":"#/definitions/v1CustomNic"},"type":"array"},"sshKeyName":{"type":"string"}}},"v1CustomMachines":{"description":"List of Custom machines","properties":{"items":{"items":{"$ref":"#/definitions/v1CustomMachine"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1CustomNic":{"description":"Custom network interface","properties":{"index":{"format":"int8","type":"integer"},"networkName":{"type":"string"},"privateIPs":{"items":{"type":"string"},"type":"array"},"publicIp":{"type":"string"}},"type":"object"},"v1DashboardWorkspace":{"description":"Workspace information","properties":{"meta":{"$ref":"#/definitions/v1DashboardWorkspaceMeta"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1DashboardWorkspaceSpec"},"status":{"$ref":"#/definitions/v1DashboardWorkspaceStatus"}}},"v1DashboardWorkspaceAllocation":{"description":"Workspace allocation","properties":{"cpu":{"$ref":"#/definitions/v1DashboardWorkspaceResourceAllocation"},"memory":{"$ref":"#/definitions/v1DashboardWorkspaceResourceAllocation"}}},"v1DashboardWorkspaceClusterRef":{"description":"Workspace cluster reference","properties":{"name":{"type":"string"},"uid":{"type":"string"}}},"v1DashboardWorkspaceMeta":{"description":"Deprecated. Workspace meta data","properties":{"clusterNames":{"description":"Deprecated. Use clusterRefs","items":{"type":"string"},"type":"array","uniqueItems":true},"clusterRefs":{"items":{"$ref":"#/definitions/v1DashboardWorkspaceClusterRef"},"type":"array","uniqueItems":true},"creationTime":{"$ref":"#/definitions/v1Time"},"name":{"type":"string"},"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true},"uid":{"type":"string"}}},"v1DashboardWorkspaceNamespaceAllocation":{"description":"Workspace namespace allocation","properties":{"name":{"type":"string"},"total":{"$ref":"#/definitions/v1DashboardWorkspaceAllocation"}}},"v1DashboardWorkspaceQuota":{"description":"Workspace resource quota","properties":{"resourceAllocation":{"$ref":"#/definitions/v1DashboardWorkspaceQuotaResourceAllocation"}}},"v1DashboardWorkspaceQuotaResourceAllocation":{"description":"Workspace quota resource allocation","properties":{"cpu":{"exclusiveMinimum":true,"minimum":0,"type":"number"},"memory":{"exclusiveMinimum":true,"minimum":0,"type":"number"}}},"v1DashboardWorkspaceResourceAllocation":{"description":"Workspace resource allocation","properties":{"allocated":{"format":"float64","type":"number","x-omitempty":false},"usage":{"format":"float64","type":"number","x-omitempty":false}}},"v1DashboardWorkspaceSpec":{"description":"Workspace spec summary","properties":{"clusterRefs":{"items":{"$ref":"#/definitions/v1DashboardWorkspaceClusterRef"},"type":"array","uniqueItems":true},"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true},"quota":{"$ref":"#/definitions/v1DashboardWorkspaceQuota"}}},"v1DashboardWorkspaceStatus":{"description":"Workspace status","properties":{"namespaces":{"items":{"$ref":"#/definitions/v1DashboardWorkspaceNamespaceAllocation"},"type":"array","uniqueItems":true},"total":{"$ref":"#/definitions/v1DashboardWorkspaceAllocation"}}},"v1DashboardWorkspaces":{"properties":{"cpuUnit":{"type":"string"},"items":{"items":{"$ref":"#/definitions/v1DashboardWorkspace"},"type":"array","uniqueItems":true},"memoryUnit":{"type":"string"}},"required":["items"],"type":"object"},"v1DataSinkConfig":{"description":"Data sink","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1DataSinkSpec"}},"type":"object"},"v1DataSinkSpec":{"properties":{"auditDataSinks":{"items":{"$ref":"#/definitions/v1DataSinkableSpec"},"type":"array","uniqueItems":true}},"type":"object"},"v1DataSinkableSpec":{"properties":{"cloudWatch":{"$ref":"#/definitions/v1CloudWatch"},"type":{"enum":["cloudwatch"],"type":"string"}},"type":"object"},"v1DatabaseTransferJob":{"description":"database transfer job details","properties":{"backupStatus":{"$ref":"#/definitions/v1TransferJob"},"backupUid":{"type":"string"},"mode":{"enum":["FileSystem","Ftp"],"type":"string"}},"type":"object"},"v1DatabaseTransferStatus":{"description":"database transfer status","properties":{"backups":{"items":{"$ref":"#/definitions/v1DatabaseTransferJob"},"type":"array"},"isActive":{"type":"boolean"}},"type":"object"},"v1DeleteMeta":{"description":"Properties to send back after deletion operation","properties":{"count":{"format":"int64","type":"integer"},"items":{"additionalProperties":{"type":"string"},"type":"object"}}},"v1DeletedMsg":{"description":"Deleted response with message","properties":{"msg":{"type":"string"}}},"v1DeveloperCredit":{"description":"Credits allocated for each tenant/user","properties":{"cpu":{"description":"cpu in cores","format":"int32","type":"number","x-omitempty":false},"memoryGiB":{"description":"memory in GiB","format":"int32","type":"number","x-omitempty":false},"storageGiB":{"description":"storage in GiB","format":"int32","type":"integer","x-omitempty":false},"virtualClustersLimit":{"description":"number of active virtual clusters","format":"int32","type":"number","x-omitempty":false}}},"v1DeviceSpec":{"description":"DeviceSpec defines the desired state of Device","properties":{"archType":{"default":"amd64","description":"Architecture type of the edge host","enum":["arm64","amd64"],"type":"string"},"cpu":{"$ref":"#/definitions/v1CPU"},"disks":{"items":{"$ref":"#/definitions/v1Disk"},"type":"array"},"gpus":{"items":{"$ref":"#/definitions/v1GPUDeviceSpec"},"type":"array"},"memory":{"$ref":"#/definitions/v1Memory"},"nics":{"items":{"$ref":"#/definitions/v1Nic"},"type":"array"},"os":{"$ref":"#/definitions/v1OS"}},"type":"object"},"v1Disk":{"properties":{"controller":{"type":"string"},"partitions":{"items":{"$ref":"#/definitions/v1Partition"},"type":"array"},"size":{"description":"Size in GB","format":"int32","type":"integer"},"vendor":{"type":"string"}},"type":"object"},"v1DomainHost":{"description":"update domain host for application. RootDomain gets dervied from domain host url","properties":{"host":{"type":"string"}},"type":"object"},"v1EcrAuthorizationRequestEntity":{"description":"Ecr registry credentials entity","properties":{"awsCloudAccount":{"$ref":"#/definitions/v1AwsCloudAccount"},"endpoint":{"description":"Endpoint url to make the request","type":"string"},"isPrivate":{"description":"If it is public or private","type":"boolean"},"region":{"description":"Name of the region","type":"string"}},"type":"object"},"v1EcrImageEntity":{"properties":{"name":{"description":"Image name","type":"string"},"tag":{"description":"Image tag","type":"string"}},"type":"object"},"v1EcrImageValidateEntity":{"description":"Ecr registry image meta","properties":{"authEntity":{"$ref":"#/definitions/v1EcrAuthorizationRequestEntity"},"imageTag":{"description":"Name of the image tag","type":"string"},"images":{"description":"Ecr Image Entity","items":{"$ref":"#/definitions/v1EcrImageEntity"},"type":"array"},"repoName":{"description":"Name of the repo","type":"string"}},"type":"object"},"v1EcrRegistry":{"description":"Ecr registry information","properties":{"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EcrRegistrySpec"}},"type":"object"},"v1EcrRegistrySpec":{"description":"Ecr registry spec","properties":{"baseContentPath":{"description":"OCI ecr registry content base path","type":"string"},"credentials":{"$ref":"#/definitions/v1AwsCloudAccount"},"defaultRegion":{"type":"string"},"endpoint":{"type":"string"},"isPrivate":{"type":"boolean"},"providerType":{"default":"helm","enum":["helm","pack"],"type":"string"},"registryUid":{"description":"Ecr registry uid","type":"string"},"scope":{"type":"string"},"tls":{"$ref":"#/definitions/v1TlsConfiguration"}},"required":["endpoint","isPrivate"],"type":"object"},"v1EdgeCloudClusterConfigEntity":{"description":"Edge cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1EdgeClusterConfig"}},"type":"object"},"v1EdgeCloudConfig":{"description":"EdgeCloudConfig is the Schema for the Edgecloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EdgeCloudConfigSpec"},"status":{"$ref":"#/definitions/v1EdgeCloudConfigStatus"}},"type":"object"},"v1EdgeCloudConfigSpec":{"description":"EdgeCloudConfigSpec defines the desired state of EdgeCloudConfig","properties":{"clusterConfig":{"$ref":"#/definitions/v1EdgeClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1EdgeMachinePoolConfig"},"type":"array"}},"required":["clusterConfig","machinePoolConfig"],"type":"object"},"v1EdgeCloudConfigStatus":{"properties":{"conditions":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"nodeImage":{"type":"string"},"sourceImageId":{"description":"SourceImageId can be from packref's annotations or from pack.json","type":"string"},"useCapiImage":{"description":"PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add","type":"boolean"}},"type":"object"},"v1EdgeClusterConfig":{"description":"EdgeClusterConfig defines Edge Cluster specific Spec","properties":{"sshKeys":{"description":"SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user","items":{"type":"string"},"type":"array"}},"type":"object"},"v1EdgeHost":{"description":"EdgeHost is the underlying appliance","properties":{"disableAutoRegister":{"description":"Set to true if auto register is disabled for the device","type":"boolean","x-omitempty":false},"hostAddress":{"description":"HostAddress is a FQDN or IP address of the Host","type":"string"},"hostAuthToken":{"description":"HostAuthToken to authorize auto registration","type":"string","x-omitempty":false},"hostChecksum":{"description":"HostChecksum is the checksum provided by the edge host, to be persisted in SaaS","type":"string","x-omitempty":false},"hostIdentity":{"$ref":"#/definitions/v1EdgeHostIdentity","description":"HostIdentity is the identity to access the edge host"},"hostPairingKey":{"description":"HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS","format":"password","type":"string","x-omitempty":false},"hostUid":{"description":"HostUid is the ID of the EdgeHost","type":"string"},"macAddress":{"description":"Mac address of edgehost","type":"string","x-omitempty":false},"project":{"$ref":"#/definitions/v1ObjectEntity","description":"ProjectUid where the edgehost will be placed during auto registration","x-omitempty":false}},"required":["hostUid","hostAddress"],"type":"object"},"v1EdgeHostCloudProperties":{"description":"Additional cloud properties of the edge host (applicable based on the cloud type)","properties":{"vsphere":{"$ref":"#/definitions/v1EdgeHostVsphereCloudProperties"}},"type":"object"},"v1EdgeHostClusterEntity":{"properties":{"clusterUid":{"type":"string"}},"type":"object"},"v1EdgeHostDevice":{"properties":{"aclmeta":{"$ref":"#/definitions/v1AclMeta"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EdgeHostDeviceSpec"},"status":{"$ref":"#/definitions/v1EdgeHostDeviceStatus"}}},"v1EdgeHostDeviceEntity":{"description":"Edge host device information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectTagsEntity"},"spec":{"$ref":"#/definitions/v1EdgeHostDeviceSpecEntity"}},"type":"object"},"v1EdgeHostDeviceHostCheckSum":{"properties":{"hostCheckSum":{"type":"string"}},"type":"object"},"v1EdgeHostDeviceHostPairingKey":{"properties":{"hostPairingKey":{"format":"password","type":"string"}},"type":"object"},"v1EdgeHostDeviceMetaUpdateEntity":{"description":"Edge host device uid and name","properties":{"metadata":{"$ref":"#/definitions/v1ObjectTagsEntity"}},"type":"object"},"v1EdgeHostDeviceSpec":{"description":"EdgeHostDeviceSpec defines the desired state of EdgeHostDevice","properties":{"cloudProperties":{"$ref":"#/definitions/v1EdgeHostCloudProperties"},"clusterProfileTemplates":{"items":{"$ref":"#/definitions/v1ClusterProfileTemplate"},"type":"array"},"device":{"$ref":"#/definitions/v1DeviceSpec"},"host":{"$ref":"#/definitions/v1EdgeHost"},"properties":{"$ref":"#/definitions/v1EdgeHostProperties"},"service":{"$ref":"#/definitions/v1ServiceSpec"},"type":{"description":"Cloudtype of the provisioned edge host","enum":["libvirt","vsphere","edge-native"],"type":"string"},"version":{"type":"string"}},"type":"object"},"v1EdgeHostDeviceSpecEntity":{"description":"Edge host device spec","properties":{"archType":{"$ref":"#/definitions/v1ArchType"},"hostPairingKey":{"format":"password","type":"string"}},"type":"object"},"v1EdgeHostDeviceStatus":{"description":"EdgeHostDeviceStatus defines the observed state of EdgeHostDevice","properties":{"health":{"$ref":"#/definitions/v1EdgeHostHealth"},"inUseClusters":{"items":{"$ref":"#/definitions/v1ObjectEntity"},"type":"array"},"packs":{"items":{"$ref":"#/definitions/v1ClusterPackStatus"},"type":"array"},"profileStatus":{"$ref":"#/definitions/v1ProfileStatus"},"serviceAuthToken":{"type":"string"},"state":{"enum":["ready","unpaired","in-use"],"type":"string"}},"type":"object"},"v1EdgeHostDevices":{"properties":{"items":{"items":{"$ref":"#/definitions/v1EdgeHostDevice"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1EdgeHostHealth":{"description":"EdgeHostHealth defines the desired health state of EdgeHostDevice","properties":{"agentVersion":{"type":"string"},"message":{"type":"string"},"state":{"enum":["healthy","unhealthy"],"type":"string"}}},"v1EdgeHostIdentity":{"properties":{"caCert":{"description":"CACert is the client CA certificate","type":"string"},"mode":{"description":"Mode indicates a system or session connection to the host","type":"string"},"socketPath":{"description":"SocketPath is an optional path to the socket on the host, if not using defaults","type":"string"},"sshSecret":{"$ref":"#/definitions/v1EdgeHostSSHSecret","description":"SSHSecret to the secret containing ssh-username"}}},"v1EdgeHostMeta":{"properties":{"archType":{"$ref":"#/definitions/v1ArchType"},"edgeHostType":{"enum":["libvirt","edge-native","vsphere"],"type":"string"},"healthState":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1EdgeHostNetwork":{"description":"Network defines the network configuration for a virtual machine","properties":{"networkName":{"description":"NetworkName of the network where this machine will be connected","type":"string"},"networkType":{"description":"NetworkType specifies the type of network","enum":["default","bridge"],"type":"string"}},"required":["networkName","networkType"],"type":"object"},"v1EdgeHostProperties":{"description":"Additional properties of edge host","properties":{"networks":{"items":{"$ref":"#/definitions/v1EdgeHostNetwork"},"type":"array"},"storagePools":{"items":{"$ref":"#/definitions/v1EdgeHostStoragePool"},"type":"array"}}},"v1EdgeHostSSHSecret":{"properties":{"name":{"description":"SSH secret name","type":"string"},"privateKey":{"description":"Private Key to access the host","type":"string"}},"type":"object"},"v1EdgeHostSpecHost":{"description":"Host specifications","properties":{"hostAddress":{"description":"HostAddress is a FQDN or IP address of the Host","type":"string"},"macAddress":{"type":"string"}}},"v1EdgeHostState":{"enum":["ready","unpaired","in-use"],"type":"string"},"v1EdgeHostStoragePool":{"description":"StoragePool is the storage pool for the vm image","properties":{"name":{"type":"string"}}},"v1EdgeHostVsphereCloudProperties":{"description":"Vsphere cloud properties of edge host","properties":{"datacenters":{"items":{"$ref":"#/definitions/v1VsphereCloudDatacenter"},"type":"array"}}},"v1EdgeHostsMeta":{"properties":{"edgeHosts":{"items":{"$ref":"#/definitions/v1EdgeHostMeta"},"type":"array"}},"type":"object"},"v1EdgeHostsMetadata":{"properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EdgeHostsMetadataSpec"},"status":{"$ref":"#/definitions/v1EdgeHostsMetadataStatus"}},"type":"object"},"v1EdgeHostsMetadataFilter":{"description":"Edge host metadata spec","properties":{"filter":{"$ref":"#/definitions/v1EdgeHostsMetadataFilterSpec"},"sort":{"items":{"$ref":"#/definitions/v1EdgeHostsMetadataSortSpec"},"type":"array","uniqueItems":true}}},"v1EdgeHostsMetadataFilterSpec":{"description":"Edge hosts metadata filter spec","properties":{"name":{"$ref":"#/definitions/v1FilterString"},"states":{"items":{"$ref":"#/definitions/v1EdgeHostState"},"type":"array","uniqueItems":true}}},"v1EdgeHostsMetadataSortFields":{"enum":["name","state","creationTimestamp","lastModifiedTimestamp"],"type":"string","x-nullable":true},"v1EdgeHostsMetadataSortSpec":{"properties":{"field":{"$ref":"#/definitions/v1EdgeHostsMetadataSortFields"},"order":{"$ref":"#/definitions/v1SortOrder"}}},"v1EdgeHostsMetadataSpec":{"properties":{"clusterProfileTemplates":{"items":{"$ref":"#/definitions/v1ProfileTemplateSummary"},"type":"array"},"device":{"$ref":"#/definitions/v1DeviceSpec"},"host":{"$ref":"#/definitions/v1EdgeHostSpecHost"},"projectMeta":{"$ref":"#/definitions/v1ProjectMeta"},"type":{"type":"string"}},"type":"object"},"v1EdgeHostsMetadataStatus":{"properties":{"health":{"$ref":"#/definitions/v1EdgeHostHealth"},"inUseClusters":{"items":{"$ref":"#/definitions/v1ObjectEntity"},"type":"array"},"state":{"$ref":"#/definitions/v1EdgeHostState"}},"type":"object"},"v1EdgeHostsMetadataSummary":{"properties":{"items":{"items":{"$ref":"#/definitions/v1EdgeHostsMetadata"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1EdgeHostsSearchSummary":{"properties":{"items":{"items":{"$ref":"#/definitions/v1EdgeHostsMetadata"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1EdgeInstanceType":{"description":"EdgeInstanceType defines the instance configuration for a docker container node","properties":{"memoryInMB":{"description":"MemoryinMB is the memory in megabytes","format":"int32","type":"integer"},"numCPUs":{"description":"NumCPUs is the number of CPUs","format":"int32","type":"integer"}},"required":["numCPUs","memoryInMB"],"type":"object"},"v1EdgeMachine":{"description":"Edge cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EdgeMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1EdgeMachinePoolCloudConfigEntity":{"properties":{"edgeHosts":{"items":{"$ref":"#/definitions/v1EdgeMachinePoolHostEntity"},"type":"array","uniqueItems":true}},"required":["edgeHosts"]},"v1EdgeMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"hosts":{"items":{"$ref":"#/definitions/v1EdgeMachinePoolHost"},"type":"array"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean"},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean"}},"required":["hosts"],"type":"object"},"v1EdgeMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1EdgeMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"type":"object"},"v1EdgeMachinePoolHost":{"description":"EdgeHost of Edge clusters","properties":{"hostAddress":{"description":"HostAddress is a FQDN or IP address of the Host","type":"string"},"hostIdentity":{"$ref":"#/definitions/v1EdgeMachinePoolHostIdentity","description":"HostIdentity is the identity to access the edge host"},"hostName":{"description":"HostName is the name of the EdgeHost","type":"string"},"hostUid":{"description":"HostUid is the ID of the EdgeHost","type":"string"}},"required":["hostUid","hostAddress"],"type":"object"},"v1EdgeMachinePoolHostEntity":{"properties":{"hostUid":{"type":"string"}},"required":["hostUid"]},"v1EdgeMachinePoolHostIdentity":{"properties":{"caCert":{"description":"CACert is the client CA certificate","type":"string"},"socketPath":{"description":"SocketPath is an optional path to the socket on the host, if not using defaults","type":"string"}},"type":"object"},"v1EdgeMachineSpec":{"description":"Edge cloud VM definition spec","properties":{"bootstrapped":{"type":"boolean"},"customImage":{"type":"string"},"edgeHostUid":{"type":"string"},"instanceType":{"$ref":"#/definitions/v1EdgeInstanceType"},"loadBalancerConfigured":{"type":"boolean"},"mounts":{"items":{"$ref":"#/definitions/v1EdgeMount"},"type":"array","uniqueItems":true}},"type":"object"},"v1EdgeMachines":{"description":"Edge machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1EdgeMachine"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1EdgeMount":{"description":"Edge mounts","properties":{"containerPath":{"type":"string"},"hostPath":{"type":"string"},"readonly":{"type":"boolean"}},"type":"object"},"v1EdgeNativeCloudClusterConfigEntity":{"description":"EdgeNative cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1EdgeNativeClusterConfig"}},"type":"object"},"v1EdgeNativeCloudConfig":{"description":"EdgeNativeCloudConfig is the Schema for the edgenativecloudconfigs API","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EdgeNativeCloudConfigSpec"},"status":{"$ref":"#/definitions/v1EdgeNativeCloudConfigStatus"}},"type":"object"},"v1EdgeNativeCloudConfigSpec":{"description":"EdgeNativeCloudConfigSpec defines the desired state of EdgeNativeCloudConfig","properties":{"clusterConfig":{"$ref":"#/definitions/v1EdgeNativeClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1EdgeNativeMachinePoolConfig"},"type":"array"}},"required":["clusterConfig","machinePoolConfig"],"type":"object"},"v1EdgeNativeCloudConfigStatus":{"description":"EdgeNativeCloudConfigStatus defines the observed state of EdgeNativeCloudConfig","properties":{"conditions":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"nodeImage":{"type":"string"},"sourceImageId":{"description":"SourceImageId can be from packref's annotations or from pack.json","type":"string"}},"type":"object"},"v1EdgeNativeClusterConfig":{"description":"EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec","properties":{"controlPlaneEndpoint":{"$ref":"#/definitions/v1EdgeNativeControlPlaneEndPoint","description":"ControlPlaneEndpoint is the control plane endpoint, which can be an IP or FQDN"},"ntpServers":{"description":"NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list","items":{"default":"","type":"string"},"type":"array"},"overlayNetworkConfiguration":{"$ref":"#/definitions/v1EdgeNativeOverlayNetworkConfiguration","description":"OverlayNetworkConfiguration is the configuration for the overlay network"},"sshKeys":{"description":"SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user","items":{"default":"","type":"string"},"type":"array"},"staticIp":{"description":"StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type","type":"boolean"}},"type":"object"},"v1EdgeNativeControlPlaneEndPoint":{"properties":{"ddnsSearchDomain":{"description":"DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required","type":"string"},"host":{"description":"Host is FQDN(DDNS) or IP","type":"string"},"type":{"description":"Type indicates DDNS or VIP","type":"string"}},"type":"object"},"v1EdgeNativeHost":{"description":"EdgeNativeHost is the underlying appliance","properties":{"IsCandidateCaption":{"default":false,"description":"Is Edge host nominated as candidate","type":"boolean","x-omitempty":false},"caCert":{"description":"CACert for TLS connections","type":"string"},"hostAddress":{"default":"","description":"HostAddress is a FQDN or IP address of the Host","type":"string"},"hostName":{"default":"","description":"Qualified name of host","type":"string"},"hostUid":{"default":"","description":"HostUid is the ID of the EdgeHost","type":"string"},"nic":{"$ref":"#/definitions/v1Nic","description":"Edge native nic"},"nicName":{"description":"Deprecated. Edge host nic name","type":"string"},"staticIP":{"description":"Deprecated. Edge host static IP","type":"string"},"twoNodeCandidatePriority":{"description":"Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate","enum":["primary","secondary"],"type":"string"}},"required":["hostUid","hostAddress"],"type":"object"},"v1EdgeNativeInstanceType":{"description":"EdgeNativeInstanceType defines the instance configuration for a docker container node","properties":{"diskGiB":{"description":"DiskGiB is the size of a virtual machine's disk","format":"int32","type":"integer"},"memoryMiB":{"description":"MemoryMiB is the size of a virtual machine's memory, in MiB","format":"int32","type":"integer"},"name":{"description":"Name is the instance name","type":"string"},"numCPUs":{"description":"NumCPUs is the number of CPUs","format":"int32","type":"integer"}},"type":"object"},"v1EdgeNativeMachine":{"description":"EdgeNative cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EdgeNativeMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}}},"v1EdgeNativeMachinePoolCloudConfigEntity":{"properties":{"edgeHosts":{"items":{"$ref":"#/definitions/v1EdgeNativeMachinePoolHostEntity"},"type":"array","uniqueItems":true}},"required":["edgeHosts"]},"v1EdgeNativeMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"default":"","type":"string"},"description":"AdditionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"default":"","type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"hosts":{"items":{"$ref":"#/definitions/v1EdgeNativeHost"},"type":"array"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean"},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"default":"","type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"osType":{"description":"the os type for the pool, must be supported by the provider","type":"string"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array"},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean"}},"required":["hosts"],"type":"object"},"v1EdgeNativeMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1EdgeNativeMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"type":"object"},"v1EdgeNativeMachinePoolHostEntity":{"properties":{"hostName":{"description":"Edge host name","type":"string"},"hostUid":{"description":"Edge host id","type":"string"},"nic":{"$ref":"#/definitions/v1Nic","description":"Edge native nic"},"nicName":{"description":"Deprecated - Edge host nic name","type":"string"},"staticIP":{"description":"Deprecated - Edge host static IP","type":"string"},"twoNodeCandidatePriority":{"description":"Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate","enum":["primary","secondary"],"type":"string"}},"required":["hostUid"]},"v1EdgeNativeMachineSpec":{"description":"EdgeNative cloud VM definition spec","properties":{"edgeHostUid":{"type":"string"},"instanceType":{"$ref":"#/definitions/v1EdgeNativeInstanceType"},"nics":{"items":{"$ref":"#/definitions/v1EdgeNativeNic"},"type":"array","uniqueItems":true}},"type":"object"},"v1EdgeNativeMachines":{"description":"EdgeNative machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1EdgeNativeMachine"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1EdgeNativeNic":{"description":"Generic network interface","properties":{"index":{"format":"int8","type":"integer"},"networkName":{"type":"string"},"privateIPs":{"items":{"type":"string"},"type":"array"},"publicIp":{"type":"string"}},"type":"object"},"v1EdgeNativeOverlayNetworkConfiguration":{"properties":{"cidr":{"description":"CIDR is the CIDR of the overlay network","type":"string"},"enable":{"description":"Enable is a flag to enable overlay network","type":"boolean","x-omitempty":false}},"type":"object"},"v1EdgeNativeTwoNodeCandidateEntity":{"properties":{"primaryEdgeHost":{"type":"string"},"secondaryEdgeHost":{"type":"string"}},"type":"object"},"v1EdgeServiceLogin":{"description":"System service login input","properties":{"authToken":{"description":"authToken helps in two step verification for the authorization.","type":"string"},"edgeHostUid":{"type":"string"},"serviceName":{"type":"string"},"serviceVersion":{"type":"string"},"spectroClusterUid":{"type":"string"},"tenantUid":{"type":"string"}},"type":"object"},"v1EdgeToken":{"description":"Edge token information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EdgeTokenSpec"},"status":{"$ref":"#/definitions/v1EdgeTokenStatus"}},"type":"object"},"v1EdgeTokenActiveState":{"description":"Edge token active state","properties":{"isActive":{"description":"Set to 'true', if the token is active","type":"boolean"}}},"v1EdgeTokenEntity":{"description":"Edge token request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EdgeTokenSpecEntity"}},"type":"object"},"v1EdgeTokenProject":{"description":"Edge token project information","properties":{"name":{"description":"Project name","type":"string"},"uid":{"description":"Project uid","type":"string"}},"type":"object"},"v1EdgeTokenSpec":{"description":"Edge token specification","properties":{"defaultProject":{"$ref":"#/definitions/v1EdgeTokenProject","description":"Default project where the edgehost will be placed on the token authorization"},"expiry":{"$ref":"#/definitions/v1Time","description":"Edge token expiry date"},"token":{"description":"Edge token","type":"string"}},"type":"object"},"v1EdgeTokenSpecEntity":{"description":"Edge token specification","properties":{"defaultProjectUid":{"description":"Default project where the edgehost will be placed on the token authorization","type":"string"},"expiry":{"$ref":"#/definitions/v1Time","description":"Edge token expiry date"}},"type":"object"},"v1EdgeTokenSpecUpdate":{"description":"Edge token spec to be updated","properties":{"defaultProjectUid":{"description":"Default project where the edgehost will be placed on the token authorization","type":"string"},"expiry":{"$ref":"#/definitions/v1Time"}}},"v1EdgeTokenStatus":{"description":"Edge token status","properties":{"isActive":{"description":"Set to 'true', if the token is active","type":"boolean","x-omitempty":false}},"type":"object"},"v1EdgeTokenUpdate":{"description":"Edge token update request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EdgeTokenSpecUpdate"}},"type":"object"},"v1EdgeTokens":{"properties":{"items":{"description":"List of edge tokens","items":{"$ref":"#/definitions/v1EdgeToken"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1EksAddon":{"description":"EksAddon represents a EKS addon","properties":{"conflictResolution":{"description":"ConflictResolution is used to declare what should happen if there are parameter conflicts.","type":"string"},"name":{"description":"Name is the name of the addon","type":"string"},"serviceAccountRoleARN":{"description":"ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account","type":"string"},"version":{"description":"Version is the version of the addon to use","type":"string"}},"required":["name","version"],"type":"object"},"v1EksCloudClusterConfigEntity":{"description":"EKS cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1EksClusterConfig"}},"type":"object"},"v1EksCloudConfig":{"description":"EksCloudConfig is the Schema for the ekscloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1EksCloudConfigSpec"}},"type":"object"},"v1EksCloudConfigSpec":{"description":"EksCloudConfigSpec defines the cloud configuration input by user","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"cloudAccountRef should point to the secret which contains EksCloudAccount"},"clusterConfig":{"$ref":"#/definitions/v1EksClusterConfig"},"fargateProfiles":{"items":{"$ref":"#/definitions/v1FargateProfile"},"type":"array"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1EksMachinePoolConfig"},"type":"array"}},"type":"object"},"v1EksClusterConfig":{"description":"EksClusterConfig defines EKS specific config","properties":{"addons":{"description":"Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters","items":{"$ref":"#/definitions/v1EksAddon"},"type":"array"},"bastionDisabled":{"description":"BastionDisabled is the option to disable bastion node","type":"boolean"},"controlPlaneLoadBalancer":{"description":"ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"","type":"string"},"encryptionConfig":{"$ref":"#/definitions/v1EncryptionConfig","description":"EncryptionConfig specifies the encryption configuration for the cluster"},"endpointAccess":{"$ref":"#/definitions/v1EksClusterConfigEndpointAccess","description":"Endpoints specifies access to this cluster's control plane endpoints"},"region":{"description":"The AWS Region the cluster lives in.","type":"string"},"sshKeyName":{"description":"SSHKeyName specifies which EC2 SSH key can be used to access machines.","type":"string"},"vpcId":{"description":"VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created","type":"string"}},"required":["region"],"type":"object"},"v1EksClusterConfigEndpointAccess":{"description":"EndpointAccess specifies how control plane endpoints are accessible","properties":{"private":{"description":"Private points VPC-internal control plane access to the private endpoint","type":"boolean"},"privateCIDRs":{"description":"PrivateCIDRs specifies which blocks can access the private endpoint","items":{"type":"string"},"type":"array"},"public":{"description":"Public controls whether control plane endpoints are publicly accessible","type":"boolean"},"publicCIDRs":{"description":"PublicCIDRs specifies which blocks can access the public endpoint","items":{"type":"string"},"type":"array"}},"type":"object"},"v1EksFargateProfiles":{"description":"Fargate profiles","properties":{"fargateProfiles":{"items":{"$ref":"#/definitions/v1FargateProfile"},"type":"array"}},"type":"object"},"v1EksMachineCloudConfigEntity":{"properties":{"awsLaunchTemplate":{"$ref":"#/definitions/v1AwsLaunchTemplate"},"azs":{"items":{"type":"string"},"type":"array"},"capacityType":{"default":"on-demand","description":"EC2 instance capacity type","enum":["on-demand","spot"],"type":"string"},"enableAwsLaunchTemplate":{"description":"flag to know if aws launch template is enabled","type":"boolean"},"instanceType":{"description":"instance type","type":"string"},"rootDeviceSize":{"description":"rootDeviceSize in GBs","format":"int64","maximum":2000,"minimum":1,"type":"integer"},"spotMarketOptions":{"$ref":"#/definitions/v1SpotMarketOptions","description":"SpotMarketOptions allows users to configure instances to be run using AWS Spot instances."},"subnets":{"items":{"$ref":"#/definitions/v1EksSubnetEntity"},"type":"array"}}},"v1EksMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"awsLaunchTemplate":{"$ref":"#/definitions/v1AwsLaunchTemplate"},"azs":{"description":"AZs is only used for dynamic placement","items":{"type":"string"},"type":"array"},"capacityType":{"default":"on-demand","description":"EC2 instance capacity type","enum":["on-demand","spot"],"type":"string"},"enableAwsLaunchTemplate":{"description":"flag to know if aws launch template is enabled","type":"boolean"},"instanceConfig":{"$ref":"#/definitions/v1InstanceConfig"},"instanceType":{"description":"instance type","type":"string"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean","x-omitempty":false},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"rootDeviceSize":{"description":"rootDeviceSize in GBs","format":"int64","type":"integer"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"spotMarketOptions":{"$ref":"#/definitions/v1SpotMarketOptions","description":"SpotMarketOptions allows users to configure instances to be run using AWS Spot instances."},"subnetIds":{"additionalProperties":{"type":"string"},"description":"AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment","type":"object"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean","x-omitempty":false}},"required":["isControlPlane"],"type":"object"},"v1EksMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1EksMachineCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}}},"v1EksSubnetEntity":{"properties":{"az":{"type":"string"},"id":{"type":"string"}}},"v1EncryptionConfig":{"description":"EncryptionConfig specifies the encryption configuration for the EKS clsuter.","properties":{"isEnabled":{"description":"Is encryption configuration enabled for the cluster","type":"boolean"},"provider":{"description":"Provider specifies the ARN or alias of the CMK (in AWS KMS)","type":"string"},"resources":{"description":"Resources specifies the resources to be encrypted","items":{"type":"string"},"type":"array"}},"type":"object"},"v1Event":{"description":"Describes the component event details","properties":{"involvedObject":{"$ref":"#/definitions/v1ObjectReference","description":"Describes object involved in event generation","type":"object"},"message":{"description":"Describes message associated with the event","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta","type":"object"},"reason":{"description":"Describes the reason for the event","type":"string"},"relatedObject":{"$ref":"#/definitions/v1EventRelatedObject","description":"Describes object related to the event","type":"object"},"severity":{"description":"Describes the gravitas for the event","type":"string"},"source":{"$ref":"#/definitions/v1EventSource","description":"Describes the origin for the event","type":"object"}},"type":"object"},"v1EventRelatedObject":{"description":"Object for which the event is related","properties":{"kind":{"enum":["spectrocluster","edgehost"],"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1EventSource":{"description":"Describes the origin for the event","properties":{"component":{"description":"Describes the component where event originated","type":"string"},"host":{"description":"Describes the host where event originated","type":"string"}},"type":"object"},"v1Events":{"description":"An array of component events items","properties":{"items":{"description":"Describes a list of returned component events","items":{"$ref":"#/definitions/v1Event"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData","description":"Describes the meta information about the component event lists"}},"required":["items"],"type":"object"},"v1EventsRelatedObjectsEntity":{"properties":{"relatedObjectUids":{"description":"List of uids of the related object","items":{"type":"string"},"type":"array","uniqueItems":true}},"required":["relatedObjectUids"],"type":"object"},"v1FargateProfile":{"description":"FargateProfile defines the desired state of FargateProfile","properties":{"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.","type":"object"},"name":{"description":"name specifies the profile name.","type":"string"},"selectors":{"description":"Selectors specify fargate pod selectors.","items":{"$ref":"#/definitions/v1FargateSelector"},"type":"array"},"subnetIds":{"description":"SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.","items":{"type":"string"},"type":"array"}},"required":["name"],"type":"object"},"v1FargateSelector":{"description":"FargateSelector specifies a selector for pods that should run on this fargate pool","properties":{"labels":{"additionalProperties":{"type":"string"},"description":"Labels specifies which pod labels this selector should match.","type":"object"},"namespace":{"description":"Namespace specifies which namespace this selector should match.","type":"string"}},"required":["namespace"],"type":"object"},"v1FileUploadResponse":{"description":"File upload response","properties":{"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1FilterArray":{"properties":{"beginsWith":{"items":{"type":"string"},"type":"array","x-nullable":true},"eq":{"items":{"type":"string"},"type":"array","x-nullable":true},"ignoreCase":{"default":true,"type":"boolean"},"ne":{"items":{"type":"string"},"type":"array","x-nullable":true}},"type":"object"},"v1FilterIntRange":{"properties":{"eq":{"format":"int32","type":"integer","x-nullable":true},"gt":{"format":"int32","type":"integer","x-nullable":true},"gte":{"format":"int32","type":"integer","x-nullable":true},"lt":{"format":"int32","type":"integer","x-nullable":true},"lte":{"format":"int32","type":"integer","x-nullable":true},"ne":{"format":"int32","type":"integer","x-nullable":true}},"type":"object"},"v1FilterMetadata":{"description":"Filter metadata object","properties":{"filterType":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1FilterNumberRange":{"properties":{"eq":{"type":"number","x-nullable":true},"gt":{"type":"number","x-nullable":true},"gte":{"type":"number","x-nullable":true},"lt":{"type":"number","x-nullable":true},"lte":{"type":"number","x-nullable":true},"ne":{"type":"number","x-nullable":true}},"type":"object"},"v1FilterString":{"properties":{"beginsWith":{"type":"string","x-nullable":true},"contains":{"type":"string","x-nullable":true},"eq":{"type":"string","x-nullable":true},"ignoreCase":{"default":true,"type":"boolean"},"ne":{"type":"string","x-nullable":true}},"type":"object"},"v1FilterSummary":{"description":"Filter summary object","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1FilterSummarySpec"}},"type":"object"},"v1FilterSummarySpec":{"properties":{"filterType":{"type":"string"}}},"v1FilterVersionString":{"properties":{"beginsWith":{"type":"string","x-nullable":true},"eq":{"type":"string","x-nullable":true},"gt":{"type":"string","x-nullable":true},"lt":{"type":"string","x-nullable":true},"ne":{"type":"string","x-nullable":true}},"type":"object"},"v1FiltersMetadata":{"properties":{"items":{"items":{"$ref":"#/definitions/v1FilterMetadata"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1FiltersSummary":{"properties":{"items":{"items":{"$ref":"#/definitions/v1FilterSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1FipsSettings":{"description":"FIPS configuration","properties":{"fipsClusterFeatureConfig":{"$ref":"#/definitions/v1NonFipsConfig"},"fipsClusterImportConfig":{"$ref":"#/definitions/v1NonFipsConfig"},"fipsPackConfig":{"$ref":"#/definitions/v1NonFipsConfig"}}},"v1FreemiumUsage":{"properties":{"usage":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1FreemiumUsageLimit":{"properties":{"activeClusters":{"type":"integer","x-omitempty":false},"overageUsage":{"type":"number","x-omitempty":false},"usage":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1GPUConfig":{"properties":{"addresses":{"additionalProperties":{"type":"string"},"description":"Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n","type":"object"},"deviceModel":{"description":"DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]","type":"string"},"numGPUs":{"description":"NumGPUs is the number of GPUs","format":"int32","type":"integer"},"vendorName":{"description":"VendorName is the GPU vendor, for eg., NVIDIA or AMD","type":"string"}},"type":"object"},"v1GPUDeviceSpec":{"properties":{"addresses":{"additionalProperties":{"type":"string"},"description":"Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n","type":"object"},"model":{"description":"Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]","type":"string"},"vendor":{"description":"Vendor is the GPU vendor, for eg., NVIDIA or AMD","type":"string"}},"type":"object"},"v1GcpAccount":{"description":"GCP account information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the account.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1GcpAccountSpec"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1GcpAccountEntity":{"description":"GCP account information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the account.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1GcpAccountEntitySpec"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1GcpAccountEntitySpec":{"properties":{"jsonCredentials":{"description":"Gcp cloud account json credentials","type":"string"},"jsonCredentialsFileUid":{"description":"Reference of the credentials stored in the file","type":"string"}},"type":"object"},"v1GcpAccountNameValidateSpec":{"description":"Gcp cloud account name validate spec","properties":{"bucketName":{"description":"Bucket name in the GCP","type":"string"},"credentials":{"$ref":"#/definitions/v1GcpAccountValidateSpec"},"projectId":{"description":"ProjectId in the GCP","type":"string"}},"required":["credentials","bucketName"],"type":"object"},"v1GcpAccountSpec":{"properties":{"jsonCredentials":{"description":"Gcp cloud account json credentials","type":"string"},"jsonCredentialsFileName":{"description":"Reference of the credentials stored in the file","type":"string"}},"type":"object"},"v1GcpAccountValidateSpec":{"description":"Gcp cloud account entity which takes json credentials or reference to the file where credentials are stored","properties":{"jsonCredentials":{"description":"Gcp cloud account json credentials","type":"string"},"jsonCredentialsFileUid":{"description":"Reference of the credentials stored in the file","type":"string"}},"type":"object"},"v1GcpAccounts":{"properties":{"items":{"items":{"$ref":"#/definitions/v1GcpAccount"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1GcpCloudAccountValidateEntity":{"description":"Gcp cloud account spec","properties":{"spec":{"$ref":"#/definitions/v1GcpAccountValidateSpec"}},"type":"object"},"v1GcpCloudClusterConfigEntity":{"description":"Gcp cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1GcpClusterConfig"}},"type":"object"},"v1GcpCloudConfig":{"description":"GcpCloudConfig is the Schema for the gcpcloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1GcpCloudConfigSpec"},"status":{"$ref":"#/definitions/v1GcpCloudConfigStatus"}},"type":"object"},"v1GcpCloudConfigSpec":{"description":"GcpCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"cloudAccountRef should point to the secret which contains GcpCloudAccount"},"clusterConfig":{"$ref":"#/definitions/v1GcpClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1GcpMachinePoolConfig"},"type":"array"}},"type":"object"},"v1GcpCloudConfigStatus":{"description":"GcpCloudConfigStatus defines the observed state of GcpCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool","properties":{"ansibleRoleDigest":{"description":"For mold controller to identify if is there any changes in Pack","type":"string"},"conditions":{"description":"spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`","items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"images":{"$ref":"#/definitions/v1GcpImage","description":"Images array items should be 1-to-1 mapping to Spec.MachinePoolConfig"},"isAddonLayer":{"description":"addon layers present in spc","type":"boolean"},"roleDigest":{"additionalProperties":{"type":"string"},"description":"this map will be for ansible roles present in each pack","type":"object"},"sourceImageId":{"description":"sourceImageId, it can be from packref's annotations or from pack.json","type":"string"},"useCapiImage":{"description":"PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add","type":"boolean"}},"type":"object"},"v1GcpClusterConfig":{"description":"Cluster level configuration for gcp cloud and applicable for all the machine pools","properties":{"managedClusterConfig":{"$ref":"#/definitions/v1GcpManagedClusterConfig"},"network":{"description":"NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used","type":"string"},"project":{"description":"Name of the project in which cluster is to be deployed","type":"string"},"region":{"description":"GCP region for the cluster","type":"string"}},"required":["project","region"],"type":"object"},"v1GcpImage":{"description":"Refers to GCP image","properties":{"name":{"type":"string"},"os":{"type":"string"},"region":{"type":"string"},"state":{"type":"string"}},"type":"object"},"v1GcpImageUrlEntity":{"description":"Gcp image url entity","properties":{"imageFamily":{"description":"The name of the image family to which this image belongs","type":"string"},"imageUrl":{"description":"Server-defined URL for the resource","type":"string"},"name":{"description":"Name of the resource","type":"string"}},"type":"object"},"v1GcpInstanceTypes":{"description":"Retrieves a list of GCP instance types","properties":{"instanceTypes":{"description":"List of GCP instance types","items":{"$ref":"#/definitions/v1InstanceType"},"type":"array"}},"type":"object"},"v1GcpMachine":{"description":"GCP cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1GcpMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1GcpMachinePoolCloudConfigEntity":{"properties":{"azs":{"items":{"type":"string"},"type":"array"},"instanceType":{"type":"string"},"rootDeviceSize":{"description":"Size of root volume in GB. Default is 30GB","format":"int64","type":"integer"},"subnet":{"description":"Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used","type":"string"},"subnets":{"items":{"$ref":"#/definitions/v1GcpSubnetEntity"},"type":"array"}},"required":["instanceType"],"type":"object"},"v1GcpMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"azs":{"items":{"type":"string"},"type":"array"},"instanceConfig":{"$ref":"#/definitions/v1InstanceConfig"},"instanceType":{"type":"string"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean"},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"rootDeviceSize":{"description":"Size of root volume in GB. Default is 30GB","format":"int64","type":"integer"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"subnet":{"description":"Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used","type":"string"},"subnetIds":{"additionalProperties":{"type":"string"},"description":"AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment","type":"object"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean"}},"required":["isControlPlane","instanceType"],"type":"object"},"v1GcpMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1GcpMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"required":["cloudConfig"],"type":"object"},"v1GcpMachineSpec":{"description":"GCP cloud VM definition spec","properties":{"image":{"type":"string"},"instanceConfig":{"$ref":"#/definitions/v1InstanceConfig"},"instanceType":{"type":"string"},"nics":{"items":{"$ref":"#/definitions/v1GcpNic"},"type":"array"},"project":{"type":"string"},"region":{"type":"string"},"rootDeviceSize":{"format":"int64","type":"integer"},"zone":{"type":"string"}},"required":["instanceType"],"type":"object"},"v1GcpMachines":{"description":"GCP machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1GcpMachine"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1GcpManagedClusterConfig":{"description":"GCP managed cluster config","properties":{"enableAutoPilot":{"description":"EnableAutopilot indicates whether to enable autopilot for this GKE cluster","type":"boolean"},"location":{"description":"Can be Region or Zone","type":"string"}},"type":"object"},"v1GcpNetwork":{"description":"GCP network enity is a virtual version of a physical network","properties":{"name":{"description":"GCP network name","type":"string"},"subnets":{"description":"List of GCP subnet","items":{"$ref":"#/definitions/v1GcpSubnet"},"type":"array"}},"type":"object"},"v1GcpNetworks":{"description":"List of GCP networks","properties":{"networks":{"items":{"$ref":"#/definitions/v1GcpNetwork"},"type":"array"}},"type":"object"},"v1GcpNic":{"description":"GCP network interface","properties":{"index":{"format":"int8","type":"integer"},"networkName":{"type":"string"},"privateIPs":{"items":{"type":"string"},"type":"array"},"publicIp":{"type":"string"}},"type":"object"},"v1GcpProject":{"description":"GCP project organizes all Google Cloud resources","properties":{"id":{"description":"GCP project id","type":"string"},"name":{"description":"GCP project name","type":"string"}},"type":"object"},"v1GcpProjects":{"description":"List of GCP Projects","properties":{"projects":{"description":"List of GCP Projects","items":{"$ref":"#/definitions/v1GcpProject"},"type":"array"}},"type":"object"},"v1GcpRegion":{"description":"Geographical region made up of zones where you can host your GCP resources","properties":{"name":{"description":"GCP region name","type":"string"},"status":{"description":"GCP region status","type":"string"}},"type":"object"},"v1GcpRegions":{"description":"List of GCP Regions","properties":{"regions":{"items":{"$ref":"#/definitions/v1GcpRegion"},"type":"array"}},"type":"object"},"v1GcpStorageConfig":{"description":"GCP storage config object","properties":{"bucketName":{"description":"GCP storage bucket name","type":"string"},"credentials":{"$ref":"#/definitions/v1.GcpAccountEntitySpec","description":"GCP cloud account credentials"}},"required":["bucketName","credentials"],"type":"object"},"v1GcpStorageTypes":{"description":"List of GCP storage types","properties":{"storageTypes":{"items":{"$ref":"#/definitions/v1StorageType"},"type":"array"}},"type":"object"},"v1GcpSubnet":{"description":"Subnets are regional resources, and have IP address ranges associated with them","properties":{"id":{"description":"GCP subnet id","type":"string"},"name":{"description":"GCP subnet name","type":"string"}},"type":"object"},"v1GcpSubnetEntity":{"properties":{"az":{"type":"string"},"id":{"type":"string"}}},"v1GcpZone":{"description":"A zone is a deployment area for Google Cloud resources within a region","properties":{"name":{"description":"GCP zone name","type":"string"}},"type":"object"},"v1GcpZones":{"description":"List of GCP zones","properties":{"zones":{"items":{"$ref":"#/definitions/v1GcpZone"},"type":"array"}},"type":"object"},"v1GenericCloudClusterConfigEntity":{"description":"Generic cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1GenericClusterConfig"}},"type":"object"},"v1GenericCloudConfig":{"description":"Generic CloudConfig for all cloud types","properties":{"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1GenericCloudConfigSpec"}}},"v1GenericCloudConfigSpec":{"description":"Generic CloudConfig spec for all cloud types","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"Cloud account reference is optional and dynamically handled based on the kind"},"clusterConfig":{"$ref":"#/definitions/v1GenericClusterConfig"},"edgeHostRefs":{"description":"Appliances (Edge Host) uids","items":{"$ref":"#/definitions/v1ObjectReference"},"type":"array"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1GenericMachinePoolConfig"},"type":"array"}},"type":"object"},"v1GenericClusterConfig":{"description":"Generic cluster config","properties":{"instanceType":{"$ref":"#/definitions/v1GenericInstanceType"},"region":{"description":"cluster region information","type":"string"}},"type":"object"},"v1GenericInstanceType":{"properties":{"diskGiB":{"description":"DiskGiB is the size of a virtual machine's disk, in GiB","format":"int32","type":"integer"},"memoryMiB":{"description":"MemoryMiB is the size of a virtual machine's memory, in MiB","format":"int64","type":"integer"},"name":{"type":"string"},"numCPUs":{"description":"NumCPUs is the number of virtual processors in a virtual machine","format":"int32","type":"integer"}},"type":"object"},"v1GenericMachine":{"description":"Generic cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1GenericMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}}},"v1GenericMachinePoolConfig":{"properties":{"instanceType":{"type":"string"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean"},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"name":{"type":"string"},"rootDeviceSize":{"description":"Size of root volume in GB. Default is 30GB","format":"int64","type":"integer"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean"}},"required":["isControlPlane"],"type":"object"},"v1GenericMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1GenericClusterConfig"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}}},"v1GenericMachineSpec":{"description":"Generic cloud VM definition spec","properties":{"hostName":{"type":"string"},"imageId":{"type":"string"},"instanceType":{"$ref":"#/definitions/v1GenericInstanceType"},"nics":{"items":{"$ref":"#/definitions/v1GenericNic"},"type":"array"},"sshKeyName":{"type":"string"}}},"v1GenericMachines":{"description":"Generic machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1GenericMachine"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1GenericNic":{"description":"Generic network interface","properties":{"index":{"format":"int8","type":"integer"},"networkName":{"type":"string"},"privateIPs":{"items":{"type":"string"},"type":"array"},"publicIp":{"type":"string"}},"type":"object"},"v1GeolocationLatlong":{"description":"Geolocation Latlong entity","properties":{"latitude":{"description":"Latitude of a resource","format":"float64","type":"number","x-omitempty":false},"longitude":{"description":"Longitude of a resource","format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1GitRepoFileContent":{"properties":{"content":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"repoName":{"type":"string"},"sha":{"type":"string"}},"type":"object"},"v1GrpcClientMonitoringData":{"properties":{"clientUid":{"type":"string"},"receivedBroadcastCount":{"type":"integer"},"receivedPublishedCount":{"type":"integer"},"sentBroadcastCount":{"type":"integer"},"sentPublishedCount":{"type":"integer"},"subjects":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1GrpcConfiguration":{"description":"Describes the response that contains the grpc configuration to establish connection","properties":{"preferredServer":{"$ref":"#/definitions/v1GrpcEndpoint"},"servers":{"items":{"$ref":"#/definitions/v1GrpcEndpoint"},"type":"array","uniqueItems":true}},"type":"object"},"v1GrpcEndpoint":{"properties":{"endpoint":{"description":"Describes the URL where the client has to connect to the grpc server","type":"string"},"tls":{"description":"Describes the Grpc tls config which client will use to make a request to the grpc server","properties":{"caCert":{"type":"string"},"enabled":{"type":"boolean"},"insecureSkipVerify":{"type":"boolean"}},"type":"object"}},"type":"object"},"v1GrpcServerMonitoringData":{"properties":{"clients":{"additionalProperties":{"$ref":"#/definitions/v1GrpcClientMonitoringData"},"type":"object"},"isError":{"type":"boolean"},"messageLogs":{"items":{"type":"string"},"type":"array"},"subjects":{"additionalProperties":{"$ref":"#/definitions/v1GrpcSubjectMonitoringData"},"type":"object"},"totalClients":{"type":"integer"},"totalSubjects":{"type":"integer"}},"type":"object"},"v1GrpcServersMonitoringData":{"properties":{"servers":{"additionalProperties":{"$ref":"#/definitions/v1GrpcServerMonitoringData"},"type":"object"}},"type":"object"},"v1GrpcSubjectMonitoringData":{"properties":{"broadcastCount":{"type":"integer"},"clients":{"items":{"type":"string"},"type":"array"},"publishedCount":{"type":"integer"},"subject":{"type":"string"}},"type":"object"},"v1HealthCheck":{"properties":{"isHealthy":{"type":"boolean","x-omitempty":false},"message":{"type":"string"},"name":{"type":"string"}},"type":"object"},"v1HealthLocks":{"properties":{"expiredLocks":{"items":{"$ref":"#/definitions/v1Lock"},"type":"array","uniqueItems":true}},"type":"object"},"v1HealthPing":{"properties":{"msg":{"type":"string"}},"type":"object"},"v1HelmChartOption":{"description":"If chart options are provided then the specified chart is validated first and synced immediately. If the specified chart is not found in the specified registry then creation is cancelled.","properties":{"name":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1HelmRegistries":{"properties":{"items":{"items":{"$ref":"#/definitions/v1HelmRegistry"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1HelmRegistriesSummary":{"description":"Helm Registries Summary","properties":{"items":{"items":{"$ref":"#/definitions/v1HelmRegistrySummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1HelmRegistry":{"description":"Helm registry information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Not used for the resource info.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1HelmRegistrySpec"},"status":{"$ref":"#/definitions/v1HelmRegistryStatus"}},"type":"object"},"v1HelmRegistryCreateOption":{"description":"Helm registry create options","properties":{"charts":{"items":{"$ref":"#/definitions/v1HelmChartOption"},"type":"array","uniqueItems":true},"skipSync":{"type":"boolean"}},"type":"object"},"v1HelmRegistryEntity":{"description":"Helm registry information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1HelmRegistrySpecEntity"}},"type":"object"},"v1HelmRegistrySpec":{"description":"Helm registry credentials spec","properties":{"auth":{"$ref":"#/definitions/v1RegistryAuth"},"endpoint":{"type":"string"},"isPrivate":{"type":"boolean","x-omitempty":false},"name":{"type":"string"},"registryUid":{"description":"Helm registry uid","type":"string"},"scope":{"type":"string"}},"required":["endpoint","auth"],"type":"object"},"v1HelmRegistrySpecEntity":{"description":"Helm registry credentials spec","properties":{"auth":{"$ref":"#/definitions/v1RegistryAuth"},"createOption":{"$ref":"#/definitions/v1HelmRegistryCreateOption"},"endpoint":{"type":"string"},"isPrivate":{"type":"boolean"},"name":{"type":"string"},"scope":{"type":"string"}},"required":["endpoint","auth"],"type":"object"},"v1HelmRegistrySpecSummary":{"description":"Helm Registry spec summary","properties":{"endpoint":{"type":"string"},"isPrivate":{"type":"boolean","x-omitempty":false},"scope":{"type":"string"}},"type":"object"},"v1HelmRegistryStatus":{"description":"Status of the helm registry","properties":{"helmSyncStatus":{"$ref":"#/definitions/v1RegistrySyncStatus"}},"type":"object"},"v1HelmRegistryStatusSummary":{"description":"Helm registry status summary","properties":{"sync":{"$ref":"#/definitions/v1RegistrySyncStatus"}}},"v1HelmRegistrySummary":{"description":"Helm Registry summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1HelmRegistrySpecSummary"},"status":{"$ref":"#/definitions/v1HelmRegistryStatusSummary"}},"type":"object"},"v1HostClusterConfig":{"properties":{"clusterEndpoint":{"$ref":"#/definitions/v1HostClusterEndpoint","description":"host cluster configuration"},"clusterGroup":{"$ref":"#/definitions/v1ObjectReference","description":"cluster group reference"},"hostCluster":{"$ref":"#/definitions/v1ObjectReference","description":"host cluster reference"},"isHostCluster":{"default":false,"description":"is enabled as host cluster","type":"boolean","x-omitempty":false}}},"v1HostClusterConfigEntity":{"properties":{"hostClusterConfig":{"$ref":"#/definitions/v1HostClusterConfig"}},"type":"object"},"v1HostClusterConfigResponse":{"properties":{"clusterGroup":{"$ref":"#/definitions/v1ObjectReference","description":"cluster group reference"}}},"v1HostClusterEndpoint":{"properties":{"config":{"$ref":"#/definitions/v1HostClusterEndpointConfig"},"type":{"description":"is enabled as host cluster","enum":["Ingress","LoadBalancer"],"type":"string"}}},"v1HostClusterEndpointConfig":{"properties":{"ingressConfig":{"$ref":"#/definitions/v1IngressConfig"},"loadBalancerConfig":{"$ref":"#/definitions/v1LoadBalancerConfig"}}},"v1HttpPatch":{"properties":{"from":{"description":"A path to the pointer from which reference will be taken","type":"string"},"op":{"description":"The operation to be performed","enum":["add","remove","replace","move","copy"],"type":"string"},"path":{"description":"A path to the pointer on which operation will be done","type":"string"},"value":{"description":"The value to be used within the operations.","type":"object"}},"required":["op","path"],"type":"object"},"v1HubbleInfo":{"properties":{"apiEndpoint":{"type":"string"},"apiPort":{"type":"string"},"natsEndpoint":{"type":"string"},"uiEndpoint":{"type":"string"},"uiPort":{"type":"string"}},"type":"object"},"v1IPPool":{"description":"IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools","properties":{"gateway":{"description":"Gateway is the gateway ip address","type":"string"},"nameserver":{"$ref":"#/definitions/v1Nameserver","description":"Nameserver provide information for dns resolvation"},"pools":{"description":"Pools contains the list of IP addresses pools","items":{"$ref":"#/definitions/v1Pool"},"type":"array"},"prefix":{"description":"Prefix is the mask of the network as integer (max 128)","format":"int32","type":"integer"},"uid":{"description":"UID is the UID of this IPPool, used by Hubble","type":"string"}},"type":"object"},"v1IdentityProvider":{"description":"Describes a predefined Identity Provider (IDP)","properties":{"id":{"type":"string"},"name":{"type":"string"}},"type":"object"},"v1IdentityProviders":{"description":"Describes a list of predefined Identity Provider (IDP)","items":{"$ref":"#/definitions/v1IdentityProvider"},"type":"array","uniqueItems":true},"v1ImportClusterConfig":{"properties":{"importMode":{"description":"If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.","enum":["read-only"],"type":"string"},"proxy":{"$ref":"#/definitions/v1ClusterProxySpec","description":"Cluster proxy settings"}},"type":"object"},"v1ImportEdgeHostConfig":{"properties":{"edgeHostUid":{"description":"Deprecated. Use 'edgeHostUids' field","type":"string"},"edgeHostUids":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1InfraLBConfig":{"properties":{"apiServerLB":{"$ref":"#/definitions/v1LoadBalancerSpec","description":"APIServerLB is the configuration for the control-plane load balancer."}},"type":"object"},"v1IngressConfig":{"description":"Ingress configuration for exposing the virtual cluster's kube-apiserver","properties":{"host":{"type":"string"},"port":{"format":"int64","type":"integer"}}},"v1InstallerStatus":{"description":"Spectro cluster installer status","properties":{"clusterMigration":{"$ref":"#/definitions/v1SpectroClusterMigration"},"clusterState":{"type":"string"},"endpoint":{"type":"string","x-omitempty":false}},"type":"object"},"v1InstanceConfig":{"properties":{"category":{"type":"string"},"cpuSet":{"format":"int64","type":"integer"},"diskGiB":{"format":"int64","type":"integer"},"memoryMiB":{"description":"MemoryMiB is the size of a virtual machine's memory, in MiB","format":"int64","type":"integer"},"name":{"type":"string"},"numCPUs":{"description":"NumCPUs is the number of virtual processors in a virtual machine","format":"int32","type":"integer"}}},"v1InstanceCost":{"description":"Instance cost entity","properties":{"price":{"description":"Array of cloud instance price","items":{"$ref":"#/definitions/v1InstancePrice"},"type":"array"}},"type":"object"},"v1InstancePrice":{"description":"Cloud instance price","properties":{"onDemand":{"description":"OnDemand price of instance","format":"double","type":"number"},"os":{"description":"Os associated with instance price. Allowed values - [linux, windows]","enum":["linux","windows"],"type":"string"},"spot":{"description":"Spot price of instance","format":"double","type":"number"}},"type":"object"},"v1InstanceType":{"description":"Cloud Instance type details","properties":{"category":{"description":"Category of instance type","type":"string","x-go-name":"Category"},"cost":{"$ref":"#/definitions/v1InstanceCost"},"cpu":{"description":"Cpu of instance type","format":"double","type":"number","x-go-name":"Cpu"},"gpu":{"description":"Gpu of instance type","format":"double","type":"number","x-go-name":"Gpu"},"memory":{"description":"Memory of instance type","format":"double","type":"number","x-go-name":"Memory"},"nonSupportedZones":{"description":"Non supported zones of the instance in a particular region","items":{"type":"string"},"type":"array"},"price":{"description":"Price of instance type","format":"double","type":"number","x-go-name":"Price"},"supportedArchitectures":{"description":"Supported architecture of the instance","items":{"type":"string"},"type":"array"},"type":{"description":"Type of instance type","type":"string","x-go-name":"Type"}},"type":"object"},"v1Invoice":{"description":"Invoice object","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1InvoiceSpec"},"status":{"$ref":"#/definitions/v1InvoiceStatus"}}},"v1InvoiceBillingPeriod":{"description":"Invoice billing period object","properties":{"end":{"$ref":"#/definitions/v1Time"},"start":{"$ref":"#/definitions/v1Time"}}},"v1InvoiceCredits":{"description":"Invoice credits object","properties":{"alloyFreeCredits":{"description":"Credits allocated for import clusters","format":"int64","type":"number"},"pureFreeCredits":{"description":"Credits allocated for managed clusters","format":"int64","type":"number"}}},"v1InvoicePlan":{"description":"Invoice plan object","properties":{"freeCredits":{"description":"List of free credits","items":{"$ref":"#/definitions/v1InvoicePlanCredit"},"type":"array"},"plantype":{"enum":["Trial","MonthlyOnDemand","AnnualSubscription"],"type":"string"},"slaCredits":{"description":"List of SLA credits","items":{"$ref":"#/definitions/v1InvoicePlanCredit"},"type":"array"}}},"v1InvoicePlanCredit":{"description":"Invoice plan credit object","properties":{"planCredit":{"$ref":"#/definitions/v1PlanCredit"},"totalCpuCoreHours":{"description":"Total used cpu core hours","format":"int64","type":"number"}}},"v1InvoiceProduct":{"description":"Product invoice object","properties":{"alloy":{"$ref":"#/definitions/v1InvoiceProductData"},"pure":{"$ref":"#/definitions/v1InvoiceProductData"}}},"v1InvoiceProductData":{"description":"Product invoice data","properties":{"allocatedCredits":{"description":"Allocated credits","format":"int64","type":"number"},"amount":{"description":"Total amount","format":"float64","type":"number"},"billableCredits":{"description":"Credits to be billed","format":"float64","type":"number"},"breachedCredits":{"description":"Credits that are exceeds the allocated credits","format":"float64","type":"number"},"discount":{"description":"Applied discount","format":"int64","type":"number"},"freeCredits":{"description":"Allocated free credits","format":"int64","type":"number"},"overageLimitPercentage":{"description":"Allowed overage limit in percentage","format":"int8","type":"number"},"tierName":{"description":"Tier name","type":"string"},"tierPrice":{"description":"Tier price","format":"float64","type":"number"},"totalUsedCredits":{"description":"Total used credits","format":"float64","type":"number"},"usedCredits":{"description":"Used credits","format":"float64","type":"number"}}},"v1InvoiceProject":{"description":"Invoice project object","properties":{"amount":{"description":"Billing amount for the project","format":"float64","type":"number"},"projectName":{"description":"Name of the project","type":"string"},"projectUid":{"description":"Project identifier","type":"string"},"usage":{"$ref":"#/definitions/v1ProjectUsage","description":"Usage by the project"}}},"v1InvoiceRetryRequest":{"description":"Retry invoice request object","properties":{"customerId":{"description":"Customer invoice uid","type":"string"},"invoiceUid":{"description":"Invoice uid","type":"string"},"paymentMethodId":{"description":"Payment method uid","type":"string"}}},"v1InvoiceSpec":{"description":"Invoice specification","properties":{"address":{"$ref":"#/definitions/v1Address"},"billingPeriod":{"$ref":"#/definitions/v1InvoiceBillingPeriod"},"credits":{"$ref":"#/definitions/v1InvoiceCredits"},"envType":{"description":"Environment type [Trial,MonthlyOnDemand,AnnualSubscription,OnPrem]","type":"string"},"month":{"$ref":"#/definitions/v1Time","description":"Month for which invoice is generated"},"paymentUnit":{"enum":["usd"],"type":"string"},"plan":{"$ref":"#/definitions/v1InvoicePlan"}}},"v1InvoiceState":{"description":"Invoice state object","properties":{"paymentMsg":{"description":"Payment status message","type":"string"},"state":{"enum":["Paid","PaymentPending","PaymentInProgress","PaymentFailed"],"type":"string"},"timestamp":{"$ref":"#/definitions/v1Time","description":"Time on which the state has been updated"}}},"v1InvoiceStatus":{"description":"Invoice Status","properties":{"billableAmount":{"description":"Total billable amount","format":"float64","type":"number"},"productInvoice":{"$ref":"#/definitions/v1InvoiceProduct"},"projects":{"description":"List of project invoices","items":{"$ref":"#/definitions/v1InvoiceProject"},"type":"array"},"states":{"description":"List of invoice states","items":{"$ref":"#/definitions/v1InvoiceState"},"type":"array","uniqueItems":true},"stripeInvoiceId":{"description":"Stripe invoice uid","type":"string"}}},"v1Invoices":{"description":"List of invoices","properties":{"invoices":{"items":{"$ref":"#/definitions/v1Invoice"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["invoices"],"type":"object"},"v1IpPoolEntity":{"description":"IP Pool entity definition","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"pool":{"$ref":"#/definitions/v1Pool"},"priavetGatewayUid":{"type":"string"},"restrictToSingleCluster":{"description":"if true, restricts this IP pool to be used by single cluster at any time","type":"boolean","x-omitempty":false}},"type":"object"},"status":{"$ref":"#/definitions/v1IpPoolStatus"}},"type":"object"},"v1IpPoolInputEntity":{"description":"IP Pool input entity definition","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"pool":{"$ref":"#/definitions/v1Pool"},"restrictToSingleCluster":{"description":"if true, restricts this IP pool to be used by single cluster at any time","type":"boolean"}},"required":["pool"],"type":"object"}},"type":"object"},"v1IpPoolStatus":{"description":"IP Pool status","properties":{"allottedIps":{"items":{"type":"string"},"type":"array","uniqueItems":true},"associatedClusters":{"items":{"type":"string"},"type":"array","uniqueItems":true},"inUse":{"type":"boolean","x-omitempty":false}},"type":"object"},"v1IpPools":{"properties":{"items":{"items":{"$ref":"#/definitions/v1IpPoolEntity"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1JWKResponse":{"properties":{"alg":{"description":"The \"alg\" (algorithm) parameter identifies the algorithm intended for use with the key","type":"string"},"e":{"type":"string"},"key_ops":{"description":"The \"key_ops\" (key operations) parameter identifies the operation(s) for which the key is intended to be used","type":"string"},"kid":{"description":"The \"kid\" (key ID) parameter is used to match a specific key","type":"string"},"kty":{"description":"The \"kty\" (key type) parameter identifies the cryptographic algorithm family used with the key, such as \"RSA\" or \"EC\"","type":"string"},"n":{"type":"string"},"use":{"description":"The \"use\" (public key use) parameter identifies the intended use of the public key","type":"string"}},"type":"object"},"v1JWKSetResponse":{"properties":{"keys":{"description":"The value of the \"keys\" parameter is an array of JWK values","items":{"$ref":"#/definitions/v1JWKResponse"},"type":"array"}},"type":"object"},"v1JetAuthKey":{"properties":{"authKey":{"type":"string"}},"type":"object"},"v1JetAuthKeyResponse":{"properties":{"authKey":{"type":"string"}},"type":"object"},"v1JetServiceLogin":{"description":"jet service login input","properties":{"authKey":{"description":"authToken helps in two step verification for the authorization.","type":"string"},"edgeHostUid":{"type":"string"},"hostClusterUid":{"type":"string"},"isSystem":{"type":"boolean"},"jetUid":{"type":"string"},"overlordUid":{"type":"string"},"serviceVersion":{"type":"string"},"spectroClusterUid":{"type":"string"},"tenantUid":{"type":"string"}},"type":"object"},"v1KubeBenchEntity":{"description":"KubeBench response","properties":{"reports":{"additionalProperties":{"$ref":"#/definitions/v1KubeBenchReportEntity"},"type":"object"},"requestUid":{"type":"string"},"status":{"enum":["Completed","InProgress","Failed","Initiated"],"type":"string"}},"required":["requestUid","status","reports"]},"v1KubeBenchLog":{"description":"Compliance Scan KubeBench Log","properties":{"description":{"type":"string"},"expected":{"type":"string"},"remediation":{"type":"string"},"state":{"type":"string"},"testId":{"type":"string"},"value":{"type":"string"}}},"v1KubeBenchLogEntity":{"description":"KubeBench log","properties":{"description":{"type":"string"},"expected":{"type":"string"},"remediation":{"type":"string"},"state":{"type":"string"},"testId":{"type":"string"},"value":{"type":"string"}}},"v1KubeBenchReport":{"description":"Compliance Scan KubeBench Report","properties":{"fail":{"format":"int32","type":"integer"},"info":{"format":"int32","type":"integer"},"logs":{"items":{"$ref":"#/definitions/v1KubeBenchLog"},"type":"array"},"name":{"type":"string"},"pass":{"format":"int32","type":"integer"},"time":{"$ref":"#/definitions/v1Time"},"type":{"type":"string"},"warn":{"format":"int32","type":"integer"}}},"v1KubeBenchReportEntity":{"description":"KubeBench report","properties":{"fail":{"format":"int32","type":"integer"},"info":{"format":"int32","type":"integer"},"logs":{"items":{"$ref":"#/definitions/v1KubeBenchLogEntity"},"type":"array"},"name":{"type":"string"},"pass":{"format":"int32","type":"integer"},"time":{"$ref":"#/definitions/v1Time"},"type":{"type":"string"},"warn":{"format":"int32","type":"integer"}}},"v1KubeHunterEntity":{"description":"KubeHunter response","properties":{"reports":{"additionalProperties":{"$ref":"#/definitions/v1KubeHunterReportEntity"},"type":"object"},"requestUid":{"type":"string"},"status":{"enum":["Completed","InProgress","Failed","Initiated"],"type":"string"}},"required":["requestUid","status","reports"]},"v1KubeHunterLog":{"description":"Compliance Scan KubeHunter Log","properties":{"description":{"type":"string"},"evidence":{"type":"string"},"reference":{"type":"string"},"severity":{"type":"string"},"testId":{"type":"string"},"vulnerability":{"type":"string"}}},"v1KubeHunterLogEntity":{"description":"KubeHunter log","properties":{"description":{"type":"string"},"evidence":{"type":"string"},"reference":{"type":"string"},"severity":{"type":"string"},"testId":{"type":"string"},"vulnerability":{"type":"string"}}},"v1KubeHunterReport":{"description":"Compliance Scan KubeHunter Report","properties":{"logs":{"items":{"$ref":"#/definitions/v1KubeHunterLog"},"type":"array"},"time":{"$ref":"#/definitions/v1Time"},"vulnerabilites":{"$ref":"#/definitions/v1KubeHunterVulnerabilities"}}},"v1KubeHunterReportEntity":{"description":"KubeHunter report","properties":{"logs":{"items":{"$ref":"#/definitions/v1KubeHunterLogEntity"},"type":"array"},"time":{"$ref":"#/definitions/v1Time"},"vulnerabilities":{"$ref":"#/definitions/v1KubeHunterVulnerabilityDataEntity"}}},"v1KubeHunterVulnerabilities":{"description":"Compliance Scan KubeHunter Vulnerabilities","properties":{"high":{"format":"int32","type":"integer"},"low":{"format":"int32","type":"integer"},"medium":{"format":"int32","type":"integer"}}},"v1KubeHunterVulnerabilityDataEntity":{"description":"KubeHunter vulnerability data","properties":{"high":{"format":"int32","type":"integer"},"low":{"format":"int32","type":"integer"},"medium":{"format":"int32","type":"integer"}}},"v1KubeMeta":{"description":"Spectro cluster kube meta","properties":{"hasKubeConfig":{"type":"boolean","x-omitempty":false},"hasKubeConfigClient":{"type":"boolean","x-omitempty":false},"hasManifest":{"type":"boolean","x-omitempty":false},"kubernetesVersion":{"type":"string"}},"type":"object"},"v1LibvirtCloudClusterConfigEntity":{"description":"Libvirt cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1LibvirtClusterConfig"}},"type":"object"},"v1LibvirtCloudConfig":{"description":"LibvirtCloudConfig is the Schema for the libvirtcloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1LibvirtCloudConfigSpec"},"status":{"$ref":"#/definitions/v1LibvirtCloudConfigStatus"}},"type":"object"},"v1LibvirtCloudConfigSpec":{"description":"LibvirtCloudConfigSpec defines the desired state of LibvirtCloudConfig","properties":{"clusterConfig":{"$ref":"#/definitions/v1LibvirtClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1LibvirtMachinePoolConfig"},"type":"array"}},"required":["clusterConfig","machinePoolConfig"],"type":"object"},"v1LibvirtCloudConfigStatus":{"properties":{"conditions":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"nodeImages":{"description":"NodeImages are the list of images generated on all the LibvirtHosts","items":{"$ref":"#/definitions/v1LibvirtImage"},"type":"array"},"sourceImageId":{"description":"SourceImageId can be from packref's annotations or from pack.json","type":"string"}},"type":"object"},"v1LibvirtClusterConfig":{"properties":{"controlPlaneEndpoint":{"$ref":"#/definitions/v1LibvirtControlPlaneEndPoint","description":"ControlPlaneEndpoint is the control plane endpoint, which can be an IP or FQDN"},"ntpServers":{"description":"NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list","items":{"type":"string"},"type":"array"},"sshKeys":{"description":"SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user","items":{"type":"string"},"type":"array"},"staticIp":{"description":"StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type","type":"boolean"}},"type":"object"},"v1LibvirtControlPlaneEndPoint":{"properties":{"ddnsSearchDomain":{"description":"DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required","type":"string"},"host":{"description":"Host is FQDN(DDNS) or IP","type":"string"},"type":{"description":"Type indicates DDNS or VIP","type":"string"}},"type":"object"},"v1LibvirtDiskSpec":{"properties":{"dataStoragePool":{"description":"DataStoragePool is the storage pool from which additional disks are assigned","type":"string"},"managed":{"description":"Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.","type":"boolean"},"sizeInGB":{"description":"SizeInGB is the target size in GB of the disk to be added","format":"int32","type":"integer"}},"required":["sizeInGB"],"type":"object"},"v1LibvirtHostIdentity":{"properties":{"caCert":{"description":"CACert is the client CA certificate","type":"string"},"mode":{"description":"Mode indicates a system or session connection to the host","type":"string"},"socketPath":{"description":"SocketPath is an optional path to the socket on the host, if not using defaults","type":"string"},"sshSecret":{"$ref":"#/definitions/v1EdgeHostSSHSecret","description":"SSHSecrets to the secret containing ssh-username"}},"type":"object"},"v1LibvirtImage":{"description":"LibvirtImage is the Image generated on the LibvirtHost","properties":{"hostID":{"description":"HostID is the ID of the LibvirtHost","type":"string"},"imageName":{"description":"ImageName is the name of the Libvirt image","type":"string"},"storagePool":{"description":"StoragePool is the name of the storagePool where is image is located","type":"string"}},"type":"object"},"v1LibvirtInstanceType":{"description":"LibvirtInstanceType defines the instance configuration for a virtual machine","properties":{"cpuPassthroughSpec":{"$ref":"#/definitions/v1CPUPassthroughSpec","description":"Defines CPU Passthrough Spec. A not null value enables CPU Passthrough for the libvirt domain. Further cache passthrough can be enabled with the CPU passthrough spec."},"cpuset":{"description":"CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation","type":"string"},"gpuConfig":{"$ref":"#/definitions/v1GPUConfig","description":"GPU configuration"},"memoryInMB":{"description":"MemoryinMB is the memory in megabytes","format":"int32","type":"integer"},"numCPUs":{"description":"NumCPUs is the number of CPUs","format":"int32","type":"integer"}},"required":["numCPUs","memoryInMB"],"type":"object"},"v1LibvirtMachine":{"description":"Libvirt cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1LibvirtMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}}},"v1LibvirtMachinePoolCloudConfigEntity":{"properties":{"instanceType":{"$ref":"#/definitions/v1LibvirtInstanceType"},"nonRootDisksInGB":{"description":"NonRootDisksInGB is the list of additional disks, if required, in GB","items":{"$ref":"#/definitions/v1LibvirtDiskSpec"},"type":"array"},"placements":{"description":"Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster","items":{"$ref":"#/definitions/v1LibvirtPlacementEntity"},"type":"array","uniqueItems":true},"rootDiskInGB":{"description":"RootDiskInGB is the size of a vm's root disk, in GiB","format":"int32","type":"integer"},"xslTemplate":{"description":"XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition","type":"string"}},"required":["instanceType","placements","rootDiskInGB"]},"v1LibvirtMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"instanceType":{"$ref":"#/definitions/v1LibvirtInstanceType","description":"InstanceType defines the instance configuration of the vms in the machine pool"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean"},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"nonRootDisksInGB":{"description":"NonRootDisksInGB is the list of additional disks, if required, in GB","items":{"$ref":"#/definitions/v1LibvirtDiskSpec"},"type":"array"},"placements":{"description":"Placements defines the configurations of the failureDomains(hosts) for the machine pool","items":{"$ref":"#/definitions/v1LibvirtPlacementConfig"},"type":"array"},"rootDiskInGB":{"description":"RootDiskInGB is the size of a vm's root disk, in GB","format":"int32","type":"integer"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean"},"xslTemplate":{"description":"XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition","type":"string"}},"required":["instanceType","placements","rootDiskInGB"],"type":"object"},"v1LibvirtMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1LibvirtMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"type":"object"},"v1LibvirtMachineSpec":{"description":"libvirt cloud VM definition spec","properties":{"disks":{"items":{"$ref":"#/definitions/v1LibvirtDiskSpec"},"type":"array"},"edgeHostUid":{"type":"string"},"failureDomain":{"type":"string"},"imageName":{"type":"string"},"instanceType":{"$ref":"#/definitions/v1LibvirtInstanceType"},"nics":{"items":{"$ref":"#/definitions/v1LibvirtNicSpec"},"type":"array"},"targetStoragePool":{"type":"string"}},"type":"object"},"v1LibvirtMachines":{"description":"Libvirt machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1LibvirtMachine"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1LibvirtNetworkSpec":{"description":"LibvirtNetworkSpec defines the network configuration for a virtual machine","properties":{"networkName":{"description":"NetworkName of the libvirt network where this machine will be connected","type":"string"},"networkType":{"description":"NetworkType specifies the type of network","enum":["default","bridge"],"type":"string"}},"required":["networkName","networkType"],"type":"object"},"v1LibvirtNicSpec":{"description":"Libvirt network interface","properties":{"index":{"format":"int8","type":"integer"},"macAddress":{"type":"string"},"privateIPs":{"items":{"type":"string"},"type":"array"}},"required":["macAddress"],"type":"object"},"v1LibvirtPlacementConfig":{"properties":{"dataStoragePool":{"description":"DataStoragePool is the storage pool from which additional disks are assigned","type":"string"},"gpuDevices":{"description":"GPU Devices is the list of LibvirtHost GPU devices, to be used for this placement","items":{"$ref":"#/definitions/v1GPUDeviceSpec"},"type":"array"},"hostAddress":{"description":"HostAddress is a FQDN or IP address of the LibvirtHost","type":"string"},"hostIdentity":{"$ref":"#/definitions/v1LibvirtHostIdentity","description":"HostIdentity is the identity to access the LibvirtHost"},"hostUid":{"description":"HostUid is the ID of the LibvirtHost","type":"string"},"networks":{"description":"Networks defines the network specifications of the vms in the machine pool","items":{"$ref":"#/definitions/v1LibvirtNetworkSpec"},"type":"array"},"sourceStoragePool":{"description":"SourceStoragePool is the storage pool for the vm image","type":"string"},"targetStoragePool":{"description":"TargetStoragePool is the optional storage pool from which additional disks are assigned. If not specified, the sourceStoragePool is also used as the targetStoragePool","type":"string"}},"required":["hostUid","hostAddress","networks","sourceStoragePool"],"type":"object"},"v1LibvirtPlacementEntity":{"description":"Libvirt placement config","properties":{"dataStoragePool":{"type":"string"},"gpuDevices":{"description":"GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.","items":{"$ref":"#/definitions/v1GPUDeviceSpec"},"type":"array"},"hostUid":{"type":"string"},"networks":{"items":{"$ref":"#/definitions/v1LibvirtNetworkSpec"},"type":"array"},"sourceStoragePool":{"type":"string"},"targetStoragePool":{"type":"string"}},"required":["hostUid"],"type":"object"},"v1LifecycleConfig":{"properties":{"pause":{"default":false,"description":"enable pause life cycle config","type":"boolean","x-omitempty":false}}},"v1LifecycleConfigEntity":{"properties":{"lifecycleConfig":{"$ref":"#/definitions/v1LifecycleConfig"}},"type":"object"},"v1LifecycleStatus":{"properties":{"msg":{"description":"error or success msg of lifecycle","type":"string"},"status":{"description":"lifecycle status","enum":["Pausing","Paused","Resuming","Running","Error"],"type":"string"}}},"v1ListMetaData":{"description":"ListMeta describes metadata for the resource listing","properties":{"continue":{"description":"Next token for the pagination. Next token is equal to empty string indicates end of result set.","type":"string","x-omitempty":false},"count":{"description":"Total count of the resources which might change during pagination based on the resources addition or deletion","type":"integer","x-omitempty":false},"limit":{"description":"Number of records feteched","type":"integer","x-omitempty":false},"offset":{"description":"The next offset for the pagination. Starting index for which next request will be placed.","type":"integer","x-omitempty":false}},"type":"object"},"v1LoadBalancerConfig":{"description":"Load balancer configuration for exposing the virtual cluster's kube-apiserver","properties":{"externalIPs":{"items":{"type":"string"},"type":"array"},"externalTrafficPolicy":{"type":"string"},"loadBalancerSourceRanges":{"items":{"type":"string"},"type":"array"}}},"v1LoadBalancerService":{"properties":{"host":{"description":"IP or Host from svc.Status.LoadBalancerStatus.Ingress","type":"string"},"name":{"description":"name of the loadbalancer service","type":"string"},"ports":{"description":"port this service exposed","items":{"$ref":"#/definitions/v1ServicePort"},"type":"array"}},"type":"object"},"v1LoadBalancerSpec":{"description":"LoadBalancerSpec defines an Azure load balancer.","properties":{"apiServerLBStaticIP":{"type":"string"},"ipAllocationMethod":{"default":"Dynamic","enum":["Static","Dynamic"],"type":"string"},"privateDNSName":{"type":"string"},"type":{"default":"Public","description":"Load Balancer type","enum":["Internal","Public"],"type":"string"}},"type":"object"},"v1LocationType":{"default":"s3","description":"Location type","enum":["s3","gcp","minio"],"type":"string"},"v1Lock":{"properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta","type":"object","x-omitempty":false},"spec":{"properties":{"expireAt":{"$ref":"#/definitions/v1Time","x-omitempty":false},"key":{"type":"string","x-omitempty":false}},"type":"object"}},"type":"object"},"v1Locks":{"items":{"$ref":"#/definitions/v1Lock"},"type":"array","uniqueItems":true},"v1Login":{"description":"Login input","properties":{"emailId":{"type":"string"}},"type":"object"},"v1LoginBannerSettings":{"properties":{"Message":{"description":"Login banner message displayed to the user","type":"string","x-omitempty":false},"isEnabled":{"description":"Set to 'true' if login banner has to be displayed for user","type":"boolean","x-omitempty":false},"title":{"description":"Banner title displayed to the user","type":"string","x-omitempty":false}}},"v1LoginResponse":{"description":"Returns the allowed login method and information with the organization details","properties":{"appEnv":{"description":"Describes the env type. Possible values [ saas, self-hosted, quick-start, enterprise, airgap]","type":"string"},"authType":{"description":"Describes the default mode of authentication. Possible values [password, sso]","enum":["password","sso"],"type":"string"},"orgName":{"description":"Organization name.","type":"string"},"redirectUrl":{"description":"Describes the default redirect Url for authentication. If authType is sso, it will have tenant configured saml/oidc idp url else it will be users organization url","type":"string","x-omitempty":false},"rootDomain":{"description":"Describes the domain url on which the saas is available","type":"string"},"securityMode":{"description":"Describes which security mode is enabled","type":"string"},"ssoLogins":{"$ref":"#/definitions/v1SsoLogins","description":"Just Inside. Describes the allowed social logins"},"totalTenants":{"description":"Describes the total number of tenant present in the system","format":"int64","type":"number"}},"type":"object"},"v1LogoutResponse":{"description":"Logout response specifying the redirect url","properties":{"redirectUrl":{"type":"string","x-omitempty":false}},"type":"object"},"v1MaasAccount":{"description":"Maas cloud account information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the account.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1MaasCloudAccount"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1MaasAccounts":{"properties":{"items":{"items":{"$ref":"#/definitions/v1MaasAccount"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1MaasCloudAccount":{"properties":{"apiEndpoint":{"type":"string"},"apiKey":{"type":"string"},"preferredSubnets":{"description":"list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"","items":{"default":"","type":"string"},"type":"array"}},"required":["apiKey","apiEndpoint"],"type":"object"},"v1MaasCloudClusterConfigEntity":{"description":"Maas cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1MaasClusterConfig"}},"type":"object"},"v1MaasCloudConfig":{"description":"MaasCloudConfig is the Schema for the maascloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1MaasCloudConfigSpec"},"status":{"$ref":"#/definitions/v1MaasCloudConfigStatus"}},"type":"object"},"v1MaasCloudConfigSpec":{"description":"MaasCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"cloudAccountRef should point to the secret which contains MaasCloudAccount"},"clusterConfig":{"$ref":"#/definitions/v1MaasClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1MaasMachinePoolConfig"},"type":"array"}},"type":"object"},"v1MaasCloudConfigStatus":{"description":"MaasCloudConfigStatus defines the observed state of MaasCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool","properties":{"ansibleRoleDigest":{"description":"For mold controller to identify if is there any changes in Pack","type":"string"},"conditions":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"isAddonLayer":{"description":"addon layers present in spc","type":"boolean"},"nodeImage":{"$ref":"#/definitions/v1MaasImage"},"roleDigest":{"additionalProperties":{"type":"string"},"description":"this map will be for ansible roles present in eack pack","type":"object"},"sourceImageId":{"description":"sourceImageId, it can be from packref's annotations or from pack.json","type":"string"},"useCapiImage":{"description":"PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add","type":"boolean"}},"type":"object"},"v1MaasClusterConfig":{"description":"Cluster level configuration for MAAS cloud and applicable for all the machine pools","properties":{"domain":{"description":"Domain name of the cluster to be provisioned","type":"string"},"sshKeys":{"description":"SSH keys specifies a list of ssh authorized keys for the 'spectro' user","items":{"type":"string"},"type":"array"}},"required":["domain"],"type":"object"},"v1MaasDomain":{"description":"Maas domain","properties":{"name":{"description":"Name of Maas domain","type":"string"}},"type":"object"},"v1MaasDomains":{"description":"List of Maas domains","properties":{"items":{"items":{"$ref":"#/definitions/v1MaasDomain"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1MaasImage":{"description":"Name of the image","properties":{"name":{"description":"full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos","type":"string"},"state":{"type":"string"}},"type":"object"},"v1MaasInstanceType":{"properties":{"minCPU":{"description":"Minimum CPU cores","format":"int32","type":"integer"},"minMemInMB":{"description":"Minimum memory in MiB","format":"int32","type":"integer"}},"type":"object"},"v1MaasMachine":{"description":"Maas cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1MaasMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1MaasMachineConfigEntity":{"properties":{"azs":{"description":"for master pool, this will be the failure domains for kcp","items":{"type":"string"},"type":"array"},"instanceType":{"$ref":"#/definitions/v1MaasInstanceType"},"resourcePool":{"type":"string"}},"type":"object"},"v1MaasMachinePoolCloudConfigEntity":{"properties":{"azs":{"items":{"type":"string"},"type":"array"},"instanceType":{"$ref":"#/definitions/v1MaasInstanceType"},"resourcePool":{"description":"the resource pool","type":"string"},"tags":{"description":"Tags in maas environment","items":{"type":"string"},"type":"array"}},"required":["instanceType","resourcePool"],"type":"object"},"v1MaasMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"azs":{"items":{"type":"string"},"type":"array"},"instanceType":{"$ref":"#/definitions/v1MaasInstanceType","description":"InstanceType defines the required CPU, Memory"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean"},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"resourcePool":{"type":"string"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"tags":{"description":"Tags in maas environment","items":{"type":"string"},"type":"array"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean"}},"required":["instanceType"],"type":"object"},"v1MaasMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1MaasMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"required":["cloudConfig"],"type":"object"},"v1MaasMachineSpec":{"description":"Maas cloud VM definition spec","properties":{"az":{"type":"string"},"hostname":{"type":"string"},"nics":{"items":{"$ref":"#/definitions/v1MaasNic"},"type":"array"}},"type":"object"},"v1MaasMachines":{"description":"List of MAAS machines","properties":{"items":{"items":{"$ref":"#/definitions/v1MaasMachine"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1MaasNic":{"description":"Maas network interface","properties":{"index":{"format":"int8","type":"integer"},"privateIPs":{"items":{"type":"string"},"type":"array"},"publicIp":{"type":"string"}},"type":"object"},"v1MaasPool":{"description":"Maas pool","properties":{"description":{"description":"Description of Maas domain","type":"string"},"name":{"description":"Name of Maas pool","type":"string"}},"type":"object"},"v1MaasPools":{"description":"List of Maas pools","properties":{"items":{"items":{"$ref":"#/definitions/v1MaasPool"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1MaasSubnet":{"description":"Maas subnet","properties":{"id":{"description":"Id of Maas subnet","type":"integer"},"name":{"description":"Name of Maas subnet","type":"string"},"space":{"description":"Space associated with Maas subnet","type":"string"},"vlans":{"$ref":"#/definitions/v1MaasVlan"}},"type":"object"},"v1MaasSubnets":{"description":"List of Maas subnets","properties":{"items":{"items":{"$ref":"#/definitions/v1MaasSubnet"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1MaasTag":{"description":"Maas tag","properties":{"comment":{"description":"Comment on Maas tag","type":"string"},"definition":{"description":"Definition of Maas tag","type":"string"},"kernelOpts":{"description":"Kernel Opts on Maas tag","type":"string"},"name":{"description":"Name of Maas tag","type":"string"},"resourceUri":{"description":"Description of Maas tag","type":"string"}},"type":"object"},"v1MaasTags":{"description":"List of Maas tags","properties":{"items":{"items":{"$ref":"#/definitions/v1MaasTag"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1MaasVlan":{"description":"Maas vlan entity","properties":{"fabric":{"description":"Fabric associated with Maas Vlan","type":"string"},"id":{"description":"Id of Maas Vlan","type":"integer"},"name":{"description":"Name of Maas Vlan","type":"string"}},"type":"object"},"v1MaasZone":{"description":"Maas zone","properties":{"description":{"description":"Description of Maas domain","type":"string"},"name":{"description":"Name of Maas zone","type":"string"}},"type":"object"},"v1MaasZones":{"description":"List of Maas zones","properties":{"items":{"items":{"$ref":"#/definitions/v1MaasZone"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1MachineCertificate":{"description":"K8 Certificates for master nodes","properties":{"certificateAuthorities":{"description":"Applicable certificate authorities","items":{"$ref":"#/definitions/v1CertificateAuthority"},"type":"array"},"name":{"type":"string"}},"type":"object"},"v1MachineCertificates":{"description":"K8 Certificates for all the cluster's master nodes","properties":{"machineCertificates":{"items":{"$ref":"#/definitions/v1MachineCertificate"},"type":"array"}},"type":"object"},"v1MachineHealth":{"description":"Machine health state","properties":{"conditions":{"items":{"$ref":"#/definitions/v1MachineHealthCondition"},"type":"array"},"lastHeartBeatTimestamp":{"$ref":"#/definitions/v1Time"},"state":{"type":"string"}},"type":"object"},"v1MachineHealthCheckConfig":{"properties":{"healthCheckMaxUnhealthy":{"description":"HealthCheckMaxUnhealthy is the value above which, if current nodes are unhealthy remediation will not be triggered Can be an absolute int64 number or a percentage string Default value is 100%, i.e by default it is disabled","type":"string"},"networkReadyHealthCheckDuration":{"description":"NetworkReadyHealthCheckDuration is the timeout to check for the network availability. If the network is not available in the given available time, beyond the timeout check a node will be killed and a new node will be created. Default time is 10m","type":"string"},"nodeReadyHealthCheckDuration":{"description":"NodeReadyHealthCheckDuration is the timeout to check for the node ready state. If the node is not ready within the time out set, the node will be deleted and a new node will be launched. Default time is 10m","type":"string"}},"type":"object"},"v1MachineHealthCondition":{"description":"Machine health condition","properties":{"message":{"type":"string"},"reason":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"}},"type":"object"},"v1MachineMaintenance":{"properties":{"action":{"description":"Machine maintenance mode action","enum":["cordon","uncordon"],"type":"string"}},"type":"object"},"v1MachineMaintenanceStatus":{"description":"Machine maintenance status","properties":{"action":{"type":"string"},"message":{"type":"string"},"state":{"type":"string"}},"type":"object"},"v1MachineManagementConfig":{"properties":{"osPatchConfig":{"$ref":"#/definitions/v1OsPatchConfig","description":"Os patch config contains properties to patch node os with latest security packages. If OsPatchConfig is not provided then node os will not be patched with latest security updates."}},"type":"object"},"v1MachinePoolConfigEntity":{"description":"Machine pool configuration for the cluster","properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"Additional labels to be part of the machine pool","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"isControlPlane":{"description":"Whether this pool is for control plane","type":"boolean","x-omitempty":false},"labels":{"description":"Labels for this machine pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"Max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"Min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"size":{"description":"Size of the pool, number of nodes/machines","format":"int32","type":"integer"},"taints":{"description":"Master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"Rolling update strategy for this machine pool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean","x-omitempty":false}},"required":["name","size","labels"],"type":"object"},"v1MachinePoolMeta":{"properties":{"cloudType":{"type":"string"},"healthy":{"description":"number of healthy machines","format":"int32","type":"integer","x-omitempty":false},"infraProfileTemplate":{"$ref":"#/definitions/v1ClusterProfileTemplateMeta","description":"InfraClusterProfile contains OS/Kernel for this NodePool"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean","x-omitempty":false},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"maintenanceMode":{"description":"number of machines under maintenance","format":"int32","type":"integer","x-omitempty":false},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer","x-omitempty":false}},"type":"object"},"v1MachinePoolProperties":{"description":"Machine pool specific properties","properties":{"archType":{"$ref":"#/definitions/v1ArchType","description":"Architecture type of the pool. Default value is 'amd64'","x-omitempty":false}},"type":"object"},"v1MachinePoolRate":{"description":"Machine pool estimated rate information","properties":{"name":{"type":"string"},"nodesCount":{"format":"int32","type":"integer"},"rate":{"$ref":"#/definitions/v1CloudRate"}},"type":"object"},"v1MachinePoolsMachineUids":{"properties":{"machinePools":{"additionalProperties":{"$ref":"#/definitions/v1MachineUids"},"type":"object"}}},"v1MachineUids":{"properties":{"machineUids":{"items":{"type":"string"},"type":"array"}}},"v1Macro":{"properties":{"name":{"type":"string"},"value":{"type":"string"}}},"v1Macros":{"properties":{"macros":{"items":{"$ref":"#/definitions/v1Macro"},"type":"array","uniqueItems":true}}},"v1ManagedDisk":{"properties":{"storageAccountType":{"type":"string"}},"type":"object"},"v1Manifest":{"description":"Manifest object","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ManifestPublishedSpec"}}},"v1ManifestData":{"description":"Published manifest object","properties":{"content":{"description":"Manifest content in yaml","type":"string"},"digest":{"description":"Manifest digest","type":"string"}},"type":"object"},"v1ManifestEntities":{"properties":{"items":{"description":"Manifests array","items":{"$ref":"#/definitions/v1ManifestEntity"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1ManifestEntity":{"description":"Manifest object","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ManifestSpec"}}},"v1ManifestInputEntity":{"description":"Manifest request payload","properties":{"content":{"description":"Manifest content","type":"string"},"name":{"description":"Manifest name","type":"string"}}},"v1ManifestPublishedSpec":{"description":"Manifest spec","properties":{"published":{"$ref":"#/definitions/v1ManifestData"}}},"v1ManifestRefInputEntities":{"description":"Pack manifests input params","properties":{"manifests":{"description":"Pack manifests array","items":{"$ref":"#/definitions/v1ManifestRefInputEntity"},"type":"array","uniqueItems":true}}},"v1ManifestRefInputEntity":{"description":"Manifest request payload","properties":{"content":{"description":"Manifest content in yaml","type":"string"},"uid":{"description":"Manifest uid","type":"string"}}},"v1ManifestRefUpdateEntity":{"description":"Manifest update request payload","properties":{"content":{"description":"Manifest content in yaml","type":"string"},"name":{"description":"Manifest name","type":"string"},"uid":{"description":"Manifest uid","type":"string"}},"required":["name"]},"v1ManifestSpec":{"description":"Manifest spec","properties":{"draft":{"$ref":"#/definitions/v1ManifestData"},"published":{"$ref":"#/definitions/v1ManifestData"}},"type":"object"},"v1ManifestSummary":{"description":"Manifest object","properties":{"content":{"description":"Manifest content in yaml","type":"string"},"name":{"description":"Manifest name","type":"string"},"uid":{"description":"Manifest uid","type":"string"}}},"v1Memory":{"properties":{"sizeInMB":{"description":"memory size in bytes","format":"int64","type":"integer"}},"type":"object"},"v1MetricAggregation":{"description":"Aggregation values","properties":{"avg":{"type":"number","x-omitempty":false},"count":{"format":"int64","type":"number","x-omitempty":false},"max":{"type":"number","x-omitempty":false},"min":{"type":"number","x-omitempty":false},"sum":{"type":"number","x-omitempty":false}},"type":"object"},"v1MetricMetadata":{"properties":{"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1MetricPoint":{"description":"Metric Info","properties":{"avg":{"type":"number"},"count":{"format":"int64","type":"number"},"max":{"type":"number"},"min":{"type":"number"},"sum":{"type":"number"},"timestamp":{"format":"int64","type":"number"},"value":{"type":"number","x-omitempty":false}},"type":"object"},"v1MetricTimeSeries":{"properties":{"items":{"items":{"$ref":"#/definitions/v1Metrics"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1MetricTimeSeriesList":{"properties":{"items":{"items":{"$ref":"#/definitions/v1MetricsList"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1Metrics":{"properties":{"aggregation":{"$ref":"#/definitions/v1MetricAggregation"},"kind":{"type":"string"},"points":{"items":{"$ref":"#/definitions/v1MetricPoint"},"type":"array","uniqueItems":true},"unit":{"type":"string"}},"type":"object"},"v1MetricsList":{"properties":{"metadata":{"$ref":"#/definitions/v1MetricMetadata"},"metrics":{"items":{"$ref":"#/definitions/v1Metrics"},"type":"array","uniqueItems":true}},"type":"object"},"v1MfaAuthenticationExtensions":{"additionalProperties":{"type":"object"},"type":"object"},"v1MfaAuthenticatorSelection":{"properties":{"authenticatorAttachment":{"type":"string"},"requireResidentKey":{"type":"boolean"},"residentKey":{"type":"string"},"userVerification":{"type":"string"}},"type":"object"},"v1MfaConveyancePreference":{"enum":["none","indirect","direct","enterprise"],"type":"string"},"v1MfaCredentialCreationRequest":{"properties":{"_type":{"type":"string"},"authenticatorAttachment":{"type":"string"},"clientExtensionResults":{"additionalProperties":{"type":"object"},"type":"object"},"deviceName":{"type":"string"},"id":{"type":"string"},"rawId":{"$ref":"#/definitions/URLEncodedBase64"},"response":{"properties":{"attestationObject":{"$ref":"#/definitions/URLEncodedBase64"},"clientDataJSON":{"$ref":"#/definitions/URLEncodedBase64"},"transports":{"items":{"type":"string"},"type":"array"}},"type":"object"},"transports":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1MfaCredentialDescriptor":{"properties":{"attestationType":{"type":"string"},"id":{"$ref":"#/definitions/urlEncodedBase64"},"transports":{"items":{"type":"string"},"type":"array"},"type":{"type":"string"}},"type":"object"},"v1MfaCredentialParameter":{"properties":{"alg":{"type":"integer"},"type":{"type":"string"}},"type":"object"},"v1MfaDeviceMeta":{"properties":{"creationTimestamp":{"$ref":"#/definitions/v1Time"},"deviceName":{"type":"string"}},"type":"object"},"v1MfaDeviceName":{"properties":{"deviceName":{"type":"string"}},"type":"object"},"v1MfaDevices":{"items":{"$ref":"#/definitions/v1MfaDeviceMeta"},"type":"array"},"v1MfaLoginStart":{"properties":{"publicKey":{"$ref":"#/definitions/v1MfaPublicKeyCredentialRequestOptions"}},"type":"object"},"v1MfaPublicKeyCredentialCreationOptions":{"properties":{"attestation":{"$ref":"#/definitions/v1MfaConveyancePreference"},"authenticatorSelection":{"$ref":"#/definitions/v1MfaAuthenticatorSelection"},"challenge":{"$ref":"#/definitions/URLEncodedBase64"},"excludeCredentials":{"items":{"$ref":"#/definitions/v1MfaCredentialDescriptor"},"type":"array"},"extensions":{"$ref":"#/definitions/v1MfaAuthenticationExtensions"},"pubKeyCredParams":{"items":{"$ref":"#/definitions/v1MfaCredentialParameter"},"type":"array"},"rp":{"$ref":"#/definitions/v1MfaRelyingPartyEntity"},"timeout":{"type":"integer"},"user":{"$ref":"#/definitions/v1MfaUserEntity"}},"type":"object"},"v1MfaPublicKeyCredentialRequestOptions":{"properties":{"allowCredentials":{"items":{"$ref":"#/definitions/v1MfaCredentialDescriptor"},"type":"array"},"challenge":{"$ref":"#/definitions/urlEncodedBase64"},"extensions":{"$ref":"#/definitions/v1MfaAuthenticationExtensions"},"rpId":{"type":"string"},"timeout":{"type":"integer"},"userVerification":{"type":"string"}},"type":"object"},"v1MfaRegistrationStart":{"properties":{"publicKey":{"$ref":"#/definitions/v1MfaPublicKeyCredentialCreationOptions"}},"type":"object"},"v1MfaRelyingPartyEntity":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"type":"object"},"v1MfaUserEntity":{"properties":{"displayName":{"type":"string"},"id":{"type":"object"},"name":{"type":"string"}},"type":"object"},"v1MgmtApp":{"description":"Spectro application management data","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1MgmtAppSpec"},"status":{"$ref":"#/definitions/v1MgmtAppStatus"}},"type":"object"},"v1MgmtAppContainersState":{"properties":{"running":{"properties":{"startedAt":{"$ref":"#/definitions/v1Time"}},"type":"object"},"terminated":{"properties":{"exitCode":{"type":"integer"},"finishedAt":{"$ref":"#/definitions/v1Time"},"reason":{"type":"string"},"signal":{"type":"integer"},"startedAt":{"$ref":"#/definitions/v1Time"}},"type":"object"},"waiting":{"properties":{"reason":{"type":"string"}},"type":"object"}},"type":"object"},"v1MgmtAppContainersStatus":{"properties":{"isHealthy":{"type":"boolean","x-omitempty":false},"message":{"type":"string"},"name":{"type":"string"},"numberOfRestarts":{"type":"integer"},"state":{"$ref":"#/definitions/v1MgmtAppContainersState"}},"type":"object"},"v1MgmtAppCronJobStatus":{"properties":{"isHealthy":{"type":"boolean","x-omitempty":false},"lastScheduleTime":{"$ref":"#/definitions/v1Time"},"lastSuccessfulRunTime":{"$ref":"#/definitions/v1Time"},"messages":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"pods":{"additionalProperties":{"$ref":"#/definitions/v1MgmtAppPodsStatus"},"type":"object"}},"type":"object"},"v1MgmtAppEnvHealthStatus":{"properties":{"isHealthy":{"type":"boolean","x-omitempty":false},"messages":{"items":{"type":"string"},"type":"array"},"namespaces":{"additionalProperties":{"$ref":"#/definitions/v1MgmtAppNameSpaceStatus"},"type":"object"}},"type":"object"},"v1MgmtAppHealth":{"properties":{"isHealthy":{"type":"boolean"},"podHealth":{"items":{"$ref":"#/definitions/v1MgmtPodHealth"},"type":"array"}},"type":"object"},"v1MgmtAppNameSpaceStatus":{"properties":{"cronJobs":{"additionalProperties":{"$ref":"#/definitions/v1MgmtAppCronJobStatus"},"type":"object"},"deployments":{"additionalProperties":{"$ref":"#/definitions/v1MgmtAppObjectStatus"},"type":"object"},"isHealthy":{"type":"boolean","x-omitempty":false},"messages":{"items":{"type":"string"},"type":"array"},"statefulSets":{"additionalProperties":{"$ref":"#/definitions/v1MgmtAppObjectStatus"},"type":"object"}},"type":"object"},"v1MgmtAppObjectStatus":{"properties":{"availableReplicas":{"type":"integer"},"creationTime":{"$ref":"#/definitions/v1Time"},"desiredReplicaCount":{"type":"integer"},"isHealthy":{"type":"boolean","x-omitempty":false},"messages":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"pods":{"additionalProperties":{"$ref":"#/definitions/v1MgmtAppPodsStatus"},"type":"object"}},"type":"object"},"v1MgmtAppPodsStatus":{"properties":{"containers":{"additionalProperties":{"$ref":"#/definitions/v1MgmtAppContainersStatus"},"type":"object"},"isHealthy":{"type":"boolean","x-omitempty":false},"messages":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"phase":{"type":"string"},"pvcs":{"additionalProperties":{"$ref":"#/definitions/v1MgmtAppPvcStatus"},"type":"object"},"reason":{"type":"string"},"startTime":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1MgmtAppPvcStatus":{"properties":{"claimName":{"type":"string"},"creationTime":{"$ref":"#/definitions/v1Time"},"isHealthy":{"type":"boolean","x-omitempty":false},"message":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"}},"type":"object"},"v1MgmtAppSpec":{"description":"spectro application management specifications","properties":{"appEnv":{"type":"string"},"cloudType":{"type":"string"},"installedVersion":{"type":"string"},"latestVersion":{"type":"string"},"spectroClusterUid":{"type":"string"}}},"v1MgmtAppStatus":{"description":"spectro application management status","properties":{"appVersions":{"items":{"$ref":"#/definitions/v1AppVersion"},"type":"array","uniqueItems":true},"isFailed":{"type":"boolean","x-omitempty":false},"message":{"type":"string"},"messageLogs":{"items":{"type":"string"},"type":"array"},"state":{"type":"string"},"upgradeHistory":{"items":{"$ref":"#/definitions/v1SpectroMgmtUpgrade"},"type":"array","uniqueItems":true}}},"v1MgmtAppUpgrade":{"properties":{"spec":{"properties":{"currentVersion":{"type":"string","x-omitempty":false},"previousVersion":{"type":"string","x-omitempty":false},"toBeUpgradedVersion":{"type":"string","x-omitempty":false}},"type":"object"},"status":{"properties":{"action":{"type":"string","x-omitempty":false},"states":{"properties":{"imageUpdate":{"$ref":"#/definitions/v1MgmtUpgradeState","x-omitempty":false,"x-order":1},"spectroClusterUpdate":{"$ref":"#/definitions/v1MgmtUpgradeState","x-omitempty":false,"x-order":0},"spectroServiceResume":{"$ref":"#/definitions/v1MgmtUpgradeState","x-omitempty":false,"x-order":4},"spectroVersionConfigMapUpdate":{"$ref":"#/definitions/v1MgmtUpgradeState","x-omitempty":false,"x-order":3},"spectroVersionServiceSuspend":{"$ref":"#/definitions/v1MgmtUpgradeState","x-omitempty":false,"x-order":2}},"type":"object"},"upgradeStatus":{"type":"string","x-omitempty":false},"versionHistory":{"items":{"type":"string"},"type":"array","x-omitempty":false}},"type":"object"}},"type":"object"},"v1MgmtAppVersion":{"description":"spectro application management version","properties":{"version":{"properties":{"appEnv":{"type":"string"},"cloudType":{"type":"string"},"installedVersion":{"type":"string"},"latestVersion":{"type":"string"}},"type":"object"}}},"v1MgmtBackupSpec":{"description":"backup spec","properties":{"backupUid":{"type":"string"},"mode":{"type":"string"},"modeUid":{"type":"string"},"proxy":{"description":"proxy information if applicable","type":"string"},"scheduleTime":{"$ref":"#/definitions/v1Time"},"scheduleType":{"default":"Automated","enum":["OnDemand","Automated"],"type":"string"}},"type":"object"},"v1MgmtDbCollectionIndexInfo":{"description":"Database info","properties":{"key":{"additionalProperties":{"type":"integer"}},"name":{"type":"string"},"size":{"type":"integer"},"version":{"type":"string"}},"type":"object"},"v1MgmtDbCollectionInfo":{"description":"Database info","properties":{"count":{"type":"integer"},"indexes":{"items":{"$ref":"#/definitions/v1MgmtDbCollectionIndexInfo"},"type":"array"},"isCapped":{"type":"boolean"},"isReadOnly":{"type":"boolean"},"name":{"type":"string"},"size":{"type":"integer"},"storageSize":{"type":"integer"},"totalIndexSize":{"type":"integer"}},"type":"object"},"v1MgmtDbHealth":{"properties":{"databases":{"items":{"$ref":"#/definitions/v1MgmtDbInfo"},"type":"array"},"totalIndexSize":{"type":"integer"},"totalSize":{"type":"integer"}},"type":"object"},"v1MgmtDbInfo":{"description":"Database info","properties":{"collections":{"items":{"$ref":"#/definitions/v1MgmtDbCollectionInfo"},"type":"array"},"isEmpty":{"type":"boolean"},"name":{"type":"string"},"size":{"type":"integer"},"totalIndexSize":{"type":"integer"}},"type":"object"},"v1MgmtDeleteBackupFtpEntity":{"description":"delete backups based on retention period","properties":{"fileTransferConfig":{"$ref":"#/definitions/v1MgmtFileTransferFtpEntity"},"retentionPeriod":{"type":"integer"}},"type":"object"},"v1MgmtDeleteBackupS3Entity":{"description":"delete backups based on retention period","properties":{"fileTransferConfig":{"$ref":"#/definitions/v1MgmtFileTransferS3Entity"},"retentionPeriod":{"type":"integer"}},"type":"object"},"v1MgmtErrLog":{"properties":{"ref":{"type":"string"},"spec":{"$ref":"#/definitions/v1MgmtErrSpec"}},"type":"object"},"v1MgmtErrLogs":{"items":{"$ref":"#/definitions/v1MgmtErrLog"},"type":"array","uniqueItems":true},"v1MgmtErrSpec":{"properties":{"causes":{"items":{"type":"string"},"type":"array"},"data":{"type":"string"},"debug":{"additionalProperties":{"type":"object"},"type":"object"},"errCode":{"type":"string"},"errMsg":{"type":"string"},"stackTraces":{"items":{"type":"string"},"type":"array"},"userCtx":{"properties":{"projectUid":{"type":"string"},"serviceResUid":{"type":"string"},"tenantUid":{"type":"string"},"userUid":{"type":"string"}},"type":"object"}},"type":"object"},"v1MgmtFileTransferFtpEntity":{"description":"file transfer details","properties":{"backupSpec":{"$ref":"#/definitions/v1MgmtBackupSpec"},"ftp":{"$ref":"#/definitions/v1MgmtFtpConfig"}},"type":"object"},"v1MgmtFileTransferS3Entity":{"description":"file transfer details","properties":{"backupSpec":{"$ref":"#/definitions/v1MgmtBackupSpec"},"s3":{"$ref":"#/definitions/v1MgmtS3Config"}},"type":"object"},"v1MgmtFtpConfig":{"description":"ftp config","properties":{"directory":{"type":"string"},"password":{"type":"string"},"server":{"type":"string"},"username":{"type":"string"}},"type":"object"},"v1MgmtHash":{"properties":{"hash":{"type":"string"}},"required":["hash"],"type":"object"},"v1MgmtListBackupFtpEntity":{"description":"list ftp backups","properties":{"fileTransferConfig":{"$ref":"#/definitions/v1MgmtFileTransferFtpEntity"}},"type":"object"},"v1MgmtListBackupS3Entity":{"description":"list s3 backups","properties":{"fileTransferConfig":{"$ref":"#/definitions/v1MgmtFileTransferS3Entity"}},"type":"object"},"v1MgmtMigrateEntity":{"description":"SystemAdmin","properties":{"db":{"type":"string"},"host":{"type":"string"},"isServiceRecord":{"type":"boolean"},"password":{"type":"string"},"port":{"type":"integer"},"uri":{"type":"string"},"username":{"type":"string"}},"type":"object"},"v1MgmtMigrationStatuses":{"description":"SystemAdmin","properties":{"finishTime":{"$ref":"#/definitions/v1Time"},"folderName":{"type":"string"},"isCompleted":{"type":"boolean"},"message":{"items":{"type":"string"},"type":"array"},"startTime":{"$ref":"#/definitions/v1Time"},"state":{"type":"string","x-omitempty":false},"status":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1MgmtMsgBrokerReinitStatus":{"properties":{"failures":{"items":{"$ref":"#/definitions/v1MgmtMsgBrokerReinitStatusEntity"},"type":"array"},"success":{"items":{"$ref":"#/definitions/v1MgmtMsgBrokerReinitStatusEntity"},"type":"array"}},"type":"object"},"v1MgmtMsgBrokerReinitStatusEntity":{"properties":{"account":{"type":"string"},"isSuccess":{"type":"boolean"},"message":{"type":"string"}},"type":"object"},"v1MgmtPodHealth":{"description":"SystemAdmin","properties":{"isHealthy":{"type":"boolean"},"name":{"type":"string"}},"type":"object"},"v1MgmtS3Config":{"description":"s3 config","properties":{"accessKey":{"type":"string"},"bucket":{"type":"string"},"directory":{"type":"string"},"region":{"type":"string"},"secretKey":{"type":"string"}},"type":"object"},"v1MgmtUpgradeState":{"properties":{"description":{"type":"string","x-omitempty":false},"details":{"items":{"type":"string"},"type":"array","x-omitempty":false},"endTimestamp":{"$ref":"#/definitions/v1Time","x-omitempty":false},"isCompleted":{"type":"boolean","x-omitempty":false},"message":{"type":"string","x-omitempty":false},"startTimestamp":{"$ref":"#/definitions/v1Time","x-omitempty":false}},"type":"object"},"v1MonthlyUsage":{"description":"Monthly usage object","properties":{"month":{"$ref":"#/definitions/v1Time","description":"Month of usage"},"tenantUsages":{"description":"List of tenants usage","items":{"$ref":"#/definitions/v1TenantUsage"},"type":"array","uniqueItems":true},"usedAlloyCredits":{"description":"Credits used by imported clusters","format":"float64","type":"number"},"usedPureCredits":{"description":"Credits used by managed clusters","format":"float64","type":"number"}}},"v1MsgBrokerConnection":{"properties":{"account":{"type":"string"},"accountUid":{"type":"string"},"cid":{"type":"integer"},"cluster":{"properties":{"addr":{"type":"string"},"authTimeout":{"type":"integer"},"clusterPort":{"type":"integer"},"urls":{"items":{"type":"string"},"type":"array"}},"type":"object"},"cpu":{"type":"number"},"duplicationCount":{"type":"integer"},"iP":{"type":"string"},"idle":{"type":"string"},"inBytes":{"type":"integer"},"inMsgs":{"type":"integer"},"lang":{"type":"string"},"lastActivity":{"$ref":"#/definitions/v1Time"},"name":{"type":"string"},"outBytes":{"type":"integer"},"outMsgs":{"type":"integer"},"pendingBytes":{"type":"integer"},"port":{"type":"integer"},"rtt":{"type":"string"},"start":{"$ref":"#/definitions/v1Time"},"subscriptionList":{"items":{"type":"string"},"type":"array"},"subscriptions":{"type":"integer"},"tLSCipherSuite":{"type":"string"},"tLSVersion":{"type":"string"},"uptime":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1MsgBrokerConnectionList":{"items":{"$ref":"#/definitions/v1MsgBrokerConnection"},"type":"array"},"v1MsgBrokerConnections":{"properties":{"connections":{"items":{"$ref":"#/definitions/v1MsgBrokerConnection"},"type":"array","uniqueItems":true},"limit":{"type":"integer"},"now":{"$ref":"#/definitions/v1Time"},"numOfConnections":{"type":"integer"},"offset":{"type":"integer"},"serverId":{"type":"string"},"totalConnections":{"type":"integer"}},"type":"object"},"v1MsgBrokerHealth":{"properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta","type":"object"},"spec":{"$ref":"#/definitions/v1MsgBrokerNodesHealthSpec","type":"object"},"status":{"$ref":"#/definitions/v1MsgBrokerNodesHealthStatus","type":"object"}},"type":"object"},"v1MsgBrokerNodeHealth":{"properties":{"allyPublishersByTenant":{"additionalProperties":{"$ref":"#/definitions/v1MsgBrokerConnectionList"},"type":"object"},"duplicateSubscribersCount":{"additionalProperties":{"type":"integer"},"type":"object"},"hubbleSubscribersByService":{"additionalProperties":{"$ref":"#/definitions/v1MsgBrokerConnectionList"},"type":"object"},"hubbleSubscribersByTenant":{"additionalProperties":{"$ref":"#/definitions/v1MsgBrokerConnectionList"},"type":"object"},"hubbleSubscribersByType":{"additionalProperties":{"$ref":"#/definitions/v1MsgBrokerConnectionList"},"type":"object"},"nodeId":{"type":"string"},"subscriberWithAbnormalRTT":{"$ref":"#/definitions/v1MsgBrokerConnectionList"},"subscribersWithAbnormalSubscriptions":{"$ref":"#/definitions/v1MsgBrokerConnectionList"},"uniqueSubscribers":{"type":"integer"},"unrecognizedClients":{"$ref":"#/definitions/v1MsgBrokerConnectionList"}},"type":"object"},"v1MsgBrokerNodeHealthSpec":{"properties":{"connections":{"$ref":"#/definitions/v1MsgBrokerConnections","type":"object"},"nodeId":{"type":"string"},"routes":{"$ref":"#/definitions/v1MsgBrokerRoutes","type":"object"},"variables":{"$ref":"#/definitions/v1MsgBrokerVariables","type":"object"}},"type":"object"},"v1MsgBrokerNodesHealthSpec":{"properties":{"nodes":{"items":{"$ref":"#/definitions/v1MsgBrokerNodeHealthSpec"},"type":"array"}},"type":"object"},"v1MsgBrokerNodesHealthStatus":{"properties":{"nodes":{"items":{"$ref":"#/definitions/v1MsgBrokerNodeHealth"},"type":"array"}},"type":"object"},"v1MsgBrokerRoutes":{"properties":{"numRoutes":{"type":"integer"},"routes":{"items":{"$ref":"#/definitions/v1NatsRoute"},"type":"array"},"serverId":{"type":"string"}},"type":"object"},"v1MsgBrokerVariables":{"properties":{"authRequired":{"type":"boolean"},"authTimeout":{"type":"integer"},"cluster":{"properties":{"addr":{"type":"string"},"authTimeout":{"type":"integer"},"clusterPort":{"type":"integer"},"urls":{"items":{"type":"string"},"type":"array"}},"type":"object"},"configLoadTime":{"$ref":"#/definitions/v1Time"},"connectUrls":{"items":{"type":"string"},"type":"array"},"connections":{"type":"integer"},"cores":{"type":"integer"},"cpu":{"type":"number"},"gitCommit":{"type":"string"},"go":{"type":"string"},"gomaxprocs":{"type":"integer"},"host":{"type":"string"},"httpHost":{"type":"string"},"httpPort":{"type":"integer"},"inBytes":{"type":"integer"},"inMsgs":{"type":"integer"},"leafNodes":{"type":"integer"},"maxConnections":{"type":"integer"},"maxControlLine":{"type":"integer"},"maxPayload":{"type":"integer"},"maxPending":{"type":"integer"},"mem":{"type":"integer"},"now":{"$ref":"#/definitions/v1Time"},"outBytes":{"type":"integer"},"outMsgs":{"type":"integer"},"pingInterval":{"type":"integer"},"pingMax":{"type":"integer"},"port":{"type":"integer"},"proto":{"type":"integer"},"remotes":{"type":"integer"},"routes":{"type":"integer"},"serverId":{"type":"string"},"serverName":{"type":"string"},"slowConsumers":{"type":"integer"},"start":{"$ref":"#/definitions/v1Time"},"subscriptions":{"type":"integer"},"tlsRequired":{"type":"boolean"},"tlsTimeout":{"type":"integer"},"totalConnections":{"type":"integer"},"uptime":{"type":"string"},"version":{"type":"string"},"writeDeadline":{"type":"integer"}},"type":"object"},"v1MsgSubscriber":{"description":"Message subscriber request","properties":{"accountId":{"type":"string"},"publisher":{"type":"string"},"service":{"type":"string"},"userId":{"type":"string"}},"type":"object"},"v1Nameserver":{"description":"Nameserver define search domains and nameserver addresses","properties":{"addresses":{"items":{"type":"string"},"type":"array"},"search":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1NatsConfiguration":{"description":"Describes the response that contains the nats configuration to establish credentials","properties":{"connectionString":{"description":"Describes the preCalculated connection string, can be used directly to make connection","type":"string"},"enableTls":{"description":"Describes the NATs application option to use a TLS based custom dialer. Its enabled when external Certificate is used over the existing one.","type":"boolean"},"insecureTls":{"description":"Describes the NATs tls option to skip verifying the client certificate","type":"boolean"},"password":{"description":"Describes the NATs user's password","type":"string"},"scheme":{"description":"Describes the NATs protocol for the connection. Eg- 'tls', 'nats'","type":"string"},"tlsCertificate":{"description":"Describes the NATs tls certificate used for making a secure connection","type":"string"},"tlsKey":{"description":"Describes the NATs tls certificate key used for making a secure connection","type":"string"},"urls":{"description":"Describes the URLs of the nats nodes used in nats HA setup where the client will connect","type":"string"},"userName":{"description":"Describes the NATs user name","type":"string"}},"type":"object"},"v1NatsCredentialRequest":{"description":"Describes the request for resource's nats credential","properties":{"clusterUid":{"description":"Deprecated. please use resourceUid","type":"string"},"isSystem":{"description":"Describes if its a system request","type":"boolean"},"resourceUid":{"description":"Describes the resource for which credentials has to be fetched","type":"string"},"serviceName":{"description":"Describes the service for which credentials has to be fetched. Possible values [ally, jet]","enum":["ally","jet"],"type":"string"},"tenantUid":{"description":"Describes the tenant of the resource","type":"string"}},"type":"object"},"v1NatsCredentials":{"description":"Describes the response that contains the nats credentials","properties":{"allowedPublisher":{"description":"Describes the subject on which client is allowed to publish","type":"string"},"allowedSubcriber":{"description":"Describes the subject on which client is allowed to subscribe","type":"string"},"jwt":{"description":"Describes the jwt token which will be used as an credential for the nats","type":"string"},"seed":{"description":"Describes the seed for the jwt","type":"string"}},"type":"object"},"v1NatsRoute":{"properties":{"didSolicit":{"type":"boolean"},"inBytes":{"type":"integer"},"inMsgs":{"type":"integer"},"isConfigured":{"type":"boolean"},"outBytes":{"type":"integer"},"outMsgs":{"type":"integer"},"pendingSize":{"type":"integer"},"port":{"type":"integer"},"remoteId":{"type":"string"},"rid":{"type":"integer"},"rtt":{"type":"string"},"subscriptions":{"type":"integer"}},"type":"object"},"v1NestedCloudConfigStatus":{"description":"Defines the status of virtual cloud config","properties":{"conditions":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array","x-kubernetes-patch-merge-key":"type","x-kubernetes-patch-strategy":"merge"},"isAddonLayer":{"description":"addon layers present in spc","type":"boolean"}},"type":"object"},"v1Nic":{"properties":{"dns":{"items":{"type":"string"},"type":"array"},"gateway":{"type":"string"},"ip":{"type":"string"},"isDefault":{"type":"boolean"},"macAddr":{"type":"string"},"nicName":{"type":"string"},"subnet":{"type":"string"}},"type":"object"},"v1NodesAutoRemediationSettings":{"properties":{"disableNodesAutoRemediation":{"type":"boolean","x-omitempty":false},"isEnabled":{"type":"boolean","x-omitempty":false}}},"v1NonFipsConfig":{"description":"Non-FIPS configuration","properties":{"mode":{"default":"nonFipsDisabled","description":"enable or disable the non FIPS complaint","enum":["nonFipsEnabled","nonFipsDisabled"],"type":"string"}}},"v1Notification":{"description":"Describes event notification and action definition","properties":{"action":{"$ref":"#/definitions/v1NotificationAction","description":"Describes actions for the notification","type":"object"},"metadata":{"$ref":"#/definitions/v1ObjectMeta","type":"object"},"relatedObject":{"$ref":"#/definitions/v1RelatedObject","type":"object"},"source":{"$ref":"#/definitions/v1NotificationSource","description":"Describes origin info for the notification","type":"object"},"type":{"description":"Describes type of notification. Possible values [NotificationPackUpdate, NotificationPackRegistryUpdate, NotificationNone]","enum":["NotificationPackUpdate","NotificationPackRegistryUpdate","NotificationNone"],"type":"string"}},"type":"object"},"v1NotificationAction":{"description":"Describes actions for the notification","properties":{"ack":{"description":"Describes the acknowledgement status for the notification","type":"boolean","x-omitempty":false},"actionMessage":{"description":"Describes information related to notification action","type":"string"},"actionType":{"description":"Describes action type for the notification. Possible Values [NotifyActionPacksUpdate, NotifyActionClusterProfileUpdate, NotifyActionPackRegistryUpdate, NotifyActionClusterUpdate, NotifyActionNone]","enum":["NotifyActionPacksUpdate","NotifyActionClusterProfileUpdate","NotifyActionPackRegistryUpdate","NotifyActionClusterUpdate","NotifyActionNone"],"type":"string"},"events":{"additionalProperties":{"additionalProperties":{"type":"string"},"type":"object"},"description":"Describes the events happened for the notifications","type":"object"},"isDone":{"description":"Describes the \"Done\" status for the notification","type":"boolean","x-omitempty":false},"isInfo":{"description":"Describes the notification as a information","type":"boolean","x-omitempty":false},"link":{"type":"string"}},"type":"object"},"v1NotificationEvent":{"description":"Describes notification event details","properties":{"component":{"description":"Describes component of notification event","type":"string"},"digest":{"description":"Describes notification event digest","type":"string"},"message":{"description":"Describes a information for the notification event","type":"string"},"meta":{"additionalProperties":{"type":"string"},"description":"Describes a event messages with meta digest as the key","type":"object"},"type":{"description":"Describes notification event type","enum":["NotificationPackSync","NotificationClusterProfileSync"],"type":"string"}},"type":"object"},"v1NotificationSource":{"description":"Describes origin info for the notification","properties":{"component":{"description":"Describes component where notification originated","type":"string"}},"type":"object"},"v1Notifications":{"description":"Describe a list of generated notifications","properties":{"items":{"description":"Describe a list of generated notifications","items":{"$ref":"#/definitions/v1Notification"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData","description":"Describes the meta information about the notification lists"}},"required":["items"],"type":"object"},"v1OS":{"properties":{"family":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1ObjectEntity":{"description":"Object identity meta","properties":{"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1ObjectMeta":{"description":"ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.","properties":{"annotations":{"additionalProperties":{"type":"string"},"description":"Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.","type":"object"},"creationTimestamp":{"$ref":"#/definitions/v1Time","description":"CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value.\nPopulated by the system. Read-only."},"deletionTimestamp":{"$ref":"#/definitions/v1Time","description":"This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client.\nPopulated by the system. Read-only."},"labels":{"additionalProperties":{"type":"string"},"description":"Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag","type":"object"},"lastModifiedTimestamp":{"$ref":"#/definitions/v1Time","description":"LastModifiedTimestamp is a timestamp representing the server time when this object was last modified. It is not guaranteed to be set in happens-before order across separate operations. \nClients may not set this value. Populated by the system. Read-only."},"name":{"description":"Name of the resource.","type":"string"},"uid":{"description":"UID is the unique identifier generated for the resource. This is not an input field for any request.","type":"string"}},"type":"object"},"v1ObjectMetaInputEntity":{"description":"ObjectMeta input entity for object creation","properties":{"annotations":{"additionalProperties":{"type":"string"},"description":"Annotations are system generated key value metadata for the resource. As an input certain annotations like description can be set.","type":"object"},"labels":{"additionalProperties":{"type":"string"},"description":"Labels are key value data to organize and categorize resources. Providing spectro__tag as value for a label is considered as a kubernetes compliant tag","type":"object"},"name":{"description":"Name of the resource.","type":"string"}},"type":"object"},"v1ObjectMetaInputEntitySchema":{"description":"Resource metadata","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"}},"required":["metadata"],"type":"object"},"v1ObjectMetaUpdateEntity":{"description":"ObjectMeta update entity with uid as input","properties":{"annotations":{"additionalProperties":{"type":"string"},"type":"object"},"labels":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1ObjectReference":{"description":"ObjectReference contains enough information to let you inspect or modify the referred object.","properties":{"kind":{"description":"Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds","type":"string"},"name":{"description":"Name of the referent.","type":"string"},"uid":{"description":"UID of the referent.","type":"string"}},"type":"object"},"v1ObjectResReference":{"description":"Object resource reference","properties":{"kind":{"type":"string"},"name":{"type":"string"},"projectUid":{"type":"string"},"tenantUid":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1ObjectScopeEntity":{"description":"Object scope identity meta","properties":{"name":{"type":"string"},"scope":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1ObjectTagsEntity":{"description":"Object identity meta with tags","properties":{"labels":{"additionalProperties":{"type":"string"},"type":"object"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1OciImageRegistry":{"description":"Oci Image Registry","properties":{"baseContentPath":{"description":"baseContentPath is the root path for the registry content","type":"string"},"caCert":{"type":"string"},"endpoint":{"type":"string"},"insecureSkipVerify":{"type":"boolean"},"mirrorRegistries":{"description":"mirrorRegistries contains the array of image sources like gcr.io, ghcr.io, docker.io","type":"string"},"name":{"type":"string"},"password":{"type":"string"},"username":{"type":"string"}},"type":"object"},"v1OciRegistries":{"properties":{"items":{"items":{"$ref":"#/definitions/v1OciRegistry"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1OciRegistry":{"description":"Oci registry information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1OciRegistrySpec"},"status":{"$ref":"#/definitions/v1OciRegistryStatusSummary"}},"type":"object"},"v1OciRegistryAuth":{"description":"Auth credentials of the oci registry","properties":{"password":{"description":"Password in the credentials","format":"password","type":"string"},"username":{"description":"Username in the credentials","type":"string"}},"type":"object"},"v1OciRegistryEntity":{"description":"Oci registry credentials","properties":{"auth":{"$ref":"#/definitions/v1RegistryAuth"},"defaultRegion":{"type":"string"},"endpoint":{"type":"string"},"providerType":{"type":"string"},"scope":{"type":"string"},"type":{"type":"string"}},"type":"object"},"v1OciRegistrySpec":{"description":"Image registry spec","properties":{"defaultRegion":{"type":"string"},"endpoint":{"type":"string"},"isPrivate":{"type":"boolean"},"providerType":{"type":"string"},"registryType":{"type":"string"},"scope":{"type":"string"}},"type":"object"},"v1OciRegistryStatusSummary":{"description":"OCI registry status summary","properties":{"sync":{"$ref":"#/definitions/v1RegistrySyncStatus"}}},"v1OidcAuth":{"properties":{"oidcToken":{"type":"string"},"org":{"type":"string"}},"type":"object"},"v1OidcAuthLogin":{"properties":{"emailId":{"type":"string"},"password":{"format":"password","type":"string"}},"type":"object"},"v1OidcAuthorizationTokenResponse":{"properties":{"access_token":{"type":"string"},"error":{"type":"string"},"error_description":{"type":"string"},"expires_in":{"type":"integer"},"id_token":{"type":"string"},"raw":{"type":"object"},"refresh_token":{"type":"string"},"scope":{"type":"string"}},"type":"object"},"v1OidcLogins":{"description":"loginsDetails","properties":{"systemLogins":{"items":{"$ref":"#/definitions/v1SsoLogin"},"type":"array","uniqueItems":true},"tenantLogin":{"properties":{"authType":{"type":"string"},"redirectUrl":{"type":"string"}},"type":"object"}},"type":"object"},"v1OidcRefreshToken":{"description":"oidc request with token","properties":{"token":{"type":"string"}},"type":"object"},"v1OpenIDProviderMetadataResponse":{"properties":{"authorization_endpoint":{"description":"REQUIRED. URL of the OP's OAuth 2.0 Authorization Endpoint","type":"string"},"claims_supported":{"description":"RECOMMENDED. JSON array containing a list of the Claim Names of the Claims that the OpenID Provider MAY be able to supply values for","type":"string"},"id_token_signing_alg_values_supported":{"description":"REQUIRED. JSON array containing a list of the JWS signing algorithms (alg values) supported by the OP for the ID Token to encode the Claims in a JWT","type":"object"},"issuer":{"description":"REQUIRED. URL using the https scheme with no query or fragment component that the OP asserts as its Issuer Identifier","type":"string"},"jwks_uri":{"description":"REQUIRED. URL of the OP's JSON Web Key Set [JWK] document.","type":"string"},"registration_endpoint":{"description":"RECOMMENDED. URL of the OP's Dynamic Client Registration Endpoint","type":"string"},"response_types_supported":{"description":"REQUIRED. JSON array containing a list of the OAuth 2.0 response_type values that this OP supports","type":"string"},"scopes_supported":{"description":"RECOMMENDED. JSON array containing a list of the OAuth 2.0 [RFC6749] scope values that this server supports","type":"string"},"subject_types_supported":{"description":"REQUIRED. JSON array containing a list of the Subject Identifier types that this OP supports","type":"string"},"token_endpoint":{"description":"URL of the OP's OAuth 2.0 Token Endpoint","type":"string"},"userinfo_endpoint":{"description":"RECOMMENDED. URL of the OP's UserInfo Endpoint","type":"string"}},"type":"object"},"v1OpenStackAccount":{"description":"OpenStack account information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the account.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1OpenStackCloudAccount"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1OpenStackAccounts":{"properties":{"items":{"items":{"$ref":"#/definitions/v1OpenStackAccount"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1OpenStackAz":{"description":"OpenStack az entity","properties":{"name":{"description":"Name of OpenStack az","type":"string"}},"type":"object"},"v1OpenStackAzs":{"description":"List of OpenStack azs","properties":{"azs":{"items":{"$ref":"#/definitions/v1OpenStackAz"},"type":"array","uniqueItems":true}},"required":["azs"],"type":"object"},"v1OpenStackCloudAccount":{"description":"auth-url,project,username,password,domain,cacert etc","properties":{"caCert":{"description":"Ca cert for OpenStack","type":"string"},"defaultDomain":{"description":"Default Domain name","type":"string"},"defaultProject":{"description":"Default Project name","type":"string"},"identityEndpoint":{"description":"Identity endpoint for OpenStack","type":"string"},"insecure":{"description":"For self signed certs in IdentityEndpoint","type":"boolean"},"parentRegion":{"description":"Parent region of OpenStack","type":"string"},"password":{"description":"Password of OpenStack account","type":"string"},"username":{"description":"Username of OpenStack account","type":"string"}},"required":["identityEndpoint","username","password"],"type":"object"},"v1OpenStackCloudClusterConfigEntity":{"description":"Openstack cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1OpenStackClusterConfig"}},"type":"object"},"v1OpenStackCloudConfig":{"description":"OpenStackCloudConfig is the Schema for the OpenStackcloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1OpenStackCloudConfigSpec"},"status":{"$ref":"#/definitions/v1OpenStackCloudConfigStatus"}},"type":"object"},"v1OpenStackCloudConfigSpec":{"description":"OpenStackCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"cloudAccountRef should point to the secret which contains OpenStackCloudAccount"},"clusterConfig":{"$ref":"#/definitions/v1OpenStackClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1OpenStackMachinePoolConfig"},"type":"array"}},"type":"object"},"v1OpenStackCloudConfigStatus":{"description":"OpenStackCloudConfigStatus defines the observed state of OpenStackCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool","properties":{"conditions":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"nodeImage":{"type":"string"},"sourceImageId":{"description":"sourceImageId, it can be from packref's annotations or from pack.json","type":"string"},"useCapiImage":{"type":"boolean"}},"type":"object"},"v1OpenStackClusterConfig":{"description":"Cluster level configuration for OpenStack cloud and applicable for all the machine pools","properties":{"bastionDisabled":{"description":"Create bastion node option we have earlier supported creation of bastion by default","type":"boolean"},"dnsNameservers":{"description":"DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.","items":{"type":"string"},"type":"array"},"domain":{"$ref":"#/definitions/v1OpenStackResource"},"network":{"$ref":"#/definitions/v1OpenStackResource","description":"For static placement"},"nodeCidr":{"description":"For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.","type":"string"},"project":{"$ref":"#/definitions/v1OpenStackResource"},"region":{"type":"string"},"sshKeyName":{"type":"string"},"subnet":{"$ref":"#/definitions/v1OpenStackResource"}},"type":"object"},"v1OpenStackDomain":{"description":"OpenStack domain. A Domain is a collection of projects, users, and roles","properties":{"description":{"description":"Description is the description of the Domain","type":"string"},"id":{"description":"ID is the unique ID of the domain","type":"string"},"name":{"description":"Name is the name of the domain","type":"string"}},"type":"object"},"v1OpenStackFlavor":{"description":"OpenStack flavor entity. Flavor represent (virtual) hardware configurations for server resources","properties":{"disk":{"description":"Disk is the amount of root disk, measured in GB","type":"integer"},"ephemeral":{"description":"Ephemeral is the amount of ephemeral disk space, measured in GB","type":"integer"},"id":{"description":"ID is the flavor's unique ID","type":"string"},"memory":{"description":"Amount of memory, measured in MB","type":"integer"},"name":{"description":"Name is the name of the flavor","type":"string"},"vcpus":{"description":"VCPUs indicates how many (virtual) CPUs are available for this flavor","type":"integer"}},"type":"object"},"v1OpenStackFlavors":{"description":"List of OpenStack flavours","properties":{"items":{"items":{"$ref":"#/definitions/v1OpenStackFlavor"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1OpenStackKeypair":{"description":"OpenStack keypair. KeyPair is an SSH key known to the OpenStack Cloud that is available to be injected into servers","properties":{"name":{"description":"Name is used to refer to this keypair from other services within this region","type":"string"},"publicKey":{"description":"PublicKey is the public key from this pair, in OpenSSH format","type":"string"}},"type":"object"},"v1OpenStackKeypairs":{"description":"List of OpenStack keypairs","properties":{"items":{"items":{"$ref":"#/definitions/v1OpenStackKeypair"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1OpenStackMachine":{"description":"OpenStack cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1OpenStackMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1OpenStackMachineConfigEntity":{"properties":{"azs":{"description":"for master pool, this will be the failure domains for kcp","items":{"type":"string"},"type":"array"},"flavorConfig":{"$ref":"#/definitions/v1OpenstackFlavorConfig"}},"required":["flavorConfig"],"type":"object"},"v1OpenStackMachinePoolCloudConfigEntity":{"properties":{"azs":{"description":"for master pool, this will be the failure domains for kcp","items":{"type":"string"},"type":"array"},"diskGiB":{"description":"Root disk size","format":"int32","type":"integer"},"flavorConfig":{"$ref":"#/definitions/v1OpenstackFlavorConfig"},"subnet":{"$ref":"#/definitions/v1OpenStackResource"}},"required":["flavorConfig"],"type":"object"},"v1OpenStackMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"azs":{"description":"for master pool, this will be the failure domains for kcp","items":{"type":"string"},"type":"array"},"diskGiB":{"description":"DiskGiB is used to configure rootVolume, the volume metadata to boot from","format":"int32","type":"integer"},"flavor":{"description":"Openstack flavor name, only return argument","type":"string"},"flavorConfig":{"$ref":"#/definitions/v1OpenstackFlavorConfig","description":"Openstack flavor configuration, input argument"},"image":{"type":"string"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean"},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"subnet":{"$ref":"#/definitions/v1OpenStackResource"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean"}},"required":["flavorConfig"],"type":"object"},"v1OpenStackMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1OpenStackMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"required":["cloudConfig"],"type":"object"},"v1OpenStackMachineSpec":{"description":"OpenStack cloud VM definition spec","properties":{"az":{"type":"string"},"image":{"type":"string"},"instanceType":{"$ref":"#/definitions/v1GenericInstanceType","description":"Instance flavor of the machine with cpu and memory info"},"nics":{"items":{"$ref":"#/definitions/v1OpenStackNic"},"type":"array"},"projectId":{"type":"string"},"securityGroups":{"items":{"type":"string"},"type":"array"},"sshKeyName":{"type":"string"}},"required":["instanceType","nics"],"type":"object"},"v1OpenStackMachines":{"description":"OpenStack machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1OpenStackMachine"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1OpenStackNetwork":{"description":"OpenStack network","properties":{"description":{"description":"Description of OpenStack network","type":"string"},"id":{"description":"Id of OpenStack network","type":"string"},"name":{"description":"Name of OpenStack network","type":"string"},"subnets":{"description":"Subnets associated with OpenStack network","items":{"$ref":"#/definitions/v1OpenStackSubnet"},"type":"array","uniqueItems":true}},"type":"object"},"v1OpenStackNetworks":{"description":"List of OpenStack networks","properties":{"items":{"items":{"$ref":"#/definitions/v1OpenStackNetwork"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1OpenStackNic":{"description":"OpenStack network interface","properties":{"index":{"format":"int8","type":"integer"},"networkName":{"type":"string"},"privateIPs":{"items":{"type":"string"},"type":"array"}},"required":["networkName"],"type":"object"},"v1OpenStackProject":{"description":"Project represents an OpenStack Identity Project","properties":{"description":{"description":"Description is the description of the project","type":"string"},"domainId":{"description":"DomainID is the domain ID the project belongs to","type":"string"},"id":{"description":"ID is the unique ID of the project","type":"string"},"name":{"description":"Name is the name of the project","type":"string"},"parentProjectId":{"description":"ParentID is the parent_id of the project","type":"string"}},"type":"object"},"v1OpenStackProjects":{"description":"Array of OpenStack projects","properties":{"items":{"items":{"$ref":"#/definitions/v1OpenStackProject"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1OpenStackRegion":{"description":"OpenStack region entity","properties":{"description":{"description":"Description of OpenStack region","type":"string"},"id":{"description":"Id of OpenStack region","type":"string"},"parentRegionId":{"description":"Parent region id of OpenStack region","type":"string"}},"type":"object"},"v1OpenStackRegions":{"description":"List of OpenStack regions and domains","properties":{"domains":{"description":"List of OpenStack domains","items":{"$ref":"#/definitions/v1OpenStackDomain"},"type":"array","uniqueItems":true},"regions":{"description":"List of OpenStack regions","items":{"$ref":"#/definitions/v1OpenStackRegion"},"type":"array","uniqueItems":true}},"required":["regions","domains"],"type":"object"},"v1OpenStackResource":{"properties":{"id":{"type":"string"},"name":{"type":"string"}},"type":"object"},"v1OpenStackSubnet":{"description":"OpenStack subnet entity","properties":{"description":{"description":"Description for the network","type":"string"},"id":{"description":"UUID for the network","type":"string"},"name":{"description":"Human-readable name for the network. Might not be unique","type":"string"}},"type":"object"},"v1OpenstackFlavorConfig":{"properties":{"diskGiB":{"description":"DiskGiB is the size of a virtual machine's disk, in GiB.","format":"int32","type":"integer"},"memoryMiB":{"description":"MemoryMiB is the size of a virtual machine's memory, in MiB.","format":"int64","type":"integer"},"name":{"description":"Openstack flavor name","type":"string"},"numCPUs":{"description":"NumCPUs is the number of virtual processors in a virtual machine.","format":"int32","type":"integer"}},"required":["name"]},"v1OrgState":{"description":"Org state","properties":{"state":{"type":"string"}},"type":"object"},"v1Organization":{"description":"Describes user's organization details","properties":{"authType":{"description":"Describes user's enabled authorization mode","type":"string"},"name":{"description":"Describes user's organization name","type":"string"},"redirectUrl":{"description":"Describes user's organization authentication url","type":"string"},"ssoLogins":{"$ref":"#/definitions/v1SsoLogins","description":"Describes a list of allowed social logins for the organization"}},"type":"object"},"v1Organizations":{"description":"Returns a list of user's organizations details and login methods","properties":{"organizations":{"description":"Describes a list of user's organization","items":{"$ref":"#/definitions/v1Organization"},"type":"array","uniqueItems":true}},"type":"object"},"v1OsPatchConfig":{"properties":{"onDemandPatchAfter":{"$ref":"#/definitions/v1Time","description":"OnDemandPatchAfter is the desired time for one time on-demand patch"},"patchOnBoot":{"description":"PatchOnBoot indicates need to do patch when node first boot up, only once","type":"boolean","x-omitempty":false},"rebootIfRequired":{"description":"Reboot once the OS patch is applied","type":"boolean","x-omitempty":false},"schedule":{"description":"The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.","type":"string"}},"type":"object"},"v1OsPatchEntity":{"properties":{"osPatchConfig":{"$ref":"#/definitions/v1OsPatchConfig"}},"type":"object"},"v1OsType":{"default":"Linux","enum":["Linux","Windows"],"type":"string"},"v1OverloadSpec":{"description":"Overload spec","properties":{"cloudAccountUid":{"type":"string","x-omitempty":false},"ipAddress":{"type":"string"},"ipPools":{"items":{"$ref":"#/definitions/v1IpPoolEntity"},"type":"array"},"isSelfHosted":{"type":"boolean"},"isSystem":{"type":"boolean"},"spectroClusterUid":{"type":"string","x-omitempty":false},"tenantUid":{"type":"string"}},"type":"object"},"v1OverloadStatus":{"description":"Overload status","properties":{"health":{"$ref":"#/definitions/v1SpectroClusterHealthStatus"},"isActive":{"type":"boolean","x-omitempty":false},"isReady":{"type":"boolean","x-omitempty":false},"kubectlCommands":{"items":{"type":"string"},"type":"array","uniqueItems":true},"state":{"type":"string"}},"type":"object"},"v1OverloadVsphereOva":{"description":"Overload ova details","properties":{"location":{"type":"string","x-omitempty":false}},"type":"object"},"v1Overlord":{"description":"Overlord defintiion","properties":{"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1OverloadSpec"},"status":{"$ref":"#/definitions/v1OverloadStatus"}},"type":"object"},"v1OverlordMaasAccountCreate":{"properties":{"account":{"$ref":"#/definitions/v1MaasCloudAccount"},"name":{"description":"Name for the private gateway \u0026 cloud account","type":"string"},"shareWithProjects":{"type":"boolean","x-omitempty":false}}},"v1OverlordMaasAccountEntity":{"properties":{"account":{"$ref":"#/definitions/v1MaasCloudAccount"},"shareWithProjects":{"type":"boolean","x-omitempty":false}}},"v1OverlordMaasCloudConfig":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1MaasClusterConfig"},"clusterProfiles":{"description":"Cluster profiles pack configuration for private gateway cluster","items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"},"clusterSettings":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"clusterSettings is the generic configuration related to a cluster like OS patch, Rbac, Namespace allocation"},"machineConfig":{"$ref":"#/definitions/v1MaasMachineConfigEntity"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"}}},"v1OverlordManifest":{"description":"overlord manifest","properties":{"manifest":{"type":"string"}},"type":"object"},"v1OverlordMigrateEntity":{"properties":{"sourceUid":{"type":"string"},"targetUid":{"type":"string"}}},"v1OverlordOpenStackAccountCreate":{"properties":{"account":{"$ref":"#/definitions/v1OpenStackCloudAccount"},"name":{"description":"Name for the private gateway \u0026 cloud account","type":"string"},"shareWithProjects":{"type":"boolean","x-omitempty":false}}},"v1OverlordOpenStackAccountEntity":{"properties":{"account":{"$ref":"#/definitions/v1OpenStackCloudAccount"},"shareWithProjects":{"type":"boolean","x-omitempty":false}}},"v1OverlordOpenStackCloudConfig":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1OpenStackClusterConfig"},"clusterProfiles":{"description":"Cluster profiles pack configuration for private gateway cluster","items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"},"clusterSettings":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"clusterSettings is the generic configuration related to a cluster like OS patch, Rbac, Namespace allocation"},"machineConfig":{"$ref":"#/definitions/v1OpenStackMachineConfigEntity"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"}}},"v1OverlordVsphereAccountCreate":{"properties":{"account":{"$ref":"#/definitions/v1VsphereCloudAccount"},"name":{"description":"Name for the private gateway \u0026 cloud account","type":"string"},"shareWithProjects":{"type":"boolean","x-omitempty":false}}},"v1OverlordVsphereAccountEntity":{"properties":{"account":{"$ref":"#/definitions/v1VsphereCloudAccount"},"shareWithProjects":{"type":"boolean","x-omitempty":false}}},"v1OverlordVsphereCloudConfig":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1VsphereOverlordClusterConfigEntity"},"clusterProfiles":{"description":"Cluster profiles pack configuration for private gateway cluster","items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"},"clusterSettings":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"clusterSettings is the generic configuration related to a cluster like OS patch, Rbac, Namespace allocation"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"}}},"v1Overlords":{"description":"Array of Overlords","properties":{"items":{"items":{"$ref":"#/definitions/v1Overlord"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1PackConfig":{"description":"Pack configuration","properties":{"spec":{"$ref":"#/definitions/v1PackConfigSpec"}},"type":"object"},"v1PackConfigSpec":{"properties":{"associatedObject":{"type":"string"},"isValuesOverridden":{"type":"boolean","x-omitempty":false},"manifests":{"items":{"$ref":"#/definitions/v1PackManifestRef"},"type":"array"},"name":{"type":"string"},"packUid":{"type":"string"},"scope":{"type":"string"},"tag":{"type":"string"},"type":{"type":"string"},"values":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1PackDependency":{"description":"Pack template dependency","properties":{"layer":{"description":"Pack template dependency pack layer","type":"string"},"name":{"description":"Pack template dependency pack name","type":"string"},"readOnly":{"description":"If true then dependency pack values can't be overridden","type":"boolean"}},"type":"object"},"v1PackDependencyMeta":{"description":"Pack dependency metadata","properties":{"displayName":{"description":"Pack display name","type":"string"},"logoUrl":{"description":"Pack logo url","type":"string"},"name":{"description":"Pack name","type":"string"},"registryUid":{"description":"Pack registry uid","type":"string"},"uid":{"description":"Pack uid","type":"string"},"version":{"description":"Pack version","type":"string"}},"type":"object"},"v1PackEntity":{"description":"Pack object","properties":{"layer":{"description":"Pack layer","type":"string"},"name":{"description":"Pack name","type":"string"},"tag":{"description":"Pack tag","type":"string"},"type":{"$ref":"#/definitions/v1PackType"},"uid":{"description":"Pack uid","type":"string"},"values":{"description":"values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values","type":"string"}},"required":["uid","name"],"type":"object"},"v1PackFilterSpec":{"description":"Packs filter spec","properties":{"addOnSubType":{"description":"Pack add-on sub type such as monitoring, db etc","items":{"type":"string"},"type":"array","uniqueItems":true},"addOnType":{"description":"Pack add-on type such as logging, monitoring, security etc","items":{"type":"string"},"type":"array","uniqueItems":true},"displayName":{"$ref":"#/definitions/v1FilterString"},"environment":{"description":"Pack supported cloud types","items":{"type":"string"},"type":"array","uniqueItems":true},"isFips":{"description":"isFips compliant","type":"boolean"},"layer":{"description":"Pack layer","items":{"$ref":"#/definitions/v1PackLayer"},"type":"array","uniqueItems":true},"name":{"$ref":"#/definitions/v1FilterString"},"registryUid":{"description":"Pack registry uid","items":{"type":"string"},"type":"array","uniqueItems":true},"source":{"description":"The source filter describes the creation origin/source of the pack. Ex. source can be \"spectrocloud\" or \"community\"","items":{"type":"string"},"type":"array","uniqueItems":true},"state":{"description":"Pack state such as deprecated or disabled","items":{"type":"string"},"type":"array","uniqueItems":true},"type":{"description":"Pack type","items":{"$ref":"#/definitions/v1PackType"},"type":"array","uniqueItems":true}}},"v1PackImportEntity":{"description":"Pack import request payload","properties":{"layer":{"description":"Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]","type":"string"},"manifests":{"description":"Pack manifests array","items":{"$ref":"#/definitions/v1PackManifestImportEntity"},"type":"array"},"name":{"description":"Pack name","type":"string"},"registry":{"$ref":"#/definitions/v1PackRegistryImportEntity"},"tag":{"description":"Pack version tag","type":"string"},"type":{"description":"Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]","type":"string"},"values":{"description":"Pack values are the customizable configurations for the pack","type":"string"},"version":{"description":"Pack version","type":"string"}},"type":"object"},"v1PackInputEntity":{"description":"Pack request payload","properties":{"pack":{"$ref":"#/definitions/v1PackManifestEntity"}}},"v1PackLayer":{"enum":["kernel","os","k8s","cni","csi","addon"],"type":"string"},"v1PackManifestEntity":{"description":"Pack request payload","properties":{"layer":{"description":"Pack layer","type":"string"},"manifests":{"description":"Pack manifests are additional content as part of the profile","items":{"$ref":"#/definitions/v1ManifestInputEntity"},"type":"array"},"name":{"description":"Pack name","type":"string"},"registryUid":{"description":"Pack registry uid","type":"string"},"tag":{"description":"Pack tag","type":"string"},"type":{"$ref":"#/definitions/v1PackType"},"uid":{"description":"Pack uid","type":"string"},"values":{"description":"Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values","type":"string"}},"required":["name"],"type":"object"},"v1PackManifestImportEntity":{"description":"Pack manifest import objct","properties":{"content":{"description":"Pack manifest content in yaml","type":"string"},"name":{"description":"Pack manifest name","type":"string"}},"type":"object"},"v1PackManifestRef":{"properties":{"digest":{"type":"string"},"isOverridden":{"type":"boolean","x-omitempty":false},"name":{"type":"string"},"parentUid":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1PackManifestUpdateEntity":{"description":"Pack input entity with values to overwrite and manifests for the intial creation","properties":{"layer":{"description":"Pack layer","type":"string"},"manifests":{"description":"Pack manifests are additional content as part of the profile","items":{"$ref":"#/definitions/v1ManifestRefUpdateEntity"},"type":"array"},"name":{"description":"Pack name","type":"string"},"registryUid":{"description":"Pack registry uid","type":"string"},"tag":{"description":"Pack tag","type":"string"},"type":{"$ref":"#/definitions/v1PackType"},"uid":{"description":"Pack uid","type":"string"},"values":{"description":"Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values","type":"string"}},"required":["name"],"type":"object"},"v1PackManifests":{"properties":{"items":{"description":"Manifests array","items":{"$ref":"#/definitions/v1Manifest"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1PackManifestsSpec":{"description":"Pack manifests spec","properties":{"addonType":{"description":"Pack add-on type such as logging, monitoring, security etc","type":"string"},"annotations":{"additionalProperties":{"type":"string"},"description":"Pack annotations is used to allow pack to add more arbitrary configurations","type":"object"},"cloudTypes":{"description":"Pack supported cloud types","items":{"type":"string"},"type":"array"},"digest":{"description":"Pack digest","type":"string"},"displayName":{"description":"Pack display name","type":"string"},"eol":{"description":"Pack end of life, date format: yyyy-MM-dd","type":"string"},"group":{"description":"Pack group","type":"string"},"layer":{"$ref":"#/definitions/v1PackLayer"},"logoUrl":{"description":"Pack logo url","type":"string"},"manifests":{"description":"Pack manifests are additional content as part of the cluster profile","items":{"$ref":"#/definitions/v1ManifestSummary"},"type":"array"},"name":{"description":"Pack name","type":"string"},"presets":{"description":"Pack presets are the set of configurations applied on user selection of presets","items":{"$ref":"#/definitions/v1PackPreset"},"type":"array"},"registryUid":{"description":"Pack registry uid","type":"string"},"schema":{"description":"Pack schema contains constraints such as data type, format, hints for the pack values","items":{"$ref":"#/definitions/v1PackSchema"},"type":"array"},"type":{"$ref":"#/definitions/v1PackType"},"values":{"description":"Pack values","type":"string"},"version":{"description":"Pack version","type":"string"}},"type":"object"},"v1PackMetadata":{"description":"Pack metadata object","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Not used for the resource info.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1PackMetadataSpec"}},"type":"object"},"v1PackMetadataList":{"description":"List of packs metadata","properties":{"items":{"description":"Packs metadata array","items":{"$ref":"#/definitions/v1PackMetadata"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1PackMetadataSpec":{"description":"Pack metadata spec","properties":{"addonSubType":{"description":"Pack add-on sub type such as monitoring, db etc","type":"string"},"addonType":{"description":"Pack add-on type such as logging, monitoring, security etc","type":"string"},"cloudTypes":{"description":"Pack supported cloud types","items":{"type":"string"},"type":"array"},"displayName":{"description":"Pack display name","type":"string"},"group":{"description":"Pack group","type":"string"},"layer":{"$ref":"#/definitions/v1PackLayer"},"name":{"description":"Pack name","type":"string"},"registries":{"description":"Pack registries array","items":{"$ref":"#/definitions/v1RegistryPackMetadata"},"type":"array"},"type":{"$ref":"#/definitions/v1PackType"}},"type":"object"},"v1PackParamsEntity":{"description":"Pack params request payload","properties":{"references":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1PackPreset":{"description":"PackPreset defines the preset pack values","properties":{"add":{"type":"string","x-omitempty":false},"displayName":{"type":"string","x-omitempty":false},"group":{"type":"string","x-omitempty":false},"name":{"type":"string","x-omitempty":false},"remove":{"items":{"type":"string"},"type":"array","x-omitempty":false}},"type":"object"},"v1PackReadme":{"properties":{"readme":{"description":"Readme describes the documentation of the specified pack","type":"string"}}},"v1PackRef":{"description":"PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it","properties":{"annotations":{"additionalProperties":{"type":"string"},"description":"Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml","type":"object"},"digest":{"description":"digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade","type":"string"},"inValidReason":{"type":"string"},"isInvalid":{"description":"pack is invalid when the associated tag is deleted from the registry","type":"boolean"},"layer":{"enum":["kernel","os","k8s","cni","csi","addon"],"type":"string"},"logo":{"description":"path to the pack logo","type":"string"},"manifests":{"items":{"$ref":"#/definitions/v1ObjectReference"},"type":"array"},"name":{"description":"pack name","type":"string"},"packUid":{"description":"PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.","type":"string"},"params":{"additionalProperties":{"type":"string"},"description":"params passed as env variables to be consumed at installation time","type":"object"},"presets":{"items":{"$ref":"#/definitions/v1PackPreset"},"type":"array"},"registryUid":{"description":"pack registry uid","type":"string"},"schema":{"items":{"$ref":"#/definitions/v1PackSchema"},"type":"array"},"server":{"description":"pack registry server or helm repo","type":"string"},"tag":{"description":"pack tag","type":"string"},"type":{"description":"type of the pack","enum":["spectro","helm","manifest"],"type":"string"},"values":{"description":"values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values","type":"string"},"version":{"description":"pack version","type":"string"}},"required":["layer","name"],"type":"object"},"v1PackRefSummary":{"description":"Pack ref summary","properties":{"addonType":{"type":"string"},"annotations":{"additionalProperties":{"type":"string"},"type":"object"},"displayName":{"type":"string"},"layer":{"$ref":"#/definitions/v1PackLayer"},"logoUrl":{"type":"string"},"name":{"type":"string"},"packUid":{"type":"string"},"tag":{"type":"string"},"type":{"type":"string"},"version":{"type":"string"}}},"v1PackRefSummaryResponse":{"description":"Pack summary response","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1PackRefSummarySpec"}},"type":"object"},"v1PackRefSummarySpec":{"description":"Pack summary spec","properties":{"macros":{"$ref":"#/definitions/v1PackResolvedValues"},"pack":{"$ref":"#/definitions/v1PackSummarySpec"},"registry":{"$ref":"#/definitions/v1RegistryMetadata"}}},"v1PackRegistries":{"properties":{"items":{"items":{"$ref":"#/definitions/v1PackRegistry"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1PackRegistriesSummary":{"description":"Pack Registries Summary","properties":{"items":{"items":{"$ref":"#/definitions/v1PackRegistrySummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1PackRegistry":{"description":"Pack registry information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Not used for the resource info.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1PackRegistrySpec"},"status":{"$ref":"#/definitions/v1PackRegistryStatus"}},"type":"object"},"v1PackRegistryImportEntity":{"description":"Pack registry import entity","properties":{"matchingRegistries":{"items":{"$ref":"#/definitions/v1PackRegistryMetadata"},"type":"array"},"metadata":{"$ref":"#/definitions/v1PackRegistryMetadata"}},"type":"object"},"v1PackRegistryMetadata":{"description":"Pack registry metadata","properties":{"isPrivate":{"description":"If true then pack registry is private and is not accessible for the pack sync","type":"boolean","x-omitempty":false},"kind":{"description":"Pack registry kind [ \"pack\", \"helm\", \"oci\" ]","type":"string"},"name":{"description":"Pack registry name","type":"string"},"providerType":{"description":"OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]","type":"string"},"uid":{"description":"Pack registry uid","type":"string"}},"type":"object"},"v1PackRegistrySpec":{"description":"Pack registry credentials spec","properties":{"auth":{"$ref":"#/definitions/v1RegistryAuth"},"endpoint":{"type":"string"},"name":{"type":"string"},"private":{"type":"boolean","x-omitempty":false},"registryUid":{"description":"Pack registry uid","type":"string"},"scope":{"type":"string"}},"required":["endpoint","auth"],"type":"object"},"v1PackRegistrySpecSummary":{"description":"Pack Registry spec summary","properties":{"endpoint":{"type":"string"},"private":{"type":"boolean","x-omitempty":false},"scope":{"type":"string"}},"type":"object"},"v1PackRegistryStatus":{"description":"Status of the pack registry","properties":{"packSyncStatus":{"$ref":"#/definitions/v1RegistrySyncStatus"}},"type":"object"},"v1PackRegistryStatusSummary":{"description":"Pack registry status summary","properties":{"sync":{"$ref":"#/definitions/v1RegistrySyncStatus"}},"type":"object"},"v1PackRegistrySummary":{"description":"Pack Registry summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1PackRegistrySpecSummary"},"status":{"$ref":"#/definitions/v1PackRegistryStatusSummary"}},"type":"object"},"v1PackResolvedValues":{"description":"Pack resolved values","properties":{"resolved":{"additionalProperties":{"type":"string"},"description":"Pack resolved values map","type":"object"}}},"v1PackSchema":{"description":"PackSchema defines the schema definition, hints for the pack values","properties":{"format":{"type":"string","x-omitempty":false},"hints":{"items":{"type":"string"},"type":"array","x-omitempty":false},"listOptions":{"items":{"type":"string"},"type":"array","x-omitempty":false},"name":{"type":"string","x-omitempty":false},"readonly":{"type":"boolean","x-omitempty":false},"regex":{"type":"string","x-omitempty":false},"required":{"type":"boolean","x-omitempty":false},"type":{"type":"string","x-omitempty":false}},"type":"object"},"v1PackSortFields":{"description":"Packs sort by fields","enum":["name","type","layer","addOnType","displayName"],"type":"string","x-nullable":true},"v1PackSortSpec":{"description":"Packs sort spec","properties":{"field":{"$ref":"#/definitions/v1PackSortFields"},"order":{"$ref":"#/definitions/v1SortOrder"}}},"v1PackSummaries":{"description":"List of packs","properties":{"items":{"description":"Packs array","items":{"$ref":"#/definitions/v1PackSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1PackSummary":{"description":"Pack summary object","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Not used for the resource info.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1PackSummarySpec"},"status":{"$ref":"#/definitions/v1PackSummaryStatus"}},"type":"object"},"v1PackSummarySpec":{"description":"Pack object","properties":{"addonSubType":{"description":"Pack add-on sub type such as monitoring, db etc","type":"string"},"addonType":{"description":"Pack add-on type such as logging, monitoring, security etc","type":"string"},"annotations":{"additionalProperties":{"type":"string"},"description":"Pack annotations is used to allow pack to add more arbitrary configurations","type":"object"},"cloudTypes":{"description":"Pack supported cloud types","items":{"type":"string"},"type":"array"},"digest":{"description":"Pack digest","type":"string"},"displayName":{"description":"Pack display name","type":"string"},"eol":{"description":"Pack end of life, date format: yyyy-MM-dd","type":"string"},"group":{"description":"Pack group","type":"string"},"layer":{"$ref":"#/definitions/v1PackLayer"},"logoUrl":{"description":"Pack logo url","type":"string"},"manifests":{"description":"Pack manifests are additional content as part of the cluster profile","items":{"$ref":"#/definitions/v1ObjectReference"},"type":"array"},"name":{"description":"Pack name","type":"string"},"presets":{"description":"Pack presets are the set of configurations applied on user selection of presets","items":{"$ref":"#/definitions/v1PackPreset"},"type":"array"},"registryUid":{"description":"Pack registry uid","type":"string"},"schema":{"description":"Pack schema contains constraints such as data type, format, hints for the pack values","items":{"$ref":"#/definitions/v1PackSchema"},"type":"array"},"template":{"$ref":"#/definitions/v1PackTemplate"},"type":{"$ref":"#/definitions/v1PackType"},"values":{"description":"Pack values","type":"string"},"version":{"description":"Pack version","type":"string"}},"type":"object"},"v1PackSummaryStatus":{"description":"Pack status","type":"object"},"v1PackTagEntity":{"description":"Pack object","properties":{"addonSubType":{"description":"Pack add-on sub type such as monitoring, db etc","type":"string"},"addonType":{"description":"Pack add-on type such as logging, monitoring, security etc","type":"string"},"cloudTypes":{"description":"Pack supported cloud types","items":{"type":"string"},"type":"array"},"displayName":{"description":"Pack display name","type":"string"},"layer":{"$ref":"#/definitions/v1PackLayer"},"logoUrl":{"description":"Pack logo url","type":"string"},"name":{"description":"Pack name","type":"string"},"packValues":{"description":"Pack values array","items":{"$ref":"#/definitions/v1PackUidValues"},"type":"array"},"registryUid":{"description":"Pack registry uid","type":"string"},"tags":{"description":"Pack version tags array","items":{"$ref":"#/definitions/v1PackTags"},"type":"array"}},"type":"object"},"v1PackTags":{"properties":{"group":{"description":"Pack group","type":"string"},"packUid":{"description":"Pack uid","type":"string"},"parentTags":{"description":"Pack version parent tags","items":{"type":"string"},"type":"array"},"tag":{"description":"Pack version tag","type":"string"},"version":{"description":"Pack version","type":"string"}},"type":"object"},"v1PackTemplate":{"description":"Pack template configuration","properties":{"manifest":{"description":"Pack template manifest content","type":"string"},"parameters":{"$ref":"#/definitions/v1PackTemplateParameters"},"values":{"description":"Pack template values","type":"string"}}},"v1PackTemplateParameter":{"description":"Pack template parameter","properties":{"description":{"description":"Pack template parameter description","type":"string"},"displayName":{"description":"Pack template parameter display name","type":"string"},"format":{"description":"Pack template parameter format","type":"string"},"hidden":{"description":"Pack template parameter hidden flag, if true then the parameter is hidden in the UI","type":"boolean"},"listOptions":{"description":"Pack template parameter list options as string array","items":{"type":"string"},"type":"array"},"name":{"description":"Pack template parameter name","type":"string"},"optional":{"description":"Pack template parameter optional flag, if true then the parameter value is not mandatory","type":"boolean"},"options":{"additionalProperties":{"$ref":"#/definitions/v1PackTemplateParameterOption","type":"object"},"description":"Pack template parameter options array","type":"object"},"readOnly":{"description":"Pack template parameter readonly flag, if true then the parameter value can't be overridden","type":"boolean"},"regex":{"description":"Pack template parameter regex, if set then parameter value must match with specified regex","type":"string"},"targetKey":{"description":"Pack template parameter target key which is mapped to the key defined in the pack values","type":"string"},"type":{"description":"Pack template parameter data type","type":"string"},"value":{"description":"Pack template parameter value","type":"string"}}},"v1PackTemplateParameterOption":{"description":"Pack template parameter option","properties":{"dependencies":{"description":"Pack template parameter dependencies","items":{"$ref":"#/definitions/v1PackDependency"},"type":"array"},"description":{"description":"Pack template parameter description","type":"string"},"label":{"description":"Pack template parameter label","type":"string"}},"type":"object"},"v1PackTemplateParameters":{"description":"Pack template parameters","properties":{"inputParameters":{"description":"Pack template input parameters array","items":{"$ref":"#/definitions/v1PackTemplateParameter"},"type":"array"},"outputParameters":{"description":"Pack template output parameters array","items":{"$ref":"#/definitions/v1PackTemplateParameter"},"type":"array"}}},"v1PackType":{"default":"spectro","enum":["spectro","helm","manifest","oci"],"type":"string"},"v1PackUidValues":{"properties":{"annotations":{"additionalProperties":{"type":"string"},"description":"Pack annotations is used to allow pack to add more arbitrary configurations","type":"object"},"dependencies":{"description":"Pack dependencies array","items":{"$ref":"#/definitions/v1PackDependencyMeta"},"type":"array"},"packUid":{"description":"Pack uid","type":"string"},"presets":{"description":"Pack presets are the set of configurations applied on user selection of presets","items":{"$ref":"#/definitions/v1PackPreset"},"type":"array"},"readme":{"description":"Readme describes the documentation of the specified pack","type":"string"},"schema":{"description":"Pack schema contains constraints such as data type, format, hints for the pack values","items":{"$ref":"#/definitions/v1PackSchema"},"type":"array"},"template":{"$ref":"#/definitions/v1PackTemplate"},"values":{"description":"Pack values represents the values.yaml used as input parameters","type":"string"}},"type":"object"},"v1PackUpdateEntity":{"description":"Pack update request payload","properties":{"pack":{"$ref":"#/definitions/v1PackEntity"}}},"v1PackValuesEntity":{"description":"Pack values entity to refer the existing pack for the values override","properties":{"manifests":{"description":"Pack manifests are additional content as part of the profile","items":{"$ref":"#/definitions/v1ManifestRefUpdateEntity"},"type":"array"},"name":{"description":"Pack name","type":"string"},"tag":{"description":"Pack version tag","type":"string"},"type":{"$ref":"#/definitions/v1PackType"},"values":{"description":"Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values","type":"string"}},"required":["name"],"type":"object"},"v1PacksFilterSpec":{"description":"Packs filter spec","properties":{"filter":{"$ref":"#/definitions/v1PackFilterSpec"},"sort":{"items":{"$ref":"#/definitions/v1PackSortSpec"},"type":"array","uniqueItems":true}}},"v1PairingCode":{"description":"Pairing code response","properties":{"pairingCode":{"type":"string"}},"type":"object"},"v1Partition":{"properties":{"fileSystemType":{"type":"string"},"freeSpace":{"format":"int32","type":"integer"},"mountPoint":{"type":"string"},"totalSpace":{"format":"int32","type":"integer"},"usedSpace":{"format":"int32","type":"integer"}},"type":"object"},"v1PasswordsBlockListEntity":{"description":"List of block listed passwords","properties":{"passwords":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1PaymentIntent":{"description":"Payment setup object","properties":{"clientSecret":{"description":"Payment client secret","type":"string"},"paymentIntentId":{"description":"Payment intent id","type":"string"},"status":{"description":"Status of payment intent","type":"string"}}},"v1PaymentMethod":{"description":"Payment method object","properties":{"card":{"$ref":"#/definitions/v1Card"},"customerId":{"description":"Customer uid","type":"string"},"firstName":{"description":"First name of the user","type":"string"},"lastName":{"description":"Last name of the user","type":"string"},"paymentMethodId":{"description":"Payment method uid","type":"string"}}},"v1PaymentMethods":{"description":"Payment Method list","properties":{"defaultPaymentMethod":{"description":"Default payment method","type":"string"},"paymentMethods":{"description":"List of payment method","items":{"$ref":"#/definitions/v1PaymentMethod"},"type":"array","uniqueItems":true}}},"v1PaymentPlan":{"description":"Stripe price detail object","properties":{"billingScheme":{"description":"Billing scheme","type":"string"},"currency":{"description":"Unit of currency","type":"string"},"id":{"description":"Stripe payment plan id","type":"string"},"name":{"description":"Name of the stripe plan","type":"string"},"productId":{"description":"Product identifier","type":"string"},"type":{"description":"Type of payment plan","type":"string"},"unitAmount":{"description":"Unit amount for the product","format":"int64","type":"number"}}},"v1PaymentPlans":{"description":"Payment plan object model","properties":{"stripePlanDetails":{"description":"List of Stripe plan details","items":{"$ref":"#/definitions/v1PaymentPlan"},"type":"array","uniqueItems":true}},"required":["stripePlanDetails"],"type":"object"},"v1PaymentSecrets":{"description":"payment secrets","properties":{"publishableKey":{"type":"string"},"secretKey":{"type":"string"}}},"v1PaymentSubscription":{"description":"Payment subscription object","properties":{"customerId":{"description":"Customer uid","type":"string"},"paymentIntent":{"$ref":"#/definitions/v1PaymentIntent","description":"Payment intent"},"paymentMethodIds":{"description":"List of payment method uids","items":{"type":"string"},"type":"array","uniqueItems":true},"planType":{"description":"Plan type","type":"string"},"priceId":{"description":"Price uid","type":"string"},"subscriptionId":{"description":"Subscription uid","type":"string"},"subscriptionState":{"description":"Plan subscription state","type":"string"}}},"v1PcgSelfHostedParams":{"properties":{"cloudType":{"type":"string"},"name":{"type":"string"}}},"v1PcgServiceKubectlCommands":{"description":"Array of kubectl commands","properties":{"kubectlCommands":{"items":{"type":"string"},"type":"array","uniqueItems":true},"overlordUid":{"type":"string"}},"required":["kubectlCommands"],"type":"object"},"v1PcgsSummary":{"properties":{"items":{"items":{"$ref":"#/definitions/v1Overlord"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1Permission":{"description":"Permission information","properties":{"name":{"type":"string"},"permissions":{"items":{"type":"string"},"type":"array"},"scope":{"$ref":"#/definitions/v1Scope"}},"type":"object"},"v1Permissions":{"description":"Array of permissions","items":{"$ref":"#/definitions/v1Permission"},"type":"array"},"v1Plan":{"description":"Plan","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1PlanSpec"},"status":{"$ref":"#/definitions/v1PlanStatus"}}},"v1PlanAddFreeCreditUpdate":{"description":"Plan add free credit update entity","properties":{"credit":{"$ref":"#/definitions/v1PlanCreditEntity"}}},"v1PlanAddSlaCreditUpdate":{"description":"Plan add sla credit update entity","properties":{"credit":{"$ref":"#/definitions/v1PlanCreditEntity"}}},"v1PlanChangeUpdate":{"description":"Plan change update entity","properties":{"expiry":{"$ref":"#/definitions/v1Time","description":"plan expiry time"},"isPaymentGateway":{"type":"boolean"},"planLimit":{"$ref":"#/definitions/v1PlanLimit"},"start":{"$ref":"#/definitions/v1Time","description":"plan start time"},"tierPrice":{"$ref":"#/definitions/v1TierPrice"},"type":{"enum":["Trial","MonthlyOnDemand","AnnualSubscription"],"type":"string"}},"required":["type","start","expiry"]},"v1PlanCost":{"description":"Plan Cost","properties":{"discount":{"format":"float","type":"number","x-omitempty":false},"price":{"format":"float","type":"number","x-omitempty":false}}},"v1PlanCpuCoreHoursUsages":{"properties":{"hourlyUsages":{"items":{"$ref":"#/definitions/v1ResourceUsage"},"type":"array","uniqueItems":true}},"type":"object"},"v1PlanCredit":{"description":"Plan Credit","properties":{"cpuCoreHours":{"format":"int64","type":"number","x-omitempty":false},"creditUid":{"type":"string"},"expiry":{"$ref":"#/definitions/v1Time","description":"credit expiry time"},"name":{"type":"string"},"start":{"$ref":"#/definitions/v1Time","description":"credit start time"},"type":{"enum":["Pure","Alloy"],"type":"string"}},"required":["type"]},"v1PlanCreditEntity":{"description":"Plan Credit entity for create/update request","properties":{"cpuCoreHours":{"format":"int64","type":"number","x-omitempty":false},"expiry":{"$ref":"#/definitions/v1Time"},"name":{"type":"string"},"start":{"$ref":"#/definitions/v1Time"},"type":{"enum":["Pure","Alloy"],"type":"string"}},"required":["type"]},"v1PlanCreditUpdate":{"description":"Plan credit update entity","properties":{"credit":{"$ref":"#/definitions/v1PlanCreditEntity"}}},"v1PlanExpiry":{"description":"Plan expiry","properties":{"expiry":{"$ref":"#/definitions/v1Time","description":"plan expiry time"}},"required":["expiry"]},"v1PlanLimit":{"description":"Monthly Plan Limit","properties":{"alloy":{"$ref":"#/definitions/v1PlanLimitSpec"},"isOnDemand":{"description":"is onDemand plan and has no limit","type":"boolean","x-omitempty":false},"isUnlimited":{"description":"is unlimited cpu core hours","type":"boolean","x-omitempty":false},"pure":{"$ref":"#/definitions/v1PlanLimitSpec"}}},"v1PlanLimitSpec":{"description":"Monthly Plan Limit spec","properties":{"cpuCoreHours":{"description":"cpu cores hours","format":"int64","type":"integer","x-omitempty":false},"overageLimitPercentage":{"default":25,"description":"overage limit in percentage","format":"int8","type":"integer","x-omitempty":false},"warnLimitPercentage":{"default":90,"description":"warning limit in percentage","format":"int8","type":"integer","x-omitempty":false}}},"v1PlanLimitUpdate":{"description":"Plan limit change update entity","properties":{"planLimit":{"$ref":"#/definitions/v1PlanLimit"}},"required":["planLimit"]},"v1PlanMonthlyUsage":{"description":"Plan monthly usage entity","properties":{"dailyUsages":{"items":{"$ref":"#/definitions/v1ResourceUsage"},"type":"array","uniqueItems":true},"month":{"$ref":"#/definitions/v1Time","description":"usage month"},"planLimit":{"$ref":"#/definitions/v1PlanLimit"},"planType":{"enum":["Trial","MonthlyOnDemand","AnnualSubscription"],"type":"string"},"planUid":{"type":"string"},"totalMonthlyUsage":{"$ref":"#/definitions/v1TotalResourceUsage"}}},"v1PlanMonthlyUsages":{"properties":{"items":{"items":{"$ref":"#/definitions/v1PlanMonthlyUsage"},"type":"array"}},"type":"object"},"v1PlanRenewal":{"description":"Plan Renewal","properties":{"expiry":{"$ref":"#/definitions/v1Time","description":"credit expiry time"},"planLimit":{"$ref":"#/definitions/v1PlanLimit"},"start":{"$ref":"#/definitions/v1Time","description":"credit start time"},"type":{"enum":["Trial","MonthlyOnDemand","AnnualSubscription"],"type":"string"}},"required":["type","start","expiry"]},"v1PlanRenewalUpdate":{"description":"Plan add renawal update entity","properties":{"renewal":{"$ref":"#/definitions/v1PlanRenewal"}}},"v1PlanSpec":{"description":"Plan specifications","properties":{"cost":{"$ref":"#/definitions/v1PlanCost"},"developerCredits":{"$ref":"#/definitions/v1DeveloperCredit"},"expiry":{"$ref":"#/definitions/v1Time","description":"plan expiry time"},"freeCredits":{"items":{"$ref":"#/definitions/v1PlanCredit"},"type":"array"},"planLimit":{"$ref":"#/definitions/v1PlanLimit"},"renewal":{"$ref":"#/definitions/v1PlanRenewal"},"slaCredits":{"items":{"$ref":"#/definitions/v1PlanCredit"},"type":"array"},"start":{"$ref":"#/definitions/v1Time","description":"plan start time"},"tierPricing":{"$ref":"#/definitions/v1TierPrice"},"type":{"enum":["Trial","MonthlyOnDemand","AnnualSubscription"],"type":"string"}},"required":["type","start","expiry"]},"v1PlanStatus":{"properties":{"changeLogs":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1Plans":{"description":"Array of Plans","properties":{"items":{"items":{"$ref":"#/definitions/v1Plan"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1PlansUsageComputeSpec":{"description":"Plans usage compute spec","properties":{"startTime":{"$ref":"#/definitions/v1Time"},"tenantUids":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1PodAntiAffinity":{"description":"Pod anti affinity is a group of inter pod anti affinity scheduling rules.","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.","items":{"$ref":"#/definitions/v1VmWeightedPodAffinityTerm"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.","items":{"$ref":"#/definitions/v1VmPodAffinityTerm"},"type":"array"}},"type":"object"},"v1Pool":{"description":"Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool","properties":{"end":{"description":"End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.","type":"string"},"gateway":{"description":"Gateway is the gateway ip address","type":"string"},"nameserver":{"$ref":"#/definitions/v1Nameserver","description":"Nameserver provide information for dns resolvation"},"prefix":{"description":"Prefix is the mask of the network as integer (max 128)","format":"int32","type":"integer"},"start":{"description":"Start is the first ip address that can be rendered","type":"string"},"subnet":{"description":"Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)","type":"string"}},"type":"object"},"v1PriceRange":{"description":"tier price range","properties":{"discount":{"format":"int64","type":"number"},"startFrom":{"format":"float64","type":"number"},"unitAmount":{"format":"float64","type":"number"},"upTo":{"format":"float64","type":"number"},"upToInfinity":{"type":"boolean"}}},"v1PrivateCloudRateConfig":{"description":"Private cloud rate config","properties":{"cpuUnitPricePerHour":{"format":"float64","type":"number"},"gpuUnitPricePerHour":{"format":"float64","type":"number"},"memoryUnitPriceGiBPerHour":{"format":"float64","type":"number"},"storageUnitPriceGiBPerHour":{"format":"float64","type":"number"}}},"v1ProductUsage":{"description":"Product usage","properties":{"alloyUsage":{"$ref":"#/definitions/v1SystemProductUsage"},"pureUsage":{"$ref":"#/definitions/v1SystemProductUsage"}}},"v1ProfileMetaEntity":{"description":"Cluster profile metadata request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1ClusterProfileSpecEntity"}},"required":["metadata"],"type":"object"},"v1ProfileResolvedValues":{"description":"Cluster profile resolved pack values","properties":{"resolved":{"additionalProperties":{"type":"string"},"description":"Cluster profile pack resolved values","type":"object"},"uid":{"description":"Cluster profile uid","type":"string"}}},"v1ProfileStatus":{"properties":{"hasUserMacros":{"description":"If it is true then profile pack values has a reference to user defined macros","type":"boolean","x-omitempty":false}},"type":"object"},"v1ProfileTemplateSummary":{"description":"Edge host clusterprofile template summary","properties":{"cloudType":{"type":"string"},"name":{"type":"string"},"packs":{"items":{"$ref":"#/definitions/v1PackRefSummary"},"type":"array"},"type":{"type":"string"},"uid":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1ProfileType":{"default":"cluster","enum":["cluster","infra","add-on","system"],"type":"string"},"v1Project":{"description":"Project information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ProjectSpec"},"status":{"$ref":"#/definitions/v1ProjectStatus"}},"type":"object"},"v1ProjectActiveAppDeployment":{"description":"Active app deployment","properties":{"appRef":{"$ref":"#/definitions/v1ObjectEntity"},"state":{"type":"string"}},"type":"object"},"v1ProjectActiveAppDeployments":{"description":"Active app deployment","properties":{"apps":{"items":{"$ref":"#/definitions/v1ProjectActiveAppDeployment"},"type":"array"},"count":{"format":"int32","type":"integer"}},"type":"object"},"v1ProjectActiveCluster":{"description":"Active clusters","properties":{"clusterRef":{"$ref":"#/definitions/v1ObjectEntity"},"state":{"type":"string"}},"type":"object"},"v1ProjectActiveClusters":{"description":"Active clusters","properties":{"clusters":{"items":{"$ref":"#/definitions/v1ProjectActiveCluster"},"type":"array"},"count":{"format":"int32","type":"integer"}},"type":"object"},"v1ProjectActiveResources":{"description":"Active project resources","properties":{"appDeployments":{"$ref":"#/definitions/v1ProjectActiveAppDeployments"},"clusters":{"$ref":"#/definitions/v1ProjectActiveClusters"},"virtualClusters":{"$ref":"#/definitions/v1ProjectActiveClusters"}},"type":"object"},"v1ProjectAlertComponent":{"description":"Project alert component","properties":{"description":{"type":"string"},"name":{"type":"string"},"supportedChannels":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1ProjectAlertComponents":{"description":"Supported project alerts component","properties":{"components":{"items":{"$ref":"#/definitions/v1ProjectAlertComponent"},"type":"array"}},"type":"object"},"v1ProjectCleanUpStatus":{"description":"Project cleanup status","properties":{"cleanedResources":{"items":{"type":"string"},"type":"array"},"msg":{"type":"string"},"state":{"type":"string"}},"type":"object"},"v1ProjectCleanup":{"description":"Project delete request payload","properties":{"deletingClusterDurationThresholdInMin":{"format":"int32","type":"integer"},"provisioningClusterDurationThresholdInMin":{"format":"int32","type":"integer"}}},"v1ProjectClusterSettings":{"properties":{"nodesAutoRemediationSetting":{"$ref":"#/definitions/v1NodesAutoRemediationSettings"},"tenantClusterSettings":{"$ref":"#/definitions/v1TenantClusterSettings"}}},"v1ProjectEntity":{"description":"Project information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ProjectEntitySpec"}},"type":"object"},"v1ProjectEntitySpec":{"description":"Project specifications","properties":{"logoUid":{"type":"string"},"teams":{"items":{"$ref":"#/definitions/v1TeamRoleMap"},"type":"array","uniqueItems":true},"users":{"items":{"$ref":"#/definitions/v1UserRoleMap"},"type":"array","uniqueItems":true}}},"v1ProjectFilterSortFields":{"enum":["name","creationTimestamp","lastModifiedTimestamp"],"type":"string","x-nullable":true},"v1ProjectFilterSortSpec":{"properties":{"field":{"$ref":"#/definitions/v1ProjectFilterSortFields"},"order":{"$ref":"#/definitions/v1SortOrder"}}},"v1ProjectFilterSpec":{"description":"Project filter spec","properties":{"name":{"$ref":"#/definitions/v1FilterString"}}},"v1ProjectMeta":{"properties":{"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1ProjectMetadata":{"description":"Project metadata","properties":{"metadata":{"$ref":"#/definitions/v1ObjectEntity"}}},"v1ProjectPatch":{"items":{"$ref":"#/definitions/v1HttpPatch"},"type":"array"},"v1ProjectResourceUsage":{"description":"project resource usage","properties":{"alloyCpuCoreHours":{"type":"number","x-omitempty":false},"project":{"$ref":"#/definitions/v1ProjectMeta"},"pureCpuCoreHours":{"type":"number","x-omitempty":false}}},"v1ProjectRolesEntity":{"properties":{"projects":{"items":{"$ref":"#/definitions/v1UidRoleSummary"},"type":"array"}},"type":"object"},"v1ProjectRolesPatch":{"properties":{"projects":{"items":{"properties":{"projectUid":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array"}},"type":"object"},"type":"array"}},"type":"object"},"v1ProjectSpec":{"description":"Project specifications","properties":{"alerts":{"items":{"$ref":"#/definitions/v1Alert"},"type":"array","uniqueItems":true},"logoUrl":{"type":"string"},"teams":{"items":{"$ref":"#/definitions/v1TeamRoleMap"},"type":"array","uniqueItems":true},"users":{"items":{"$ref":"#/definitions/v1UserRoleMap"},"type":"array","uniqueItems":true}}},"v1ProjectSpecSummary":{"properties":{"logoUrl":{"type":"string"},"teams":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"users":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"}},"type":"object"},"v1ProjectStatus":{"description":"Project status","properties":{"cleanUpStatus":{"$ref":"#/definitions/v1ProjectCleanUpStatus"},"isDisabled":{"type":"boolean"}}},"v1ProjectStatusSummary":{"description":"Project status summary","properties":{"clustersHealth":{"$ref":"#/definitions/v1SpectroClustersHealth"},"status":{"$ref":"#/definitions/v1ProjectStatus"},"usage":{"$ref":"#/definitions/v1ProjectUsageSummary"}},"type":"object"},"v1ProjectSummary":{"description":"Project summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"specSummary":{"$ref":"#/definitions/v1ProjectSpecSummary","description":"Project spec summary"},"status":{"$ref":"#/definitions/v1ProjectStatusSummary","description":"Project status summary"}},"type":"object"},"v1ProjectTeamsEntity":{"properties":{"teams":{"items":{"$ref":"#/definitions/v1TeamRoleMap"},"type":"array","uniqueItems":true}}},"v1ProjectUsage":{"description":"Project usage object","properties":{"alloy":{"$ref":"#/definitions/v1ProjectUsageData"},"pure":{"$ref":"#/definitions/v1ProjectUsageData"}}},"v1ProjectUsageData":{"description":"Project usage data object","properties":{"amount":{"description":"Billing amount for the project","format":"float64","type":"number"},"tierPrice":{"description":"Tier price based on the usage","format":"float64","type":"number"},"usedCredits":{"description":"Project used credits","format":"float64","type":"number"}}},"v1ProjectUsageSummary":{"description":"Project usage summary","properties":{"alloyCpuCores":{"type":"number","x-omitempty":false},"clusters":{"items":{"$ref":"#/definitions/v1ClusterUsageSummary"},"type":"array"},"pureCpuCores":{"type":"number","x-omitempty":false}},"type":"object"},"v1ProjectUsersEntity":{"properties":{"users":{"items":{"$ref":"#/definitions/v1UserRoleMap"},"type":"array","uniqueItems":true}}},"v1Projects":{"properties":{"items":{"items":{"$ref":"#/definitions/v1Project"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1ProjectsFilterSpec":{"description":"Project filter summary spec","properties":{"filter":{"$ref":"#/definitions/v1ProjectFilterSpec"},"sort":{"items":{"$ref":"#/definitions/v1ProjectFilterSortSpec"},"type":"array","uniqueItems":true}}},"v1ProjectsMetadata":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ProjectMetadata"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1ProjectsSummary":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ProjectSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1ProjectsWorkspaces":{"description":"List projects and its workspaces","properties":{"name":{"type":"string"},"uid":{"type":"string"},"workspaces":{"items":{"$ref":"#/definitions/v1WorkspacesRoles"},"type":"array","uniqueItems":true}}},"v1PublicCloudRateConfig":{"description":"Public cloud rate config","properties":{"computeOptimized":{"$ref":"#/definitions/v1CloudInstanceRateConfig"},"memoryOptimized":{"$ref":"#/definitions/v1CloudInstanceRateConfig"}}},"v1RateConfig":{"description":"Rate config","properties":{"aws":{"$ref":"#/definitions/v1PublicCloudRateConfig"},"azure":{"$ref":"#/definitions/v1PublicCloudRateConfig"},"coxedge":{"$ref":"#/definitions/v1PublicCloudRateConfig"},"custom":{"items":{"$ref":"#/definitions/v1CustomCloudRateConfig"},"type":"array","uniqueItems":true},"edge":{"$ref":"#/definitions/v1PrivateCloudRateConfig"},"edgeNative":{"$ref":"#/definitions/v1PrivateCloudRateConfig"},"gcp":{"$ref":"#/definitions/v1PublicCloudRateConfig"},"generic":{"$ref":"#/definitions/v1PrivateCloudRateConfig"},"libvirt":{"$ref":"#/definitions/v1PrivateCloudRateConfig"},"maas":{"$ref":"#/definitions/v1PrivateCloudRateConfig"},"openstack":{"$ref":"#/definitions/v1PrivateCloudRateConfig"},"vsphere":{"$ref":"#/definitions/v1PrivateCloudRateConfig"}}},"v1RegistriesMetadata":{"description":"Pack Registries Metadata","properties":{"items":{"items":{"$ref":"#/definitions/v1RegistryMetadata"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1RegistryAuth":{"description":"Auth credentials of the registry","properties":{"password":{"format":"password","type":"string"},"tls":{"$ref":"#/definitions/v1TlsConfiguration"},"token":{"format":"password","type":"string"},"type":{"enum":["noAuth","basic","token"],"type":"string"},"username":{"type":"string"}},"type":"object"},"v1RegistryConf":{"description":"Registry configuration","properties":{"auth":{"$ref":"#/definitions/v1RegistryAuth"},"endpoint":{"type":"string"}},"type":"object"},"v1RegistryConfigEntity":{"description":"Registry configuration entity","properties":{"config":{"$ref":"#/definitions/v1RegistryConfiguration"}},"type":"object"},"v1RegistryConfiguration":{"description":"Registry configuration","properties":{"auth":{"$ref":"#/definitions/v1RegistryAuth"},"endpoint":{"type":"string"},"name":{"type":"string"}},"type":"object"},"v1RegistryMetadata":{"description":"Registry meta","properties":{"isDefault":{"type":"boolean","x-omitempty":false},"isPrivate":{"type":"boolean","x-omitempty":false},"kind":{"type":"string"},"name":{"type":"string"},"scope":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1RegistryPackMetadata":{"description":"Registry metadata information","properties":{"annotations":{"additionalProperties":{"type":"string"},"description":"Pack annotations is used to allow pack to add more arbitrary configurations","type":"object"},"latestPackUid":{"description":"Latest pack uid","type":"string"},"latestVersion":{"description":"Pack latest version","type":"string"},"logoUrl":{"description":"Pack logo url","type":"string"},"name":{"description":"Pack registry name","type":"string"},"scope":{"description":"Pack registry scope","type":"string"},"uid":{"description":"Pack registry uid","type":"string"}}},"v1RegistrySyncStatus":{"description":"Status of the registry sync","properties":{"lastRunTime":{"$ref":"#/definitions/v1Time"},"lastSyncedTime":{"$ref":"#/definitions/v1Time"},"message":{"type":"string"},"status":{"type":"string"}},"type":"object"},"v1RelatedObject":{"description":"Object for which the resource is related","properties":{"kind":{"enum":["spectrocluster","machine","cloudconfig","clusterprofile","pack","appprofile","appdeployment","edgehost"],"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1ReleaseDescription":{"description":"spectro application management release description","properties":{"details":{"type":"string"},"title":{"type":"string"},"version":{"type":"string"}}},"v1ReleaseVersion":{"description":"spectro application management release version information","properties":{"date":{"$ref":"#/definitions/v1Time"},"description":{"type":"string"},"releaseNotes":{"items":{"$ref":"#/definitions/v1ReleaseDescription"},"type":"array"},"version":{"type":"string"}}},"v1ResourceCloudCostSummary":{"description":"Resource cloud cost summary information","properties":{"data":{"items":{"$ref":"#/definitions/v1CloudCostDataPoint"},"type":"array","uniqueItems":true},"entity":{"$ref":"#/definitions/v1ResourceReference"},"total":{"$ref":"#/definitions/v1ResourceTotalCloudCost"}},"type":"object"},"v1ResourceConsumption":{"description":"Resource consumption information","properties":{"associatedResources":{"items":{"$ref":"#/definitions/v1ResourceReference"},"type":"array"},"data":{"items":{"$ref":"#/definitions/v1ResourceConsumptionDataPoint"},"type":"array","uniqueItems":true},"entity":{"$ref":"#/definitions/v1ResourceReference"},"total":{"$ref":"#/definitions/v1ResourceTotalConsumptionData"}},"type":"object"},"v1ResourceConsumptionData":{"description":"Resource cosumption data","properties":{"cpu":{"format":"float64","type":"number","x-omitempty":false},"memory":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1ResourceConsumptionDataPoint":{"description":"Resource cosumption data point","properties":{"allotted":{"$ref":"#/definitions/v1ResourceConsumptionData"},"timestamp":{"format":"int64","type":"number"},"usage":{"$ref":"#/definitions/v1ResourceConsumptionData"}},"type":"object"},"v1ResourceConsumptionFilter":{"description":"Resource consumption filter","properties":{"clouds":{"items":{"type":"string"},"type":"array","uniqueItems":true},"clusters":{"items":{"type":"string"},"type":"array","uniqueItems":true},"endTime":{"$ref":"#/definitions/v1Time"},"includeMasterMachines":{"type":"boolean"},"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true},"projects":{"items":{"type":"string"},"type":"array","uniqueItems":true},"startTime":{"$ref":"#/definitions/v1Time"},"workspaces":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1ResourceConsumptionOptions":{"description":"Resource consumption options","properties":{"enableSummaryView":{"default":true,"type":"boolean"},"groupBy":{"default":"namespace","enum":["tenant","project","workspace","cluster","namespace","cloud"],"type":"string"},"period":{"default":60,"format":"int32","type":"integer"}},"type":"object"},"v1ResourceConsumptionSpec":{"description":"Resource consumption spec","properties":{"filter":{"$ref":"#/definitions/v1ResourceConsumptionFilter"},"options":{"$ref":"#/definitions/v1ResourceConsumptionOptions"}},"type":"object"},"v1ResourceCost":{"description":"Resource Cost information","properties":{"cloud":{"$ref":"#/definitions/v1CloudCost"},"total":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1ResourceCostDataPoint":{"description":"Resource cost data point","properties":{"cpu":{"format":"float64","type":"number","x-omitempty":false},"memory":{"format":"float64","type":"number","x-omitempty":false},"storage":{"format":"float64","type":"number","x-omitempty":false},"timestamp":{"format":"int64","type":"number"},"total":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1ResourceCostSummary":{"description":"Resource cost summary information","properties":{"associatedResources":{"items":{"$ref":"#/definitions/v1ResourceReference"},"type":"array"},"data":{"items":{"$ref":"#/definitions/v1ResourceCostDataPoint"},"type":"array","uniqueItems":true},"entity":{"$ref":"#/definitions/v1ResourceReference"},"total":{"$ref":"#/definitions/v1ResourceTotalCost"}},"type":"object"},"v1ResourceCostSummaryFilter":{"description":"Resource cost summary filter","properties":{"clouds":{"items":{"type":"string"},"type":"array","uniqueItems":true},"clusters":{"items":{"type":"string"},"type":"array","uniqueItems":true},"endTime":{"$ref":"#/definitions/v1Time"},"includeMasterMachines":{"type":"boolean"},"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true},"projects":{"items":{"type":"string"},"type":"array","uniqueItems":true},"startTime":{"$ref":"#/definitions/v1Time"},"workspaces":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1ResourceCostSummaryOptions":{"description":"Resource cost summary options","properties":{"enableSummaryView":{"default":true,"type":"boolean"},"groupBy":{"default":"cluster","enum":["tenant","project","workspace","cluster","namespace","deployment","cloud"],"type":"string"},"period":{"default":60,"format":"int32","type":"integer"}},"type":"object"},"v1ResourceCostSummarySpec":{"description":"Resource cost summary spec","properties":{"filter":{"$ref":"#/definitions/v1ResourceCostSummaryFilter"},"options":{"$ref":"#/definitions/v1ResourceCostSummaryOptions"}},"type":"object"},"v1ResourceEntity":{"properties":{"checks":{"items":{"type":"string"},"type":"array"},"data":{"additionalProperties":{"type":"object"},"type":"object"}},"type":"object"},"v1ResourceGroup":{"description":"Azure resource Group is a container that holds related resources for an Azure solution","properties":{"id":{"description":"The ID of the resource group","type":"string"},"location":{"description":"The location of the resource group. It cannot be changed after the resource group has been created","type":"string"},"name":{"description":"The type of the resource group","type":"string"}},"type":"object"},"v1ResourceLimitType":{"enum":["user","project","apiKey","team","role","cloudaccount","clusterprofile","workspace","registry","privategateway","location","certificate","macro","sshkey","alert","spectrocluster","edgehost","appprofile","appdeployment","edgetoken","clustergroup","filter","systemadmin"],"type":"string"},"v1ResourceReference":{"properties":{"kind":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"required":["uid"],"type":"object"},"v1ResourceRoles":{"properties":{"resourceRoles":{"items":{"$ref":"#/definitions/v1ResourceRolesEntity"},"type":"array"}},"type":"object"},"v1ResourceRolesEntity":{"properties":{"filterRefs":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"projectUids":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"roles":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"uid":{"type":"string"}},"type":"object"},"v1ResourceRolesUpdateEntity":{"properties":{"filterRefs":{"items":{"type":"string"},"type":"array"},"projectUids":{"items":{"type":"string"},"type":"array"},"roles":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1ResourceTotalCloudCost":{"description":"Resource total cloud cost information","properties":{"compute":{"format":"float64","type":"number","x-omitempty":false},"storage":{"format":"float64","type":"number","x-omitempty":false},"total":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1ResourceTotalConsumptionData":{"description":"Resource total cosumption data","properties":{"allotted":{"$ref":"#/definitions/v1ResourceConsumptionData"},"usage":{"$ref":"#/definitions/v1ResourceConsumptionData"}},"type":"object"},"v1ResourceTotalCost":{"description":"Resource total cost information","properties":{"cpu":{"format":"float64","type":"number","x-omitempty":false},"memory":{"format":"float64","type":"number","x-omitempty":false},"storage":{"format":"float64","type":"number","x-omitempty":false},"total":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1ResourceUsage":{"description":"ResourceUsage","properties":{"projects":{"items":{"$ref":"#/definitions/v1ProjectResourceUsage"},"type":"array","uniqueItems":true},"timestamp":{"$ref":"#/definitions/v1Time","description":"resource usage time"},"totalAlloyCpuCoreHours":{"type":"number","x-omitempty":false},"totalPureCpuCoreHours":{"type":"number","x-omitempty":false}}},"v1ResourceUsageDataPoint":{"description":"Resource usage data point","properties":{"baremetal":{"$ref":"#/definitions/v1ResourceUsageMeteringDataPoint"},"cpu":{"format":"float64","type":"number","x-omitempty":false},"edgehost":{"$ref":"#/definitions/v1ResourceUsageMeteringDataPoint"},"memory":{"format":"float64","type":"number","x-omitempty":false},"timestamp":{"format":"int64","type":"number"}},"type":"object"},"v1ResourceUsageMeteringDataPoint":{"description":"min and max count for machines \u0026 edgehost for the given period","properties":{"activeEdgehosts":{"format":"int64","type":"number"},"activeMachines":{"format":"int64","type":"number"},"maxEdgehosts":{"format":"int64","type":"number"},"maxMachines":{"format":"int64","type":"number"}},"type":"object"},"v1ResourceUsageSummary":{"description":"Resource usage summary information","properties":{"associatedResources":{"items":{"$ref":"#/definitions/v1ResourceReference"},"type":"array"},"data":{"items":{"$ref":"#/definitions/v1ResourceUsageDataPoint"},"type":"array","uniqueItems":true},"entity":{"$ref":"#/definitions/v1ResourceReference"}},"type":"object"},"v1ResourceUsageSummaryFilter":{"description":"Resource usage summary filter","properties":{"clouds":{"items":{"type":"string"},"type":"array","uniqueItems":true},"clusters":{"items":{"type":"string"},"type":"array","uniqueItems":true},"endTime":{"$ref":"#/definitions/v1Time"},"includeMasterMachines":{"type":"boolean"},"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true},"pods":{"items":{"type":"string"},"type":"array","uniqueItems":true},"projects":{"items":{"type":"string"},"type":"array","uniqueItems":true},"startTime":{"$ref":"#/definitions/v1Time"},"workload":{"$ref":"#/definitions/v1ResourceWorkloadFilter"},"workspaces":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1ResourceUsageSummaryOptions":{"description":"Resource usage summary options","properties":{"enableSummaryView":{"default":true,"type":"boolean"},"groupBy":{"default":"cluster","enum":["tenant","project","workspace","cluster","namespace","deployment","statefulset","daemonset","pod","cloud"],"type":"string"},"includeMeteringInfo":{"default":false,"type":"boolean"},"period":{"default":60,"format":"int32","type":"integer"}},"type":"object"},"v1ResourceUsageSummarySpec":{"description":"Resource usage summary spec","properties":{"filter":{"$ref":"#/definitions/v1ResourceUsageSummaryFilter"},"options":{"$ref":"#/definitions/v1ResourceUsageSummaryOptions"}},"type":"object"},"v1ResourceWorkloadFilter":{"description":"Workload resource filter","properties":{"names":{"items":{"type":"string"},"type":"array","uniqueItems":true},"type":{"default":"all","enum":["deployment","statefulset","daemonset","all"],"type":"string"}},"type":"object"},"v1Resources":{"properties":{"resources":{"additionalProperties":{"$ref":"#/definitions/v1ResourceEntity","type":"object"},"type":"object"}},"type":"object"},"v1ResourcesCloudCostSummary":{"description":"Resources cloud cost summary information","properties":{"resources":{"items":{"$ref":"#/definitions/v1ResourceCloudCostSummary"},"type":"array"},"total":{"$ref":"#/definitions/v1ResourceTotalCloudCost"}},"type":"object"},"v1ResourcesConsumption":{"description":"Resources consumption information","properties":{"cpuUnit":{"type":"string"},"memoryUnit":{"type":"string"},"resources":{"items":{"$ref":"#/definitions/v1ResourceConsumption"},"type":"array"},"total":{"$ref":"#/definitions/v1ResourceTotalConsumptionData"}},"type":"object"},"v1ResourcesCostSummary":{"description":"Resources cost summary information","properties":{"resources":{"items":{"$ref":"#/definitions/v1ResourceCostSummary"},"type":"array"},"total":{"$ref":"#/definitions/v1ResourceTotalCost"}},"type":"object"},"v1ResourcesUsageSummary":{"description":"Resources usage summary information","properties":{"cpuUnit":{"type":"string"},"memoryUnit":{"type":"string"},"resources":{"items":{"$ref":"#/definitions/v1ResourceUsageSummary"},"type":"array"}},"type":"object"},"v1RestoreStatusMeta":{"description":"Restore status meta","properties":{"isSucceeded":{"type":"boolean"},"msg":{"type":"string"},"restoreTime":{"$ref":"#/definitions/v1Time"}}},"v1Role":{"description":"Role","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1RoleSpec"},"status":{"$ref":"#/definitions/v1RoleStatus"}}},"v1RoleClone":{"description":"Role clone specifications","properties":{"metadata":{"$ref":"#/definitions/v1RoleCloneMetadata"}}},"v1RoleCloneMetadata":{"description":"Role clone metadata","properties":{"name":{"type":"string"}}},"v1RolePatch":{"items":{"$ref":"#/definitions/v1HttpPatch"},"type":"array"},"v1RoleSpec":{"description":"Role specifications","properties":{"permissions":{"items":{"type":"string"},"type":"array","uniqueItems":true},"scope":{"$ref":"#/definitions/v1Scope"},"type":{"enum":["system","user"],"type":"string"}}},"v1RoleStatus":{"description":"Role status","properties":{"isEnabled":{"description":"Specifies if role account is enabled/disabled","type":"boolean","x-omitempty":false}}},"v1Roles":{"description":"Array of Roles","properties":{"items":{"items":{"$ref":"#/definitions/v1Role"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1S3StorageConfig":{"description":"S3 storage config object","properties":{"bucketName":{"description":"S3 storage bucket name","type":"string"},"caCert":{"description":"CA Certificate","type":"string"},"credentials":{"$ref":"#/definitions/v1AwsCloudAccount","description":"AWS cloud account credentials"},"region":{"description":"AWS region name","type":"string"},"s3ForcePathStyle":{"default":true,"type":"boolean"},"s3Url":{"description":"Custom hosted S3 URL","type":"string"},"useRestic":{"default":true,"description":"Set to 'true', to use Restic plugin for the backup","type":"boolean"}},"required":["bucketName","region","credentials"],"type":"object"},"v1SchedulerJob":{"properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta","type":"object","x-omitempty":false},"spec":{"properties":{"cycles":{"type":"integer","x-omitempty":false},"interval":{"type":"integer","x-omitempty":false}},"type":"object"},"status":{"properties":{"cycleNumber":{"type":"integer","x-omitempty":false},"error":{"type":"string","x-omitempty":false},"forceNextRun":{"type":"boolean","x-omitempty":false},"isActive":{"type":"boolean","x-omitempty":false},"isDisabled":{"type":"boolean","x-omitempty":false},"isLocked":{"type":"boolean","x-omitempty":false},"lastRunTime":{"$ref":"#/definitions/v1Time","x-omitempty":false},"lastSuccessfulRunTime":{"$ref":"#/definitions/v1Time","x-omitempty":false},"nextRunTime":{"$ref":"#/definitions/v1Time","x-omitempty":false}},"type":"object"}},"type":"object"},"v1SchedulerJobs":{"items":{"$ref":"#/definitions/v1SchedulerJob"},"type":"array","uniqueItems":true},"v1SchedulerJobsHealth":{"items":{"$ref":"#/definitions/v1SchedulerJob"},"type":"array","uniqueItems":true},"v1Scope":{"enum":["system","tenant","project","resource"],"type":"string"},"v1SearchFilterBoolCondition":{"properties":{"value":{"type":"boolean"}}},"v1SearchFilterCondition":{"properties":{"bool":{"$ref":"#/definitions/v1SearchFilterBoolCondition"},"date":{"$ref":"#/definitions/v1SearchFilterDateCondition"},"float":{"$ref":"#/definitions/v1SearchFilterFloatCondition"},"int":{"$ref":"#/definitions/v1SearchFilterIntegerCondition"},"keyValue":{"$ref":"#/definitions/v1SearchFilterKeyValueCondition"},"string":{"$ref":"#/definitions/v1SearchFilterStringCondition"}}},"v1SearchFilterConjunctionOperator":{"enum":["and","or"],"type":"string","x-nullable":true},"v1SearchFilterDateCondition":{"properties":{"match":{"$ref":"#/definitions/v1SearchFilterDateConditionMatch"},"negation":{"type":"boolean"},"operator":{"$ref":"#/definitions/v1SearchFilterDateOperator"}}},"v1SearchFilterDateConditionMatch":{"properties":{"conjunction":{"$ref":"#/definitions/v1SearchFilterConjunctionOperator"},"values":{"items":{"$ref":"#/definitions/v1Time"},"type":"array","uniqueItems":true}}},"v1SearchFilterDateOperator":{"enum":["eq","gt","gte","lt","lte","range"],"type":"string"},"v1SearchFilterFloatCondition":{"properties":{"match":{"$ref":"#/definitions/v1SearchFilterFloatConditionMatch"},"negation":{"type":"boolean"},"operator":{"$ref":"#/definitions/v1SearchFilterIntegerOperator"}}},"v1SearchFilterFloatConditionMatch":{"properties":{"conjunction":{"$ref":"#/definitions/v1SearchFilterConjunctionOperator"},"values":{"items":{"format":"float64","type":"number"},"type":"array","uniqueItems":true}}},"v1SearchFilterGroup":{"properties":{"conjunction":{"$ref":"#/definitions/v1SearchFilterConjunctionOperator"},"filters":{"items":{"$ref":"#/definitions/v1SearchFilterItem"},"type":"array","uniqueItems":true}}},"v1SearchFilterIntegerCondition":{"properties":{"match":{"$ref":"#/definitions/v1SearchFilterIntegerConditionMatch"},"negation":{"type":"boolean"},"operator":{"$ref":"#/definitions/v1SearchFilterIntegerOperator"}}},"v1SearchFilterIntegerConditionMatch":{"properties":{"conjunction":{"$ref":"#/definitions/v1SearchFilterConjunctionOperator"},"values":{"items":{"type":"integer"},"type":"array","uniqueItems":true}}},"v1SearchFilterIntegerOperator":{"enum":["eq","gt","gte","lt","lte"],"type":"string"},"v1SearchFilterItem":{"properties":{"condition":{"$ref":"#/definitions/v1SearchFilterCondition"},"property":{"type":"string"},"type":{"$ref":"#/definitions/v1SearchFilterPropertyType"}}},"v1SearchFilterKeyValueCondition":{"properties":{"ignoreCase":{"type":"boolean"},"key":{"type":"string"},"match":{"$ref":"#/definitions/v1SearchFilterKeyValueConditionMatch"},"negation":{"type":"boolean"},"operator":{"$ref":"#/definitions/v1SearchFilterStringOperator"}}},"v1SearchFilterKeyValueConditionMatch":{"properties":{"conjunction":{"$ref":"#/definitions/v1SearchFilterConjunctionOperator"},"values":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1SearchFilterKeyValueOperator":{"enum":["eq"],"type":"string"},"v1SearchFilterPropertyType":{"enum":["string","int","float","bool","date","keyValue"],"type":"string"},"v1SearchFilterSchemaSpec":{"properties":{"schema":{"$ref":"#/definitions/v1SearchFilterSchemaSpecProperties"}}},"v1SearchFilterSchemaSpecEnumValue":{"properties":{"displayValue":{"type":"string"},"value":{"type":"string"}}},"v1SearchFilterSchemaSpecProperties":{"properties":{"properties":{"items":{"$ref":"#/definitions/v1SearchFilterSchemaSpecProperty"},"type":"array"}}},"v1SearchFilterSchemaSpecProperty":{"properties":{"default":{"type":"string","x-order":6},"displayName":{"type":"string","x-order":2},"enum":{"items":{"type":"string"},"type":"array","x-omitempty":true,"x-order":4},"enumValues":{"items":{"$ref":"#/definitions/v1SearchFilterSchemaSpecEnumValue"},"type":"array","x-omitempty":true,"x-order":5},"hideDisplay":{"type":"boolean","x-order":1},"maxFloatVal":{"format":"float64","type":"number","x-order":10},"maxIntVal":{"format":"int32","type":"integer","x-order":8},"minFloatVal":{"format":"float64","type":"number","x-order":9},"minIntVal":{"format":"int32","type":"integer","x-order":7},"name":{"type":"string","x-order":0},"type":{"type":"string","x-order":3}}},"v1SearchFilterSortSpec":{"properties":{"field":{"$ref":"#/definitions/v1SearchSortFields"},"order":{"$ref":"#/definitions/v1SortOrder"}}},"v1SearchFilterSpec":{"properties":{"conjunction":{"$ref":"#/definitions/v1SearchFilterConjunctionOperator"},"filterGroups":{"items":{"$ref":"#/definitions/v1SearchFilterGroup"},"type":"array","uniqueItems":true}}},"v1SearchFilterStringCondition":{"properties":{"ignoreCase":{"type":"boolean"},"match":{"$ref":"#/definitions/v1SearchFilterStringConditionMatch"},"negation":{"type":"boolean"},"operator":{"$ref":"#/definitions/v1SearchFilterStringOperator"}}},"v1SearchFilterStringConditionMatch":{"properties":{"conjunction":{"$ref":"#/definitions/v1SearchFilterConjunctionOperator"},"values":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1SearchFilterStringOperator":{"enum":["eq","contains","beginsWith"],"type":"string"},"v1SearchFilterSummarySpec":{"description":"Spectro cluster search filter summary spec","properties":{"filter":{"$ref":"#/definitions/v1SearchFilterSpec"},"sort":{"items":{"$ref":"#/definitions/v1SearchFilterSortSpec"},"type":"array","uniqueItems":true}}},"v1SearchSortFields":{"enum":["environment","clusterName","clusterState","healthState","creationTimestamp","lastModifiedTimestamp"],"type":"string","x-nullable":true},"v1SectroClusterK8sDashboardUrl":{"description":"Service version information","properties":{"url":{"type":"string"}},"type":"object"},"v1ServiceEncryptionKey":{"description":"Returns the data encryption key for the session","properties":{"encryptionKey":{"description":"Encryption key to be used to decrypt the encrypted data in the response","type":"string"}},"type":"object"},"v1ServiceImage":{"description":"Service image entity","properties":{"buildId":{"type":"string"},"image":{"type":"string"},"serviceName":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1ServiceManifest":{"description":"Service manifest information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Not used for the resource info.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ServiceManifestSpec"}},"type":"object"},"v1ServiceManifestSpec":{"properties":{"manifests":{"items":{"$ref":"#/definitions/v1GitRepoFileContent"},"type":"array","uniqueItems":true},"name":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1ServicePort":{"properties":{"port":{"description":"The port that will be exposed by this service.","format":"int32","type":"integer"},"protocol":{"type":"string"}},"required":["port"],"type":"object"},"v1ServiceSpec":{"description":"ServiceSpec defines the specification of service registering edge","properties":{"name":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1ServiceVersion":{"description":"Service version information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Not used for the resource info.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1ServiceVersionSpec"}},"type":"object"},"v1ServiceVersionSpec":{"properties":{"latestVersion":{"$ref":"#/definitions/v1GitRepoFileContent"},"name":{"type":"string"}},"type":"object"},"v1ServicesImages":{"properties":{"serviceImages":{"items":{"$ref":"#/definitions/v1ServiceImage"},"type":"array","uniqueItems":true}},"type":"object"},"v1SonobuoyEntity":{"description":"Sonobuoy response","properties":{"reports":{"additionalProperties":{"$ref":"#/definitions/v1SonobuoyReportEntity"},"type":"object"},"requestUid":{"type":"string"},"status":{"enum":["Completed","InProgress","Failed","Initiated"],"type":"string"}},"required":["requestUid","status","reports"]},"v1SonobuoyLog":{"description":"Compliance Scan Sonobuoy Log","properties":{"description":{"type":"string"},"msg":{"type":"string"},"output":{"type":"string"},"path":{"type":"string"},"state":{"type":"string"}}},"v1SonobuoyLogEntity":{"description":"Sonobuoy log","properties":{"description":{"type":"string"},"msg":{"type":"string"},"output":{"type":"string"},"path":{"type":"string"},"state":{"type":"string"}}},"v1SonobuoyReport":{"description":"Compliance Scan Sonobuoy Report","properties":{"fail":{"format":"int32","type":"integer"},"logs":{"items":{"$ref":"#/definitions/v1SonobuoyLog"},"type":"array"},"node":{"type":"string"},"pass":{"format":"int32","type":"integer"},"plugin":{"type":"string"},"status":{"type":"string"},"total":{"format":"int32","type":"integer"}}},"v1SonobuoyReportEntity":{"description":"Sonobuoy report","properties":{"fail":{"format":"int32","type":"integer"},"logs":{"items":{"$ref":"#/definitions/v1SonobuoyLogEntity"},"type":"array"},"node":{"type":"string"},"pass":{"format":"int32","type":"integer"},"plugin":{"type":"string"},"status":{"type":"string"},"total":{"format":"int32","type":"integer"}}},"v1SortOrder":{"default":"asc","enum":["asc","desc"],"type":"string"},"v1SpcApply":{"properties":{"actionType":{"enum":["DownloadAndInstall","DownloadAndInstallLater"],"type":"string"},"canBeApplied":{"description":"If it is true then Agent can apply the changes to the palette","type":"boolean","x-omitempty":false},"crdDigest":{"type":"string"},"lastModifiedTime":{"$ref":"#/definitions/v1Time"},"patchAppliedTime":{"$ref":"#/definitions/v1Time"},"spcHash":{"type":"string"},"spcInfraHash":{"type":"string"}},"type":"object"},"v1SpcApplySettings":{"properties":{"actionType":{"enum":["DownloadAndInstall","DownloadAndInstallLater"],"type":"string"}},"type":"object"},"v1SpcPatchTimeEntity":{"properties":{"clusterHash":{"type":"string"},"patchTime":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1SpectroAppMgmtUpgrade":{"description":"Spectro application management upgrade information","properties":{"profiles":{"items":{"$ref":"#/definitions/v1ClusterProfileNotificationUpdateEntity"},"type":"array","uniqueItems":true},"version":{"type":"string"}},"required":["version"],"type":"object"},"v1SpectroAwsClusterEntity":{"description":"AWS cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudAccountUid":{"description":"Cloud account uid to be used for cluster provisioning","type":"string"},"cloudConfig":{"$ref":"#/definitions/v1AwsClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1AwsMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudType","cloudAccountUid","cloudConfig"],"type":"object"}},"type":"object"},"v1SpectroAwsClusterImportEntity":{"description":"Spectro AWS cluster import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1ImportClusterConfig"}},"type":"object"}},"type":"object"},"v1SpectroAwsClusterRateEntity":{"description":"Spectro AWS cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1AwsClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1AwsMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroAzureClusterEntity":{"description":"Azure cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudAccountUid":{"description":"Cloud account uid to be used for cluster provisioning","type":"string"},"cloudConfig":{"$ref":"#/definitions/v1AzureClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1AzureMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudType","cloudAccountUid","cloudConfig"],"type":"object"}},"type":"object"},"v1SpectroAzureClusterImportEntity":{"description":"Spectro Azure cluster import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1ImportClusterConfig"}},"type":"object"}},"type":"object"},"v1SpectroAzureClusterRateEntity":{"description":"Spectro Azure cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1AzureClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1AzureMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroCluster":{"description":"SpectroCluster is the Schema for the spectroclusters API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1SpectroClusterSpec"},"status":{"$ref":"#/definitions/v1SpectroClusterStatus"}},"type":"object"},"v1SpectroClusterActiveAppDeployment":{"description":"Active app deployment","properties":{"appRef":{"$ref":"#/definitions/v1ObjectEntity"},"state":{"type":"string"}},"type":"object"},"v1SpectroClusterActiveCluster":{"description":"Active clusters","properties":{"clusterRef":{"$ref":"#/definitions/v1ObjectEntity"},"state":{"type":"string"}},"type":"object"},"v1SpectroClusterActiveResources":{"description":"Active cluster resources","properties":{"appDeployments":{"items":{"$ref":"#/definitions/v1SpectroClusterActiveAppDeployment"},"type":"array"},"clusters":{"items":{"$ref":"#/definitions/v1SpectroClusterActiveCluster"},"type":"array"},"virtualClusters":{"items":{"$ref":"#/definitions/v1SpectroClusterActiveCluster"},"type":"array"}},"type":"object"},"v1SpectroClusterAddOnService":{"description":"Spectro cluster addon service","properties":{"endpoint":{"type":"string"},"name":{"type":"string"}}},"v1SpectroClusterAddOnServiceSummary":{"description":"Spectro cluster status summary","properties":{"endpoint":{"type":"string"},"name":{"type":"string"}}},"v1SpectroClusterAssetEntity":{"description":"Cluster asset","properties":{"spec":{"properties":{"frpKubeconfig":{"type":"string"},"kubeconfig":{"type":"string"},"kubeconfigclient":{"type":"string"},"manifest":{"type":"string"}},"type":"object"}},"type":"object"},"v1SpectroClusterAssetFrpKubeConfig":{"description":"Cluster asset Frp Kube Config","properties":{"frpKubeconfig":{"type":"string"}},"type":"object"},"v1SpectroClusterAssetKubeConfig":{"description":"Cluster asset Kube Config","properties":{"kubeconfig":{"type":"string"}},"type":"object"},"v1SpectroClusterAssetKubeConfigClient":{"description":"Cluster asset Kube Config Client","properties":{"kubeconfigclient":{"type":"string"}},"type":"object"},"v1SpectroClusterAssetManifest":{"description":"Cluster asset","properties":{"manifest":{"type":"string"}},"type":"object"},"v1SpectroClusterCloudCost":{"description":"Spectro cluster cloud cost information","properties":{"cost":{"$ref":"#/definitions/v1ResourceCost"},"data":{"items":{"$ref":"#/definitions/v1CloudCostDataPoint"},"type":"array"}},"type":"object"},"v1SpectroClusterCloudCostSummaryFilter":{"description":"Spectro cluster cloud cost summary filter","properties":{"clouds":{"items":{"type":"string"},"type":"array","uniqueItems":true},"endTime":{"$ref":"#/definitions/v1Time"},"projects":{"items":{"type":"string"},"type":"array","uniqueItems":true},"startTime":{"$ref":"#/definitions/v1Time"},"workspaces":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1SpectroClusterCloudCostSummaryOptions":{"description":"Spectro cluster cloud cost summary options","properties":{"groupBy":{"default":"project","enum":["tenant","project","cloud","cluster"],"type":"string"},"period":{"default":1440,"format":"int32","type":"integer"}},"type":"object"},"v1SpectroClusterCloudCostSummarySpec":{"description":"Spectro cluster cloud cost summary spec","properties":{"filter":{"$ref":"#/definitions/v1SpectroClusterCloudCostSummaryFilter"},"options":{"$ref":"#/definitions/v1SpectroClusterCloudCostSummaryOptions"}},"type":"object"},"v1SpectroClusterCost":{"description":"Spectro cluster cost information","properties":{"cloud":{"$ref":"#/definitions/v1SpectroClusterCloudCost"},"cost":{"$ref":"#/definitions/v1ResourceCost"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1SpectroClusterCostSummary":{"properties":{"cluster":{"$ref":"#/definitions/v1SpectroClusterCost"},"endTime":{"$ref":"#/definitions/v1Time"},"period":{"format":"int32","type":"integer"},"startTime":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1SpectroClusterFilterSpec":{"description":"Spectro cluster filter spec","properties":{"cloudAccounts":{"items":{"type":"string"},"type":"array","uniqueItems":true},"clusterName":{"$ref":"#/definitions/v1FilterString"},"clusterProfiles":{"items":{"type":"string"},"type":"array","uniqueItems":true},"clusterState":{"$ref":"#/definitions/v1ClusterState","description":"Deprecated. Use clusterStates"},"clusterStates":{"items":{"$ref":"#/definitions/v1ClusterState"},"type":"array","uniqueItems":true},"cpuUsage":{"$ref":"#/definitions/v1FilterIntRange"},"environment":{"description":"Deprecated. Use environments","items":{"type":"string"},"type":"array","uniqueItems":true},"environments":{"items":{"type":"string"},"type":"array","uniqueItems":true},"healthState":{"default":"all","enum":["all","Healthy","UnHealthy"],"type":"string"},"isDeleted":{"default":false,"type":"boolean"},"isHostCluster":{"default":false,"type":"boolean","x-omitempty":false},"memoryUsage":{"$ref":"#/definitions/v1FilterNumberRange"},"metricPeriod":{"default":60,"description":"Metric period in minutes defines latest metrics by period","format":"int32","type":"integer"},"projectUids":{"items":{"type":"string"},"type":"array","uniqueItems":true},"tags":{"$ref":"#/definitions/v1FilterArray"}}},"v1SpectroClusterHealthCheck":{"properties":{"spec":{"$ref":"#/definitions/v1SpectroClusterHealthCheckSpec","type":"object"},"status":{"$ref":"#/definitions/v1SpectroClusterHealthCheckStatus","type":"object"}},"type":"object"},"v1SpectroClusterHealthCheckSpec":{"properties":{"name":{"type":"string"},"orgName":{"type":"string"},"ownerName":{"type":"string"},"ownerUid":{"type":"string"},"tenantUid":{"type":"string"}},"type":"object"},"v1SpectroClusterHealthCheckStatus":{"properties":{"machineHealthChecks":{"items":{"$ref":"#/definitions/v1HealthCheck"},"type":"array"},"msgBrokerHealthChecks":{"items":{"$ref":"#/definitions/v1HealthCheck"},"type":"array"},"spectroClusterHealthChecks":{"items":{"$ref":"#/definitions/v1HealthCheck"},"type":"array"}},"type":"object"},"v1SpectroClusterHealthCondition":{"description":"Spectro cluster health condition","properties":{"message":{"type":"string"},"relatedObject":{"$ref":"#/definitions/v1RelatedObject","type":"object"},"type":{"type":"string"}}},"v1SpectroClusterHealthStatus":{"description":"Spectro cluster health status","properties":{"agentVersion":{"type":"string"},"conditions":{"items":{"$ref":"#/definitions/v1SpectroClusterHealthCondition"},"type":"array","uniqueItems":true},"lastHeartBeatTimestamp":{"$ref":"#/definitions/v1Time"},"state":{"type":"string"}}},"v1SpectroClusterKubeCtlRedirect":{"description":"Active resources of tenant","properties":{"redirectUri":{"type":"string"}},"type":"object"},"v1SpectroClusterLocationInputEntity":{"description":"Cluster location","properties":{"location":{"$ref":"#/definitions/v1ClusterLocation"}},"type":"object"},"v1SpectroClusterMetaSummary":{"description":"Spectro cluster meta summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"specSummary":{"description":"Spectro cluster meta summary","properties":{"archType":{"description":"Architecture type of the cluster","items":{"default":"amd64","enum":["arm64","amd64"],"type":"string"},"type":"array"},"cloudAccountUid":{"type":"string"},"cloudRegion":{"type":"string"},"cloudType":{"type":"string"},"clusterType":{"type":"string"},"importMode":{"type":"string"},"location":{"$ref":"#/definitions/v1ClusterMetaSpecLocation"},"projectMeta":{"$ref":"#/definitions/v1ProjectMeta"},"tags":{"items":{"type":"string"},"type":"array"}},"type":"object"},"status":{"description":"Spectro cluster meta status summary","properties":{"cost":{"$ref":"#/definitions/v1ClusterMetaStatusCost"},"fips":{"$ref":"#/definitions/v1ClusterFips"},"health":{"$ref":"#/definitions/v1ClusterMetaStatusHealth"},"state":{"type":"string"},"updates":{"$ref":"#/definitions/v1ClusterMetaStatusUpdates"}}}},"type":"object"},"v1SpectroClusterMetadataFilterSpec":{"description":"Spectro cluster filter spec","properties":{"environment":{"type":"string"},"includeVirtual":{"default":false,"type":"boolean"},"isAlloy":{"default":false,"description":"isAlloy is renamed to isImported","type":"boolean"},"isImportReadOnly":{"default":true,"type":"boolean"},"isImported":{"default":false,"type":"boolean"},"name":{"$ref":"#/definitions/v1FilterString"},"state":{"type":"string"}}},"v1SpectroClusterMetadataSpec":{"description":"Spectro cluster metadata spec","properties":{"filter":{"$ref":"#/definitions/v1SpectroClusterMetadataFilterSpec"},"sort":{"enum":["environment","state","name"],"type":"string","x-nullable":true}}},"v1SpectroClusterMetrics":{"description":"Spectro cluster metrics","properties":{"cpu":{"$ref":"#/definitions/v1ComputeMetrics"},"memory":{"$ref":"#/definitions/v1ComputeMetrics"}}},"v1SpectroClusterMigration":{"description":"Spectro cluster migration status","properties":{"database":{"$ref":"#/definitions/v1MgmtMigrationStatuses"},"state":{"type":"string","x-omitempty":false},"tenant":{"$ref":"#/definitions/v1SpectroTenantMigration"}},"type":"object"},"v1SpectroClusterNotifications":{"description":"Spectro cluster notifications","properties":{"isAvailable":{"type":"boolean","x-omitempty":false}}},"v1SpectroClusterOidcClaims":{"properties":{"Email":{"type":"string","x-omitempty":false},"FirstName":{"type":"string","x-omitempty":false},"LastName":{"type":"string","x-omitempty":false},"SpectroTeam":{"type":"string","x-omitempty":false}},"type":"object"},"v1SpectroClusterOidcSpec":{"properties":{"clientId":{"type":"string","x-omitempty":false},"clientSecret":{"type":"string","x-omitempty":false},"issuerUrl":{"description":"the issuer is the URL identifier for the service","type":"string","x-omitempty":false},"requiredClaims":{"$ref":"#/definitions/v1SpectroClusterOidcClaims"},"scopes":{"items":{"type":"string"},"type":"array","x-omitempty":false}},"type":"object"},"v1SpectroClusterPackCondition":{"properties":{"message":{"type":"string"},"reason":{"type":"string"},"status":{"type":"string"},"type":{"enum":["ReadyForInstall","Installed","Ready","Error","UpgradeAvailable","WaitingForOtherLayers"],"type":"string"}},"type":"object"},"v1SpectroClusterPackConfigList":{"properties":{"items":{"items":{"$ref":"#/definitions/v1PackConfig"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1SpectroClusterPackDiff":{"description":"Cluster pack difference","properties":{"current":{"$ref":"#/definitions/v1PackRef"},"diffConfigKeys":{"items":{"type":"string"},"type":"array"},"target":{"$ref":"#/definitions/v1PackRef"}},"type":"object"},"v1SpectroClusterPackProperties":{"description":"Cluster pack properties response","properties":{"yaml":{"type":"string","x-omitempty":false}},"type":"object"},"v1SpectroClusterPackStatusEntity":{"properties":{"condition":{"$ref":"#/definitions/v1SpectroClusterPackCondition","description":"Pack deployment status conditions"},"endTime":{"$ref":"#/definitions/v1Time","description":"Pack deployment end time"},"name":{"description":"Pack name","type":"string"},"profileUid":{"description":"Cluster profile uid","type":"string"},"startTime":{"$ref":"#/definitions/v1Time","description":"Pack deployment start time"},"type":{"$ref":"#/definitions/v1PackType"},"version":{"description":"pack version","type":"string"}},"type":"object"},"v1SpectroClusterPacksEntity":{"description":"Cluster entity for pack refs validate","properties":{"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"type":"object"},"v1SpectroClusterPacksStatusEntity":{"properties":{"packs":{"items":{"$ref":"#/definitions/v1SpectroClusterPackStatusEntity"},"type":"array"}},"type":"object"},"v1SpectroClusterPolicies":{"description":"Cluster policies","properties":{"backupPolicy":{"$ref":"#/definitions/v1ClusterBackupConfig"},"scanPolicy":{"$ref":"#/definitions/v1ClusterComplianceScheduleConfig"}},"type":"object"},"v1SpectroClusterProfile":{"description":"Cluster profile response","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1SpectroClusterProfileSpec"}},"type":"object"},"v1SpectroClusterProfileEntity":{"description":"Cluster profile request payload","properties":{"packValues":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1PackValuesEntity"},"type":"array","uniqueItems":true},"replaceWithProfile":{"description":"Cluster profile uid to be replaced with new profile","type":"string"},"uid":{"description":"Cluster profile uid","type":"string"}},"type":"object"},"v1SpectroClusterProfileList":{"properties":{"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfile"},"type":"array"}},"required":["profiles"],"type":"object"},"v1SpectroClusterProfileSpec":{"description":"Cluster profile spec response","properties":{"cloudType":{"description":"Cluster profile cloud type","type":"string"},"packs":{"description":"Cluster profile packs array","items":{"$ref":"#/definitions/v1ClusterProfilePacksEntity"},"type":"array","uniqueItems":true},"relatedObject":{"$ref":"#/definitions/v1ObjectReference","description":"RelatedObject refers to the type of object(clustergroup, cluster or edgeHost) the cluster profile is associated with"},"type":{"description":"Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]","type":"string"},"version":{"description":"Cluster profile version","format":"int32","type":"integer"}},"type":"object"},"v1SpectroClusterProfileUpdates":{"properties":{"profiles":{"items":{"$ref":"#/definitions/v1ClusterProfileTemplate"},"type":"array","uniqueItems":true}},"type":"object"},"v1SpectroClusterProfileValidatorResponse":{"description":"Cluster profile validator response","properties":{"packs":{"$ref":"#/definitions/v1ConstraintValidatorResponse"},"uid":{"description":"Cluster profile uid","type":"string"}},"type":"object"},"v1SpectroClusterProfiles":{"properties":{"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"},"spcApplySettings":{"$ref":"#/definitions/v1SpcApplySettings"}},"required":["profiles"],"type":"object"},"v1SpectroClusterProfilesDeleteEntity":{"properties":{"profileUids":{"description":"Cluster's profile uid list","items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1SpectroClusterProfilesPacksManifests":{"properties":{"profiles":{"items":{"$ref":"#/definitions/v1ClusterProfilePacksManifests"},"type":"array"}},"required":["profiles"],"type":"object"},"v1SpectroClusterProfilesParamReferenceEntity":{"description":"Cluster profiles param reference entity","properties":{"references":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1SpectroClusterProfilesResolvedValues":{"description":"Cluster profiles resolved values response","properties":{"profiles":{"items":{"$ref":"#/definitions/v1ProfileResolvedValues"},"type":"array","uniqueItems":true}},"type":"object"},"v1SpectroClusterProjectCleanedResource":{"description":"List of cleaned project spectro cluster resources","properties":{"resources":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1SpectroClusterProjectCleanupValidateEntity":{"description":"Cluster duration thresholds","properties":{"deletingClusterDurationThresholdInMin":{"format":"int32","type":"integer"},"provisioningClusterDurationThresholdInMin":{"format":"int32","type":"integer"}},"type":"object"},"v1SpectroClusterRate":{"description":"Cluster estimated rate information","properties":{"machinePools":{"items":{"$ref":"#/definitions/v1MachinePoolRate"},"type":"array"},"name":{"type":"string"},"rate":{"$ref":"#/definitions/v1TotalClusterRate"},"resourceMetadata":{"$ref":"#/definitions/v1CloudResourceMetadata"}},"type":"object"},"v1SpectroClusterRepave":{"description":"Spectro cluster repave status information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1SpectroClusterRepaveSpec"},"status":{"$ref":"#/definitions/v1SpectroClusterRepaveStatus"}},"type":"object"},"v1SpectroClusterRepaveReason":{"description":"Cluster repave reason description","properties":{"code":{"type":"string"},"message":{"type":"string"},"pack":{"$ref":"#/definitions/v1SpectroClusterPackDiff"}},"type":"object"},"v1SpectroClusterRepaveSpec":{"properties":{"reasons":{"description":"Spectro cluster repave reasons","items":{"$ref":"#/definitions/v1SpectroClusterRepaveReason"},"type":"array"},"source":{"$ref":"#/definitions/v1ClusterRepaveSource"},"spectroClusterUid":{"type":"string"}},"type":"object"},"v1SpectroClusterRepaveStatus":{"properties":{"message":{"type":"string"},"repaveTransitionTime":{"$ref":"#/definitions/v1Time"},"state":{"$ref":"#/definitions/v1ClusterRepaveState"}},"type":"object"},"v1SpectroClusterRepaveValidationResponse":{"description":"Cluster repave validation response","properties":{"isRepaveRequired":{"description":"If true then the pack changes can cause cluster repave","type":"boolean","x-omitempty":false},"reasons":{"items":{"$ref":"#/definitions/v1SpectroClusterRepaveReason"},"type":"array"}},"type":"object"},"v1SpectroClusterRevision":{"description":"Revision specification details for a cluster","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1SpectroClusterSpec"}},"type":"object"},"v1SpectroClusterRevisionMeta":{"description":"Revision spec uid along with the creationTimestamp for the revision","properties":{"creationTimestamp":{"$ref":"#/definitions/v1Time"},"uid":{"description":"The unique id of the spc revision document","type":"string"}},"type":"object"},"v1SpectroClusterRevisionMetaList":{"properties":{"spcRevisions":{"items":{"$ref":"#/definitions/v1SpectroClusterRevisionMeta"},"type":"array"}},"type":"object"},"v1SpectroClusterSortFields":{"enum":["environment","clusterName","healthState","creationTimestamp","lastModifiedTimestamp"],"type":"string","x-nullable":true},"v1SpectroClusterSortSpec":{"properties":{"field":{"$ref":"#/definitions/v1SpectroClusterSortFields"},"order":{"$ref":"#/definitions/v1SortOrder"}}},"v1SpectroClusterSpec":{"description":"SpectroClusterSpec defines the desired state of SpectroCluster","properties":{"cloudConfigRef":{"$ref":"#/definitions/v1ObjectReference","description":"CloudConfigRef point to the cloud configuration for the cluster, input by user Ref types are: AwsCloudConfig/VsphereCloudConfig/BaremetalConfig/ etc this user config will be used to generate cloud specific cluster/machine spec for cluster-api For VM, it will contain information needed to launch VMs, like cloud account, instance type For BM, it will contain actual baremetal machines"},"cloudType":{"type":"string"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfig","description":"ClusterConfig is the configuration related to a general cluster. Configuration related to the health of the cluster."},"clusterProfileTemplates":{"description":"When a cluster created from a clusterprofile at t1, ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec.clusterprofileTemplate then clusterprofile may evolve to v2 at t2, but before user decide to upgrade the cluster, it will stay as it is when user decide to upgrade, clusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef","items":{"$ref":"#/definitions/v1ClusterProfileTemplate"},"type":"array"},"clusterType":{"enum":["PureManage","AlloyMonitor","AlloyAssist","AlloyExtend"],"type":"string"}},"type":"object"},"v1SpectroClusterStatus":{"description":"SpectroClusterStatus","properties":{"abortTimestamp":{"$ref":"#/definitions/v1Time"},"addOnServices":{"items":{"$ref":"#/definitions/v1SpectroClusterAddOnService"},"type":"array"},"apiEndpoints":{"items":{"$ref":"#/definitions/v1APIEndpoint"},"type":"array"},"clusterImport":{"$ref":"#/definitions/v1ClusterImport"},"conditions":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"fips":{"$ref":"#/definitions/v1ClusterFips"},"location":{"$ref":"#/definitions/v1ClusterLocation"},"packs":{"items":{"$ref":"#/definitions/v1ClusterPackStatus"},"type":"array"},"profileStatus":{"$ref":"#/definitions/v1ProfileStatus"},"repave":{"$ref":"#/definitions/v1ClusterRepaveStatus"},"services":{"items":{"$ref":"#/definitions/v1LoadBalancerService"},"type":"array"},"spcApply":{"$ref":"#/definitions/v1SpcApply"},"state":{"description":"current operational state","type":"string"},"upgrades":{"items":{"$ref":"#/definitions/v1Upgrades"},"type":"array"},"virtual":{"$ref":"#/definitions/v1Virtual"}},"type":"object"},"v1SpectroClusterSummary":{"description":"Spectro cluster summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"specSummary":{"description":"Spectro cluster spec summary","properties":{"archTypes":{"description":"Architecture type of the cluster","items":{"$ref":"#/definitions/v1ArchType"},"type":"array"},"cloudAccountMeta":{"$ref":"#/definitions/v1CloudAccountMeta"},"cloudConfig":{"$ref":"#/definitions/v1CloudConfigMeta"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigResponse"},"clusterProfileTemplate":{"$ref":"#/definitions/v1ClusterProfileTemplateMeta"},"clusterProfileTemplates":{"items":{"$ref":"#/definitions/v1ClusterProfileTemplateMeta"},"type":"array"},"projectMeta":{"$ref":"#/definitions/v1ProjectMeta"}},"type":"object"},"status":{"description":"Spectro cluster status summary","properties":{"clusterImport":{"$ref":"#/definitions/v1ClusterImport"},"cost":{"$ref":"#/definitions/v1ResourceCost"},"fips":{"$ref":"#/definitions/v1ClusterFips"},"health":{"$ref":"#/definitions/v1SpectroClusterHealthStatus"},"hourlyRate":{"$ref":"#/definitions/v1ResourceCost"},"location":{"$ref":"#/definitions/v1ClusterMetaSpecLocation"},"metrics":{"$ref":"#/definitions/v1SpectroClusterMetrics"},"notifications":{"$ref":"#/definitions/v1SpectroClusterNotifications"},"repave":{"$ref":"#/definitions/v1ClusterRepaveStatus"},"state":{"type":"string"},"virtual":{"$ref":"#/definitions/v1Virtual"}}}},"type":"object"},"v1SpectroClusterSummarySpec":{"description":"Spectro cluster filter summary spec","properties":{"filter":{"$ref":"#/definitions/v1SpectroClusterFilterSpec"},"sort":{"items":{"$ref":"#/definitions/v1SpectroClusterSortSpec"},"type":"array","uniqueItems":true}}},"v1SpectroClusterUidStatusSummary":{"description":"Spectro cluster status summary","properties":{"abortTimestamp":{"$ref":"#/definitions/v1Time"},"addOnServices":{"items":{"$ref":"#/definitions/v1SpectroClusterAddOnServiceSummary"},"type":"array"},"apiEndpoints":{"items":{"$ref":"#/definitions/v1APIEndpoint"},"type":"array"},"clusterImport":{"$ref":"#/definitions/v1ClusterImport"},"conditions":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"cost":{"$ref":"#/definitions/v1ResourceCost"},"fips":{"$ref":"#/definitions/v1ClusterFips"},"health":{"$ref":"#/definitions/v1SpectroClusterHealthStatus"},"hourlyRate":{"$ref":"#/definitions/v1ResourceCost"},"kubeMeta":{"$ref":"#/definitions/v1KubeMeta"},"location":{"$ref":"#/definitions/v1ClusterMetaSpecLocation"},"metrics":{"$ref":"#/definitions/v1SpectroClusterMetrics"},"notifications":{"$ref":"#/definitions/v1SpectroClusterNotifications"},"packs":{"items":{"$ref":"#/definitions/v1ClusterPackStatus"},"type":"array"},"services":{"items":{"$ref":"#/definitions/v1LoadBalancerService"},"type":"array"},"spcApply":{"$ref":"#/definitions/v1SpcApply"},"state":{"description":"current operational state","type":"string"},"upgrades":{"items":{"$ref":"#/definitions/v1Upgrades"},"type":"array"},"virtual":{"$ref":"#/definitions/v1Virtual"},"workspaces":{"items":{"$ref":"#/definitions/v1ResourceReference"},"type":"array"}}},"v1SpectroClusterUidSummary":{"description":"Spectro cluster summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"description":"Spectro cluster spec summary","properties":{"archTypes":{"description":"Architecture types of the cluster","items":{"$ref":"#/definitions/v1ArchType"},"type":"array"},"cloudConfig":{"$ref":"#/definitions/v1CloudConfigMeta"},"cloudaccount":{"$ref":"#/definitions/v1CloudAccountMeta"},"clusterProfileTemplate":{"$ref":"#/definitions/v1ClusterProfileTemplateMeta"},"clusterProfileTemplates":{"items":{"$ref":"#/definitions/v1ClusterProfileTemplateMeta"},"type":"array"}},"type":"object"},"status":{"$ref":"#/definitions/v1SpectroClusterUidStatusSummary"}},"type":"object"},"v1SpectroClusterUidUpgrades":{"description":"Cluster status upgrades","properties":{"upgrades":{"items":{"$ref":"#/definitions/v1Upgrades"},"type":"array"}},"type":"object"},"v1SpectroClusterVMCloneEntity":{"properties":{"annotationFilters":{"description":"Annotation filters","items":{"type":"string"},"type":"array"},"cloneName":{"description":"Cloning Virtual machine's name","type":"string"},"labelFilters":{"description":"Label filters","items":{"type":"string"},"type":"array"},"newMacAddresses":{"additionalProperties":{"type":"string"},"description":"NewMacAddresses manually sets that target interfaces' mac addresses. The key is the interface name and the value is the new mac address. If this field is not specified, a new MAC address will be generated automatically, as for any interface that is not included in this map","type":"object"},"newSMBiosSerial":{"description":"NewSMBiosSerial manually sets that target's SMbios serial. If this field is not specified, a new serial will be generated automatically.","type":"string"}},"required":["cloneName"],"type":"object"},"v1SpectroClusterValidatorResponse":{"description":"Cluster validator response","properties":{"machinePools":{"$ref":"#/definitions/v1ConstraintValidatorResponse"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileValidatorResponse"},"type":"array","uniqueItems":true}},"type":"object"},"v1SpectroClusters":{"properties":{"items":{"items":{"$ref":"#/definitions/v1SpectroCluster"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1SpectroClustersAgentsNotifyEntity":{"description":"SpectroClusters for which agents has to be notified","properties":{"clusterUids":{"items":{"type":"string"},"type":"array"},"notifyAllClusters":{"type":"boolean"}}},"v1SpectroClustersCostComputeSpec":{"description":"Cluster's cost compute spec","properties":{"clusterUids":{"items":{"type":"string"},"type":"array","uniqueItems":true},"startTime":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1SpectroClustersHealth":{"description":"Spectro Clusters health data","properties":{"errored":{"format":"int32","type":"integer","x-omitempty":false},"healthy":{"format":"int32","type":"integer","x-omitempty":false},"running":{"format":"int32","type":"integer","x-omitempty":false},"unhealthy":{"format":"int32","type":"integer","x-omitempty":false}},"type":"object"},"v1SpectroClustersMetadata":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ObjectMeta"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1SpectroClustersMetadataSearch":{"properties":{"items":{"items":{"$ref":"#/definitions/v1SpectroClusterMetaSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1SpectroClustersSummary":{"properties":{"items":{"items":{"$ref":"#/definitions/v1SpectroClusterSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1SpectroClustersUsageComputeSpec":{"description":"Cluster's usage compute spec","properties":{"clusterUids":{"items":{"type":"string"},"type":"array","uniqueItems":true},"startTime":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1SpectroCoxEdgeClusterEntity":{"description":"CoxEdge cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudAccountUid":{"description":"Cloud account uid to be used for cluster provisioning","type":"string"},"cloudConfig":{"$ref":"#/definitions/v1CoxEdgeClusterConfig"},"cloudType":{"type":"string"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1CoxEdgeMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudType","cloudAccountUid","cloudConfig"],"type":"object"}},"type":"object"},"v1SpectroCoxEdgeClusterRateEntity":{"description":"Cox Edge cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1CoxEdgeClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1CoxEdgeMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroCustomClusterEntity":{"description":"Custom cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"cloudAccountUid":{"description":"Cloud account uid to be used for cluster provisioning","type":"string"},"cloudConfig":{"$ref":"#/definitions/v1CustomClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1CustomClusterConfigEntity","description":"General cluster configuration like patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1CustomMachinePoolConfigEntity"},"type":"array"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudType","cloudAccountUid","cloudConfig"],"type":"object"}},"type":"object"},"v1SpectroEdgeClusterEntity":{"description":"Edge cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1EdgeClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1EdgeMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"type":"object"}},"type":"object"},"v1SpectroEdgeClusterImportEntity":{"description":"Spectro Edge cluster import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1ImportClusterConfig"}},"type":"object"}},"type":"object"},"v1SpectroEdgeClusterRateEntity":{"description":"Edge cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1EdgeClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1EdgeMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroEdgeNativeClusterEntity":{"description":"EdgeNative cluster create or update request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1EdgeNativeClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigParamEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1EdgeNativeMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"type":"object"}},"type":"object"},"v1SpectroEdgeNativeClusterImportEntity":{"description":"Spectro EdgeNative cluster import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1ImportClusterConfig"}},"type":"object"}},"type":"object"},"v1SpectroEdgeNativeClusterRateEntity":{"description":"Edge-native cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1EdgeNativeClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1EdgeNativeMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroEksClusterEntity":{"description":"Spectro EKS cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudAccountUid":{"description":"Cloud account uid to be used for cluster provisioning","type":"string"},"cloudConfig":{"$ref":"#/definitions/v1EksClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"fargateProfiles":{"items":{"$ref":"#/definitions/v1FargateProfile"},"type":"array"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1EksMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudAccountUid","cloudConfig"],"type":"object"}},"type":"object"},"v1SpectroEksClusterRateEntity":{"description":"Spectro EKS cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1EksClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1EksMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroGcpClusterEntity":{"description":"GCP cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudAccountUid":{"description":"Cloud account uid to be used for cluster provisioning","type":"string"},"cloudConfig":{"$ref":"#/definitions/v1GcpClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1GcpMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudType","cloudAccountUid","cloudConfig"],"type":"object"}},"type":"object"},"v1SpectroGcpClusterImportEntity":{"description":"Spectro GCP cluster import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1ImportClusterConfig"}},"type":"object"}},"type":"object"},"v1SpectroGcpClusterRateEntity":{"description":"Gcp cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1GcpClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1GcpMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroGenericClusterImportEntity":{"description":"Spectro generic cluster import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1ImportClusterConfig"},"edgeConfig":{"$ref":"#/definitions/v1ImportEdgeHostConfig"}},"type":"object"}},"type":"object"},"v1SpectroGenericClusterRateEntity":{"description":"Generic cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1GenericClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1GenericMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroInstallerEntity":{"description":"Spectro installer entity for create","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudAccountUid":{"type":"string"},"privateGatewayUid":{"type":"string"},"spectroClusterUid":{"type":"string"}},"type":"object"},"status":{"$ref":"#/definitions/v1InstallerStatus"}},"type":"object"},"v1SpectroInstallerInputEntity":{"description":"Spectro installer entity for create","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"}},"type":"object"},"v1SpectroInstallerStatus":{"description":"spectro installer status","properties":{"status":{"$ref":"#/definitions/v1InstallerStatus"}},"type":"object"},"v1SpectroInstallers":{"description":"List Spectro installers","properties":{"items":{"items":{"$ref":"#/definitions/v1SpectroInstallerEntity"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"type":"object"},"v1SpectroLibvirtClusterEntity":{"description":"Libvirt cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1LibvirtClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1LibvirtMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"type":"object"}},"type":"object"},"v1SpectroLibvirtClusterImportEntity":{"description":"Spectro Libvirt cluster import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1ImportClusterConfig"}},"type":"object"}},"type":"object"},"v1SpectroLibvirtClusterRateEntity":{"description":"libvirt cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1LibvirtClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1LibvirtMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroMaasClusterEntity":{"description":"Spectro Maas cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudAccountUid":{"description":"Cloud account uid to be used for cluster provisioning","type":"string"},"cloudConfig":{"$ref":"#/definitions/v1MaasClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1MaasMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudType","cloudAccountUid","cloudConfig"],"type":"object"}},"type":"object"},"v1SpectroMaasClusterImportEntity":{"description":"Spectro maas cluster import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1ImportClusterConfig"}},"type":"object"}},"type":"object"},"v1SpectroMaasClusterRateEntity":{"description":"Maas cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1MaasClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1MaasMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroMgmt":{"description":"Spectro management data","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1SpectroMgmtSpec"},"status":{"$ref":"#/definitions/v1SpectroMgmtStatus"}},"type":"object"},"v1SpectroMgmtSpec":{"description":"spectro management specifications","properties":{"installerMode":{"type":"string"},"spectroClusterUid":{"type":"string"},"targetVersion":{"type":"string"},"version":{"type":"string"}}},"v1SpectroMgmtStatus":{"description":"spectro management status information","properties":{"appVersions":{"items":{"$ref":"#/definitions/v1AppVersion"},"type":"array","uniqueItems":true},"isFailed":{"type":"boolean","x-omitempty":false},"lastUpdatedTime":{"$ref":"#/definitions/v1Time"},"message":{"type":"string"},"messageLogs":{"items":{"type":"string"},"type":"array"},"state":{"type":"string"},"upgradeHistory":{"items":{"$ref":"#/definitions/v1SpectroMgmtUpgrade"},"type":"array","uniqueItems":true}}},"v1SpectroMgmtUpgrade":{"description":"spectro management upgrade logs","properties":{"upgradeTime":{"$ref":"#/definitions/v1Time"},"version":{"type":"string"}}},"v1SpectroMgmtUpgradePack":{"description":"Spectro application management cluster upgrade pack information","properties":{"diffMessage":{"description":"Spectro application management cluster pack difference message","type":"string"},"layer":{"description":"Spectro application management cluster pack layer type","type":"string"},"name":{"description":"Spectro application management cluster pack name","type":"string"},"registryUid":{"description":"Spectro application management cluster pack registry unique identifier","type":"string"},"type":{"description":"Spectro application management cluster pack type","type":"string"},"uid":{"description":"Spectro application management cluster pack unique identifier","type":"string"},"values":{"description":"Spectro application management cluster pack values","type":"string"},"version":{"description":"Spectro application management cluster pack version","type":"string"}},"type":"object"},"v1SpectroMgmtUpgradeProfile":{"description":"Spectro application management cluster upgrade pack information","properties":{"packs":{"description":"Spectro application management cluster upgrade packs","items":{"$ref":"#/definitions/v1SpectroMgmtUpgradePack"},"type":"array"},"uid":{"description":"Spectro application management cluster profile unique identifier","type":"string"}},"type":"object"},"v1SpectroMgmtUpgradeProfiles":{"description":"Spectro application management cluster information","properties":{"profiles":{"description":"Spectro application management cluster profiles","items":{"$ref":"#/definitions/v1SpectroMgmtUpgradeProfile"},"type":"array"},"version":{"description":"Spectro application management cluster version","type":"string"}},"type":"object"},"v1SpectroMgmtUpgradeSpc":{"description":"Spectro application management cluster upgrade profiles","properties":{"current":{"$ref":"#/definitions/v1SpectroMgmtUpgradeProfiles"},"target":{"$ref":"#/definitions/v1SpectroMgmtUpgradeProfiles"}},"type":"object"},"v1SpectroOpenStackClusterEntity":{"description":"OpenStack cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudAccountUid":{"description":"Cloud account uid to be used for cluster provisioning","type":"string"},"cloudConfig":{"$ref":"#/definitions/v1OpenStackClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1OpenStackMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudAccountUid","cloudConfig"],"type":"object"}},"type":"object"},"v1SpectroOpenStackClusterImportEntity":{"description":"Spectro OpenStack cluster import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1ImportClusterConfig"}},"type":"object"}},"type":"object"},"v1SpectroOpenStackClusterRateEntity":{"description":"Openstack cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1OpenStackClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1OpenStackMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroTenantClusterMigration":{"description":"Spectro tenant cluster migration status","properties":{"message":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1SpectroTenantMigration":{"description":"Spectro tenant migration status","properties":{"clusters":{"items":{"$ref":"#/definitions/v1SpectroTenantClusterMigration"},"type":"array","uniqueItems":true},"state":{"type":"string","x-omitempty":false}},"type":"object"},"v1SpectroTencentClusterEntity":{"description":"Tencent cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudAccountUid":{"description":"Cloud account uid to be used for cluster provisioning","type":"string"},"cloudConfig":{"$ref":"#/definitions/v1TencentClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1TencentMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudType","cloudAccountUid","cloudConfig"],"type":"object"}},"type":"object"},"v1SpectroTencentClusterRateEntity":{"description":"Spectro Tencent cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1TencentClusterConfig"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1TencentMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpectroVirtualClusterEntity":{"description":"Spectro virtual cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1VirtualClusterConfig"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1VirtualMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudType","clusterConfig"],"type":"object"}},"type":"object"},"v1SpectroVsphereClusterEntity":{"description":"vSphere cluster request payload for create and update","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"properties":{"cloudAccountUid":{"description":"Cloud account uid to be used for cluster provisioning","type":"string"},"cloudConfig":{"$ref":"#/definitions/v1VsphereClusterConfigEntity"},"clusterConfig":{"$ref":"#/definitions/v1ClusterConfigEntity","description":"General cluster configuration like health, patching settings, namespace resource allocation, rbac"},"edgeHostUid":{"description":"Appliance (Edge Host) uid for Edge env","type":"string"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1VsphereMachinePoolConfigEntity"},"type":"array"},"policies":{"$ref":"#/definitions/v1SpectroClusterPolicies"},"profiles":{"items":{"$ref":"#/definitions/v1SpectroClusterProfileEntity"},"type":"array"}},"required":["cloudConfig"],"type":"object"}},"type":"object"},"v1SpectroVsphereClusterImportEntity":{"description":"Spectro Vsphere cluster import request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"properties":{"clusterConfig":{"$ref":"#/definitions/v1ImportClusterConfig"}},"type":"object"}},"type":"object"},"v1SpectroVsphereClusterRateEntity":{"description":"Vsphere cluster request payload for estimating rate","properties":{"cloudConfig":{"$ref":"#/definitions/v1VsphereClusterConfigEntity"},"machinepoolconfig":{"items":{"$ref":"#/definitions/v1VsphereMachinePoolConfigEntity"},"type":"array"}},"type":"object"},"v1SpotMarketOptions":{"description":"SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.","properties":{"maxPrice":{"description":"MaxPrice defines the maximum price the user is willing to pay for Spot VM instances","type":"string"}},"type":"object"},"v1SpotVMOptions":{"description":"SpotVMOptions defines the options relevant to running the Machine on Spot VMs","properties":{"maxPrice":{"description":"MaxPrice defines the maximum price the user is willing to pay for Spot VM instances","type":"string"}},"type":"object"},"v1SsoLogin":{"description":"Describes the allowed sso login details","properties":{"displayName":{"description":"Describes the display name for the sso login","type":"string"},"logo":{"description":"Describes the url path for the sso login","type":"string"},"name":{"description":"Describes the processed name for the sso login","type":"string"},"redirectUri":{"description":"Describes the sso login url for the authentication","type":"string"}},"type":"object"},"v1SsoLogins":{"description":"Describes the allowed sso logins","items":{"$ref":"#/definitions/v1SsoLogin"},"type":"array","uniqueItems":true},"v1StorageAccount":{"description":"Azure storage account provides a unique namespace for your Azure resources","properties":{"id":{"description":"Fully qualified resource ID for the resource","type":"string"},"kind":{"description":"The kind of the resource","type":"string"},"location":{"description":"The geo-location where the resource lives","type":"string"},"name":{"description":"The name of the resource","type":"string"}},"type":"object"},"v1StorageAccountEntity":{"description":"Azure storage account entity","properties":{"id":{"description":"Azure storage account id","type":"string"},"name":{"description":"Azure storage account name","type":"string"}},"type":"object"},"v1StorageContainer":{"description":"Azure storage container organizes a set of blobs, similar to a directory in a file system","properties":{"id":{"description":"Fully qualified resource ID for the resource.","type":"string"},"name":{"description":"The name of the resource","type":"string"},"type":{"description":"The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\"","type":"string"}},"type":"object"},"v1StorageCost":{"description":"Cloud storage cost","properties":{"discountedUsage":{"description":"Cloud storage upper limit which is free.","type":"string"},"price":{"description":"Array of cloud storage range prices","items":{"$ref":"#/definitions/v1StoragePrice"},"type":"array"}},"type":"object"},"v1StoragePrice":{"description":"Cloud storage price within an upper limit.","properties":{"limit":{"description":"Upper limit of cloud storage usage","type":"string"},"price":{"description":"Price of cloud storage type","type":"string"}},"type":"object"},"v1StorageRate":{"description":"Storage estimated rate information","properties":{"iops":{"format":"float64","type":"number"},"rate":{"format":"float64","type":"number","x-omitempty":false},"sizeGB":{"format":"float64","type":"number"},"throughput":{"format":"float64","type":"number"},"type":{"type":"string"}},"type":"object"},"v1StorageType":{"description":"Cloud cloud Storage type details","properties":{"cost":{"$ref":"#/definitions/v1StorageCost"},"iopsCost":{"$ref":"#/definitions/v1StorageCost"},"kind":{"description":"kind of storage type","type":"string"},"name":{"description":"Name of the storage type","type":"string"},"throughputCost":{"$ref":"#/definitions/v1StorageCost"}},"type":"object"},"v1StripeKey":{"description":"Stripe key object","properties":{"publishKey":{"description":"Publish stripe key","type":"string"}}},"v1Subnet":{"properties":{"cidrBlock":{"description":"CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.","type":"string"},"name":{"type":"string"},"securityGroupName":{"description":"Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes","type":"string"}},"type":"object"},"v1Subscription":{"description":"Azure Subscription Type","properties":{"authorizationSource":{"description":"The authorization source of the request. Valid values are one or more combinations of Legacy, RoleBased, Bypassed, Direct and Management","type":"string"},"displayName":{"description":"The subscription display name","type":"string"},"state":{"description":"The subscription state. Possible values are Enabled, Warned, PastDue, Disabled, and Deleted.","type":"string"},"subscriptionId":{"description":"The subscription ID","type":"string"}},"type":"object"},"v1SyftDependency":{"description":"Compliance Scan Syft Dependency","properties":{"name":{"type":"string"},"type":{"type":"string"},"version":{"type":"string"}}},"v1SyftDependencyEntity":{"description":"Syft dependency","properties":{"name":{"type":"string"},"type":{"type":"string"},"version":{"type":"string"}}},"v1SyftEntity":{"description":"Syft response","properties":{"report":{"$ref":"#/definitions/v1SyftReportEntity"},"requestUid":{"type":"string"},"status":{"enum":["Completed","InProgress","Failed","Initiated"],"type":"string"}},"required":["requestUid","status","report"]},"v1SyftImageContext":{"description":"Compliance Scan Syft Image Context","properties":{"containerName":{"type":"string"},"namespace":{"type":"string"},"podName":{"type":"string"}}},"v1SyftReport":{"description":"Compliance Scan Syft Report","properties":{"dependencies":{"items":{"$ref":"#/definitions/v1SyftDependency"},"type":"array"},"image":{"type":"string"},"imageContexts":{"items":{"$ref":"#/definitions/v1SyftImageContext"},"type":"array"},"isSBOMExist":{"type":"boolean"},"state":{"type":"string"},"time":{"$ref":"#/definitions/v1Time"},"vulnerabilities":{"items":{"$ref":"#/definitions/v1SyftVulnerability"},"type":"array"},"vulnerabilitySummary":{"$ref":"#/definitions/v1SyftVulnerabilitySummary"}}},"v1SyftReportEntity":{"description":"Syft report","properties":{"batchNo":{"format":"int32","type":"integer"},"batchSize":{"format":"int32","type":"integer"},"dependencies":{"items":{"$ref":"#/definitions/v1SyftDependencyEntity"},"type":"array"},"image":{"type":"string"},"imageContexts":{"items":{"$ref":"#/definitions/v1SyftImageContext"},"type":"array"},"sbom":{"type":"string"},"time":{"$ref":"#/definitions/v1Time"},"vulnerabilities":{"items":{"$ref":"#/definitions/v1SyftVulnerabilityEntity"},"type":"array"},"vulnerabilitySummary":{"$ref":"#/definitions/v1SyftVulnerabilitySummaryEntity"}}},"v1SyftScanContext":{"description":"Compliance Scan Syft Context","properties":{"format":{"type":"string"},"labelSelector":{"type":"string"},"namespace":{"type":"string"},"podName":{"type":"string"},"scope":{"type":"string"}}},"v1SyftVulnerability":{"description":"Compliance Scan Syft Vulnerability","properties":{"fixedIn":{"type":"string"},"installed":{"type":"string"},"name":{"type":"string"},"severity":{"type":"string"},"type":{"type":"string"},"vulnerability":{"type":"string"}}},"v1SyftVulnerabilityEntity":{"description":"Syft vulnerability","properties":{"fixedIn":{"type":"string"},"installed":{"type":"string"},"name":{"type":"string"},"severity":{"type":"string"},"type":{"type":"string"},"vulnerability":{"type":"string"}}},"v1SyftVulnerabilitySummary":{"description":"Compliance Scan Syft Vulnerability Summary","properties":{"critical":{"format":"int32","type":"integer"},"high":{"format":"int32","type":"integer"},"low":{"format":"int32","type":"integer"},"medium":{"format":"int32","type":"integer"},"negligible":{"format":"int32","type":"integer"},"unknown":{"format":"int32","type":"integer"}}},"v1SyftVulnerabilitySummaryEntity":{"description":"Syft vulnerability summary","properties":{"critical":{"format":"int32","type":"integer"},"high":{"format":"int32","type":"integer"},"low":{"format":"int32","type":"integer"},"medium":{"format":"int32","type":"integer"},"negligible":{"format":"int32","type":"integer"},"unknown":{"format":"int32","type":"integer"}}},"v1SysLogin":{"description":"System admin login input","properties":{"emailId":{"type":"string"},"password":{"format":"password","type":"string"},"username":{"type":"string"}},"type":"object"},"v1SysUserToken":{"description":"Auth token response","properties":{"Authorization":{"type":"string"},"IsEmailSet":{"type":"boolean","x-omitempty":false},"IsEmailVerified":{"type":"boolean","x-omitempty":false},"IsMfa":{"type":"boolean","x-omitempty":false},"IsPasswordReset":{"type":"boolean","x-omitempty":false}},"type":"object"},"v1SystemAdmin":{"description":"System Admin information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1SystemAdministratorSpec"},"status":{"$ref":"#/definitions/v1SystemAdministratorStatus"}},"type":"object"},"v1SystemAdminActivation":{"description":"System Administrator Activation Specification","properties":{"expiry":{"$ref":"#/definitions/v1Time"},"link":{"type":"string"}},"type":"object"},"v1SystemAdminEntity":{"description":"System Admin information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1SystemAdministratorSpec"}},"type":"object"},"v1SystemAdminMfa":{"description":"System Administrator MFA configuration","properties":{"devices":{"items":{"type":"string"},"type":"array"},"state":{"type":"string"}},"type":"object"},"v1SystemAdminProfile":{"description":"System Administrator Profile Entity","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1SystemAdminProfileSpec"}},"type":"object"},"v1SystemAdminProfileSpec":{"description":"System Administrator Profile Specification","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"}},"type":"object"},"v1SystemAdministratorSpec":{"description":"System Administrator Entity Specification","properties":{"adminType":{"enum":["AccountAdmin","OperationAdmin"],"type":"string"},"emailId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"mfa":{"$ref":"#/definitions/v1SystemAdminMfa","type":"string"}},"required":["firstName","lastName","emailId","adminType"],"type":"object"},"v1SystemAdministratorStatus":{"description":"System Administrator Status","properties":{"activation":{"$ref":"#/definitions/v1SystemAdminActivation"},"createdBy":{"type":"string"},"lastPasswordUpdate":{"$ref":"#/definitions/v1Time"},"lastSignIn":{"$ref":"#/definitions/v1Time"},"state":{"type":"string"}},"type":"object"},"v1SystemAdmins":{"description":"List of System Admin information's","properties":{"items":{"items":{"$ref":"#/definitions/v1SystemAdmin"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1SystemAwsAccount":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemAwsSpec"}},"type":"object"},"v1SystemAwsImage":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemAwsImageSpec"}},"type":"object"},"v1SystemAwsImageSpec":{"description":"system aws account specifications","properties":{"goldenImageRegion":{"type":"string"}}},"v1SystemAwsSpec":{"description":"system aws account specifications","properties":{"accessKey":{"type":"string"},"secretKey":{"type":"string"}}},"v1SystemAwsStsAccount":{"description":"System AWS Gov account specifications","properties":{"accessKey":{"type":"string"},"accountId":{"type":"string"},"secretKey":{"type":"string"}}},"v1SystemAzureAccount":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemAzureSpec"}},"type":"object"},"v1SystemAzureSpec":{"description":"system azure account specifications","properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"},"subscriptionId":{"type":"string"},"tenantId":{"type":"string"}}},"v1SystemAzureStorage":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemAzureStorageSpec"}},"type":"object"},"v1SystemAzureStorageSpec":{"description":"system aws account specifications","properties":{"accessKey":{"type":"string"},"container":{"type":"string"},"storageName":{"type":"string"}}},"v1SystemBackupConfigSpec":{"description":"system backup config spec","properties":{"ftp":{"$ref":"#/definitions/v1SystemFtpSpec"},"hourOfTheDay":{"type":"integer","x-omitempty":false},"interval":{"type":"integer","x-omitempty":false},"retentionPeriod":{"type":"integer","x-omitempty":false}},"type":"object"},"v1SystemBackupFtpConfigSpec":{"description":"system backup config spec","properties":{"backupSpec":{"$ref":"#/definitions/v1SystemBackupSpec"},"ftp":{"$ref":"#/definitions/v1SystemFtpSpec"}},"type":"object"},"v1SystemBackupS3ConfigSpec":{"description":"system backup config spec","properties":{"backupSpec":{"$ref":"#/definitions/v1SystemBackupSpec"},"s3":{"$ref":"#/definitions/v1SystemS3Spec"}},"type":"object"},"v1SystemBackupSpec":{"description":"system backup config spec","properties":{"hourOfTheDay":{"type":"integer","x-omitempty":false},"interval":{"type":"integer","x-omitempty":false},"retentionPeriod":{"type":"integer","x-omitempty":false}},"type":"object"},"v1SystemCertificateSpec":{"description":"system smtp config spec","properties":{"caCert":{"type":"string"},"crt":{"type":"string"},"insecureSkipVerify":{"type":"boolean"},"key":{"type":"string"}},"type":"object"},"v1SystemConfigAuth":{"description":"System config auth","properties":{"enforceServiceAuthToken":{"type":"boolean","x-omitempty":false},"enforceTlsVerify":{"type":"boolean","x-omitempty":false}}},"v1SystemConfigCluster":{"description":"System config cluster","properties":{"stableEndpointAccess":{"type":"boolean","x-omitempty":false}}},"v1SystemConfigDomainSpec":{"description":"system domain config spec","properties":{"apiServer":{"type":"string"},"derivedApiServer":{"type":"string"},"derivedRootDomain":{"type":"string"},"rootDomain":{"type":"string"},"urlProtocol":{"type":"string"}},"type":"object"},"v1SystemConfigStoreEntity":{"properties":{"key":{"type":"string","x-omitempty":false},"value":{"type":"string","x-omitempty":false}},"required":["key","value"],"type":"object"},"v1SystemCryptoData":{"description":"SystemAdmin","properties":{"input":{"type":"string"},"result":{"type":"string"}},"type":"object"},"v1SystemCryptoInput":{"description":"SystemAdmin","properties":{"input":{"type":"string"}},"type":"object"},"v1SystemEdgeImage":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemEdgeImageSpec"}},"type":"object"},"v1SystemEdgeImageSpec":{"description":"system edge account specifications","properties":{"caCert":{"type":"string"},"imagesHostEndpoint":{"type":"string"},"insecureSkipVerify":{"type":"boolean"}}},"v1SystemEdgeNativeImage":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemEdgeNativeImageSpec"}},"type":"object"},"v1SystemEdgeNativeImageSpec":{"description":"system edge-native account specifications","properties":{"caCert":{"type":"string"},"imagesHostEndpoint":{"type":"string"},"insecureSkipVerify":{"type":"boolean"},"stylusImagesEndpoint":{"type":"string"}}},"v1SystemFtpSpec":{"description":"system ftp config spec","properties":{"dir":{"type":"string","x-omitempty":false},"password":{"type":"string","x-omitempty":false},"server":{"type":"string","x-omitempty":false},"username":{"type":"string","x-omitempty":false}},"type":"object"},"v1SystemGcpAccount":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemGcpSpec"}},"type":"object"},"v1SystemGcpImage":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemGcpImageSpec"}},"type":"object"},"v1SystemGcpImageSpec":{"description":"system gcp account specifications","properties":{"imageProject":{"type":"string"}}},"v1SystemGcpSpec":{"description":"system gcp account specifications","properties":{"json":{"type":"string"}}},"v1SystemGitAuthSpec":{"description":"system git auth account specifications","properties":{"_type":{"type":"string"},"password":{"type":"string"},"token":{"type":"string"},"username":{"$ref":"#/definitions/v1SystemGitAuthSpec"}}},"v1SystemGithubSsoSpec":{"description":"system sso github config spec","properties":{"clientId":{"type":"string"},"clientSecretKey":{"type":"string"},"isEnabled":{"type":"boolean"},"logoUrl":{"type":"string","x-omitempty":false}},"type":"object"},"v1SystemKubectlSpec":{"description":"system web kubectl config spec","properties":{"endpoint":{"type":"string"},"isEnabled":{"type":"boolean"}},"type":"object"},"v1SystemLibvirtImage":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemLibvirtImageSpec"}},"type":"object"},"v1SystemLibvirtImageSpec":{"description":"system libvirt account specifications","properties":{"caCert":{"type":"string"},"imagesHostEndpoint":{"type":"string"},"insecureSkipVerify":{"type":"boolean"}}},"v1SystemLoggerSpec":{"description":"system logger config spec","properties":{"format":{"type":"string"},"level":{"type":"string"}},"type":"object"},"v1SystemMaasImage":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemMaasImageSpec"}},"type":"object"},"v1SystemMaasImageSpec":{"description":"system maas account specifications","properties":{"caCert":{"type":"string"},"imagesHostEndpoint":{"type":"string"},"insecureSkipVerify":{"type":"boolean"}}},"v1SystemOciImageRegistry":{"description":"system web kubectl config spec","properties":{"baseContentPath":{"type":"string"},"caCert":{"type":"string"},"endpoint":{"type":"string"},"insecureSkipVerify":{"type":"boolean"},"mirrorRegistries":{"type":"string"},"name":{"type":"string"},"password":{"type":"string"},"username":{"type":"string"}},"type":"object"},"v1SystemOidcClaims":{"properties":{"Email":{"type":"string","x-omitempty":false},"FirstName":{"type":"string","x-omitempty":false},"LastName":{"type":"string","x-omitempty":false},"SpectroTeam":{"type":"string","x-omitempty":false}},"type":"object"},"v1SystemOidcClientSpec":{"description":"system sso oidc config spec","properties":{"callbackUrl":{"type":"string","x-omitempty":false},"clientId":{"type":"string","x-omitempty":false},"clientSecret":{"type":"string","x-omitempty":false},"isEnabled":{"type":"boolean","x-omitempty":false},"issuerUrl":{"description":"the issuer is the URL identifier for the service","type":"string","x-omitempty":false},"logoUrl":{"type":"string","x-omitempty":false},"requiredClaims":{"$ref":"#/definitions/v1SystemOidcClaims"},"scopes":{"items":{"type":"string"},"type":"array","x-omitempty":false}},"type":"object"},"v1SystemOpenstackImage":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemOpenstackImageSpec"}},"type":"object"},"v1SystemOpenstackImageSpec":{"description":"system openstack account specifications","properties":{"imagesHostEndpoint":{"type":"string"}}},"v1SystemPasswordPolicySpec":{"description":"system password policy","properties":{"creationTimestamp":{"$ref":"#/definitions/v1Time"},"expiryDurationInDays":{"type":"integer"},"firstReminderInDays":{"type":"integer"},"isRegex":{"type":"boolean"},"minLength":{"type":"integer"},"minNumOfBlockLetters":{"type":"integer"},"minNumOfDigits":{"type":"integer"},"minNumOfSmallLetters":{"type":"integer"},"minNumOfSpecialCharacters":{"type":"integer"},"regex":{"type":"string"},"reminderFrequency":{"type":"integer"},"updateTimestamp":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1SystemPlan":{"description":"system plan","properties":{"freeCredits":{"items":{"$ref":"#/definitions/v1SystemPlanCredit"},"type":"array"},"planLimit":{"$ref":"#/definitions/v1SystemPlanLimit"},"slaCredits":{"items":{"$ref":"#/definitions/v1SystemPlanCredit"},"type":"array"},"systemStartDate":{"$ref":"#/definitions/v1Time"}}},"v1SystemPlanCredit":{"description":"Plan Credit","properties":{"cpuCoreHours":{"format":"int64","type":"number","x-omitempty":false},"creditUid":{"type":"string"},"expiry":{"$ref":"#/definitions/v1Time","description":"credit expiry time"},"name":{"type":"string"},"start":{"$ref":"#/definitions/v1Time","description":"credit start time"},"type":{"enum":["Pure","Alloy"],"type":"string"}},"required":["type"]},"v1SystemPlanLimit":{"description":"System Monthly Plan Limit","properties":{"alloy":{"$ref":"#/definitions/v1SystemPlanLimitSpec"},"isUnlimited":{"description":"is unlimited cpu core hours","type":"boolean","x-omitempty":false},"pure":{"$ref":"#/definitions/v1SystemPlanLimitSpec"}}},"v1SystemPlanLimitSpec":{"description":"Monthly Plan Limit spec","properties":{"cpuCoreHours":{"description":"cpu cores hours","format":"int64","type":"integer","x-omitempty":false},"overageLimitPercentage":{"default":25,"description":"overage limit in percentage","format":"int8","type":"integer","x-omitempty":false},"warnLimitPercentage":{"default":90,"description":"warning limit in percentage","format":"int8","type":"integer","x-omitempty":false}}},"v1SystemPlanLimitUpdate":{"description":"System Plan limit change update entity","properties":{"planLimit":{"$ref":"#/definitions/v1SystemPlanLimit"}}},"v1SystemProductUsage":{"description":"Yearly usage","properties":{"allocatedCredits":{"description":"Allocated credits","format":"int64","type":"number"},"breachedCredits":{"description":"Credits exceeded the allocated and free credits","format":"float64","type":"number"},"freeSlaCredits":{"description":"Free allocated SLA credits","format":"int64","type":"number"},"usedCredits":{"description":"Used credits","format":"float64","type":"number"}}},"v1SystemProxySpec":{"description":"system proxy config spec","properties":{"httpProxy":{"type":"string"},"httpsProxy":{"type":"string"},"noProxy":{"type":"string"}},"type":"object"},"v1SystemRateLimit":{"description":"system rate-limit","properties":{"isActive":{"type":"boolean"}}},"v1SystemRegistry":{"description":"Registry configuration","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1RegistryConf"}},"type":"object"},"v1SystemResourceLimit":{"properties":{"kind":{"$ref":"#/definitions/v1ResourceLimitType","type":"string","x-omitempty":false},"limit":{"format":"int64","type":"number","x-omitempty":false}}},"v1SystemResourceLimits":{"description":"System resource limits. Supported resources keys are 'user','project','apiKey','team','role','cloudaccount','clusterprofile','workspace','registry','privategateway','location','certificate','macro','sshkey','alert','spectrocluster','edgehost'.","properties":{"resources":{"items":{"$ref":"#/definitions/v1SystemResourceLimit"},"type":"array","uniqueItems":true}}},"v1SystemRetentionPolicy":{"description":"system retention policy","properties":{"retentionPeriod":{"type":"integer","x-omitempty":false}},"type":"object"},"v1SystemReverseProxy":{"description":"system config reverse proxy","properties":{"caCert":{"type":"string"},"clientCert":{"type":"string"},"clientKey":{"type":"string"},"port":{"type":"integer"},"protocol":{"enum":["http","https"],"type":"string"},"server":{"type":"string"},"vHostPort":{"type":"integer"}}},"v1SystemS3Spec":{"description":"system backup s3 storage config spec","properties":{"accessKey":{"type":"string","x-omitempty":false},"bucket":{"type":"string","x-omitempty":false},"folder":{"type":"string","x-omitempty":false},"region":{"type":"string","x-omitempty":false},"secretKey":{"type":"string","x-omitempty":false}},"type":"object"},"v1SystemScarSpec":{"description":"system scar config spec","properties":{"baseContentPath":{"type":"string"},"caCert":{"type":"string"},"endpoint":{"type":"string"},"insecureVerify":{"type":"boolean"},"password":{"type":"string"},"username":{"type":"string"}},"type":"object"},"v1SystemScarValidationResponse":{"description":"system proxy config spec","properties":{"spectroVersion":{"type":"string"}},"type":"object"},"v1SystemSecurityMode":{"description":"System service mode","properties":{"securityMode":{"type":"string"}}},"v1SystemServiceLogin":{"description":"System service login input","properties":{"authToken":{"description":"authToken helps in two step verification for the authorization.","type":"string"},"isSystem":{"type":"boolean"},"overlordUid":{"type":"string"},"serviceName":{"type":"string"},"serviceVersion":{"type":"string"},"spectroClusterUid":{"type":"string"},"tenantUid":{"type":"string"}},"type":"object"},"v1SystemSmtpSpec":{"description":"system smtp config spec","properties":{"fromEmailId":{"type":"string"},"insecureSkipVerifyTls":{"type":"boolean"},"password":{"type":"string"},"smtpPort":{"type":"integer"},"smtpServer":{"type":"string"},"userName":{"type":"string"}},"type":"object"},"v1SystemSsoAuthSpec":{"description":"system sso config spec","properties":{"github":{"$ref":"#/definitions/v1SystemGithubSsoSpec"},"oidcAuthSpecs":{"additionalProperties":{"$ref":"#/definitions/v1SystemOidcClientSpec"},"type":"object"}},"type":"object"},"v1SystemSsoSpec":{"description":"system sso config spec","properties":{"acsUrlRoot":{"type":"string"},"acsUrlScheme":{"type":"string"},"apiVersion":{"type":"string"},"audienceUrl":{"type":"string"},"authSpec":{"$ref":"#/definitions/v1SystemSsoAuthSpec"},"entityId":{"type":"string"}},"type":"object"},"v1SystemStartDate":{"description":"system start date","properties":{"systemStartDate":{"$ref":"#/definitions/v1Time"}}},"v1SystemStorageS3ConfigSpec":{"description":"system storage s3 config spec","properties":{"isEnabled":{"type":"boolean"},"retentionPolicy":{"$ref":"#/definitions/v1SystemRetentionPolicy"},"s3":{"$ref":"#/definitions/v1SystemS3Spec"}},"type":"object"},"v1SystemTencentAccount":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemTencentSpec"}},"type":"object"},"v1SystemTencentSpec":{"description":"system tencent account specifications","properties":{"secretId":{"type":"string"},"secretKey":{"type":"string"}}},"v1SystemTimeseriesMetrics":{"description":"system timeseries metrics config","properties":{"archivalInterval":{"type":"integer"},"batchInterval":{"type":"integer"},"enabled":{"type":"boolean","x-omitempty":false},"retentionPeriod":{"type":"integer"}},"type":"object"},"v1SystemTimeseriesSpec":{"description":"system timeseries config spec","properties":{"machine":{"$ref":"#/definitions/v1SystemTimeseriesMetrics"},"pod":{"$ref":"#/definitions/v1SystemTimeseriesMetrics"}},"type":"object"},"v1SystemUsage":{"description":"System usage billing object","properties":{"planLimit":{"$ref":"#/definitions/v1PlanLimit"},"usageBillingPeriod":{"$ref":"#/definitions/v1InvoiceBillingPeriod"},"yearlyUsages":{"description":"List of every year system usage","items":{"$ref":"#/definitions/v1YearlyUsage"},"type":"array","uniqueItems":true}}},"v1SystemUserMe":{"description":"User information wrt permissions","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1SystemUserSpec"},"status":{"$ref":"#/definitions/v1SystemUserMeStatus"}},"type":"object"},"v1SystemUserMeStatus":{"description":"User status with permissions","properties":{"isEmailSet":{"type":"boolean","x-omitempty":false},"isEmailVerified":{"type":"boolean","x-omitempty":false},"isMfaEnabled":{"type":"boolean","x-omitempty":false},"isPasswordReset":{"type":"boolean","x-omitempty":false},"lastEmailUpdateTime":{"$ref":"#/definitions/v1Time"},"lastEmailVerifiedTime":{"$ref":"#/definitions/v1Time"},"lastLoginTime":{"$ref":"#/definitions/v1Time"},"lastPasswordUpdateTime":{"$ref":"#/definitions/v1Time"}}},"v1SystemUserSpec":{"description":"User specifications","properties":{"adminType":{"description":"Admin type","type":"string"},"emailId":{"description":"System User's email id","type":"string"}}},"v1SystemVersionInfo":{"description":"system version info","properties":{"version":{"type":"string"}},"type":"object"},"v1SystemVsphereImage":{"description":"SystemAdmin","properties":{"spec":{"$ref":"#/definitions/v1SystemVsphereImageSpec"}},"type":"object"},"v1SystemVsphereImageSpec":{"description":"system vsphere account specifications","properties":{"caCert":{"type":"string"},"imagesHostEndpoint":{"type":"string"},"insecureSkipVerify":{"type":"boolean"},"overlordOvaLocation":{"type":"string"}}},"v1TagFilter":{"description":"Tag Filter create spec","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1TagFilterSpec"}},"type":"object"},"v1TagFilterGroup":{"properties":{"conjunction":{"$ref":"#/definitions/v1SearchFilterConjunctionOperator"},"filters":{"items":{"$ref":"#/definitions/v1TagFilterItem"},"type":"array","uniqueItems":true}}},"v1TagFilterItem":{"properties":{"key":{"type":"string"},"negation":{"type":"boolean"},"operator":{"$ref":"#/definitions/v1SearchFilterKeyValueOperator"},"values":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1TagFilterSpec":{"description":"Filter create spec","properties":{"filterGroup":{"$ref":"#/definitions/v1TagFilterGroup"}},"type":"object"},"v1TagFilterSummary":{"description":"Filter summary object","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1TagFilterSpec"}},"type":"object"},"v1Taint":{"description":"Taint","properties":{"effect":{"enum":["NoSchedule","PreferNoSchedule","NoExecute"],"type":"string"},"key":{"description":"The taint key to be applied to a node","type":"string"},"timeAdded":{"$ref":"#/definitions/v1Time"},"value":{"description":"The taint value corresponding to the taint key.","type":"string"}},"type":"object"},"v1Team":{"description":"Team information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1TeamSpec"},"status":{"$ref":"#/definitions/v1TeamStatus"}},"type":"object"},"v1TeamPatch":{"items":{"$ref":"#/definitions/v1HttpPatch"},"type":"array"},"v1TeamRoleMap":{"properties":{"roles":{"items":{"type":"string"},"type":"array"},"teamId":{"type":"string"}}},"v1TeamSpec":{"description":"Team specifications","properties":{"roles":{"items":{"type":"string"},"type":"array","uniqueItems":true},"sources":{"items":{"type":"string"},"type":"array","uniqueItems":true},"users":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1TeamSpecSummary":{"properties":{"emailId":{"type":"string"},"projects":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"roles":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"users":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"}},"type":"object"},"v1TeamStatus":{"description":"Team status","type":"object"},"v1TeamSummary":{"description":"Team summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1TeamSpecSummary"},"status":{"$ref":"#/definitions/v1TeamStatus"}},"type":"object"},"v1TeamSummarySortFields":{"enum":["name","creationTimestamp"],"type":"string","x-nullable":true},"v1TeamSummarySortSpec":{"properties":{"field":{"$ref":"#/definitions/v1TeamSummarySortFields"},"order":{"$ref":"#/definitions/v1SortOrder"}}},"v1TeamTenantRolesEntity":{"properties":{"roles":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"}},"type":"object"},"v1TeamTenantRolesUpdate":{"properties":{"roles":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1Teams":{"properties":{"items":{"items":{"$ref":"#/definitions/v1Team"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1TeamsBatch":{"items":{"$ref":"#/definitions/v1Team"},"type":"array","uniqueItems":true},"v1TeamsFilterSpec":{"description":"Teams filter spec","properties":{"name":{"$ref":"#/definitions/v1FilterString"}}},"v1TeamsMetadata":{"properties":{"items":{"items":{"$ref":"#/definitions/v1ObjectEntity"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1TeamsSummary":{"description":"Deprecated, Use v1UsersSummaryList - Returns User summary","properties":{"items":{"items":{"$ref":"#/definitions/v1TeamSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1TeamsSummaryList":{"description":"Returns Team summary","properties":{"items":{"items":{"$ref":"#/definitions/v1TeamSummary"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1TeamsSummarySpec":{"description":"Teams filter summary spec","properties":{"filter":{"$ref":"#/definitions/v1TeamsFilterSpec"},"sort":{"items":{"$ref":"#/definitions/v1TeamSummarySortSpec"},"type":"array","uniqueItems":true}}},"v1Tenant":{"description":"Tenant","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1TenantSpec"},"status":{"$ref":"#/definitions/v1TenantStatus"}},"type":"object"},"v1TenantActivate":{"description":"Activate/Deactivate tenant","properties":{"isActive":{"default":true,"type":"boolean"}},"type":"object"},"v1TenantActivity":{"description":"Active tenant and clusters data","properties":{"clustersInfo":{"$ref":"#/definitions/v1ClustersInfo"},"org":{"type":"string"},"planType":{"type":"string"},"totalProjects":{"format":"int64","type":"number"},"totalUsers":{"format":"int64","type":"number"},"uid":{"type":"string"},"users":{"items":{"$ref":"#/definitions/v1UserActivityInfo"},"type":"array","uniqueItems":true}},"type":"object"},"v1TenantAddressPatch":{"description":"Tenant Address","properties":{"address":{"$ref":"#/definitions/v1Address"}},"type":"object"},"v1TenantAssetCert":{"description":"tenant cert","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1Cert"}},"type":"object"},"v1TenantAssetCerts":{"properties":{"items":{"items":{"$ref":"#/definitions/v1TenantAssetCert"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1TenantBasicEntity":{"description":"Tenant Basic param","properties":{"emailId":{"type":"string"},"orgName":{"type":"string"}},"type":"object"},"v1TenantCleanUpStatus":{"description":"Tenant CleanUp Status","properties":{"cleanUpError":{"type":"string"},"cleanUpStages":{"type":"string"},"cleanUpTimestamp":{"$ref":"#/definitions/v1Time"},"cleanedResources":{"items":{"type":"string"},"type":"array"},"isCompleted":{"type":"boolean","x-omitempty":false},"isInProgress":{"type":"boolean","x-omitempty":false}},"type":"object"},"v1TenantClusterSettings":{"properties":{"nodesAutoRemediationSetting":{"$ref":"#/definitions/v1NodesAutoRemediationSettings"}}},"v1TenantContractSpec":{"description":"Tenant contract settings","properties":{"acceptedTime":{"$ref":"#/definitions/v1Time","description":"If the contract is accepted offline, set the accepted time"},"isAccepted":{"description":"If the contract is accepted offline, then set this field to true","type":"boolean"},"isRequired":{"description":"Is the contract required, for on-prem installation it will be false","type":"boolean"}},"required":["isRequired","isAccepted"],"type":"object"},"v1TenantDomains":{"description":"Tenant domains","properties":{"domains":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1TenantEmailPatch":{"description":"Tenant EmailId","properties":{"emailId":{"type":"string"}},"type":"object"},"v1TenantEnableClusterGroup":{"description":"Enable or Disable cluster group for a tenant","properties":{"hideSystemClusterGroups":{"type":"boolean","x-omitempty":false},"isClusterGroupEnabled":{"description":"Deprecated. Use hideSystemClusterGroups field","type":"boolean","x-omitempty":false}}},"v1TenantEntity":{"description":"Tenant Entity","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1TenantSpecEntity"}},"type":"object"},"v1TenantFreemium":{"description":"Tenant freemium configuration","properties":{"activeClustersLimit":{"type":"integer","x-omitempty":false},"isFreemium":{"type":"boolean","x-omitempty":false},"isUnlimited":{"type":"boolean","x-omitempty":false},"overageUsageLimit":{"format":"float64","type":"number","x-omitempty":false},"totalUsageLimit":{"format":"float64","type":"number","x-omitempty":false}}},"v1TenantFreemiumUsage":{"properties":{"isFreemium":{"type":"boolean","x-omitempty":false},"isUnlimited":{"type":"boolean","x-omitempty":false},"limit":{"$ref":"#/definitions/v1FreemiumUsageLimit"},"usage":{"$ref":"#/definitions/v1FreemiumUsage"}},"type":"object"},"v1TenantOidcClaims":{"properties":{"Email":{"type":"string","x-omitempty":false},"FirstName":{"type":"string","x-omitempty":false},"LastName":{"type":"string","x-omitempty":false},"SpectroTeam":{"type":"string","x-omitempty":false}},"type":"object"},"v1TenantOidcClientSpec":{"description":"Tenant","properties":{"callbackUrl":{"type":"string","x-omitempty":false},"clientId":{"type":"string","x-omitempty":false},"clientSecret":{"type":"string","x-omitempty":false},"defaultTeams":{"items":{"type":"string"},"type":"array","x-omitempty":false},"isSsoEnabled":{"type":"boolean","x-omitempty":false},"issuerUrl":{"description":"the issuer is the URL identifier for the service","type":"string","x-omitempty":false},"logoutUrl":{"type":"string","x-omitempty":false},"requiredClaims":{"$ref":"#/definitions/v1TenantOidcClaims"},"scopes":{"items":{"type":"string"},"type":"array","x-omitempty":false},"scopesDelimiter":{"type":"string","x-omitempty":false},"syncSsoTeams":{"type":"boolean","x-omitempty":false}},"type":"object"},"v1TenantPasswordPolicyEntity":{"description":"Tenant Password Policy Entity","properties":{"creationTimestamp":{"$ref":"#/definitions/v1Time"},"expiryDurationInDays":{"type":"integer"},"firstReminderInDays":{"type":"integer"},"isRegex":{"type":"boolean"},"minLength":{"type":"integer"},"minNumOfBlockLetters":{"type":"integer"},"minNumOfDigits":{"type":"integer"},"minNumOfSmallLetters":{"type":"integer"},"minNumOfSpecialCharacters":{"type":"integer"},"regex":{"type":"string"},"updateTimestamp":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1TenantResourceLimit":{"properties":{"kind":{"$ref":"#/definitions/v1ResourceLimitType","type":"string"},"label":{"type":"string"},"limit":{"format":"int64","type":"number","x-omitempty":false}}},"v1TenantResourceLimitEntity":{"properties":{"kind":{"$ref":"#/definitions/v1ResourceLimitType","type":"string","x-omitempty":false},"limit":{"format":"int64","type":"number","x-omitempty":false}}},"v1TenantResourceLimits":{"description":"Tenant resource limits","properties":{"resources":{"items":{"$ref":"#/definitions/v1TenantResourceLimit"},"type":"array","uniqueItems":true}}},"v1TenantResourceLimitsEntity":{"description":"Tenant resource limits. Supported resources keys are 'user','project','apiKey','team','role','cloudaccount','clusterprofile','workspace','registry','privategateway','location','certificate','macro','sshkey','alert','spectrocluster','edgehost'.","properties":{"resources":{"items":{"$ref":"#/definitions/v1TenantResourceLimitEntity"},"type":"array","uniqueItems":true}}},"v1TenantSamlRequestSpec":{"description":"Tenant","properties":{"attributes":{"items":{"$ref":"#/definitions/v1TenantSamlSpecAttribute"},"type":"array"},"defaultTeams":{"items":{"type":"string"},"type":"array"},"federationMetadata":{"type":"string"},"identityProvider":{"type":"string"},"isSingleLogoutEnabled":{"type":"boolean"},"isSsoEnabled":{"type":"boolean"},"nameIdFormat":{"type":"string"},"syncSsoTeams":{"type":"boolean"}},"type":"object"},"v1TenantSamlSpec":{"description":"Tenant","properties":{"acsUrl":{"type":"string"},"attributes":{"items":{"$ref":"#/definitions/v1TenantSamlSpecAttribute"},"type":"array"},"audienceUrl":{"description":"same as entity id","type":"string"},"certificate":{"description":"certificate for slo","type":"string"},"defaultTeams":{"items":{"type":"string"},"type":"array"},"entityId":{"type":"string"},"federationMetadata":{"type":"string"},"identityProvider":{"type":"string"},"isSingleLogoutEnabled":{"type":"boolean","x-omitempty":false},"isSsoEnabled":{"type":"boolean","x-omitempty":false},"issuer":{"description":"same as entity id","type":"string"},"nameIdFormat":{"type":"string"},"serviceProviderMetadata":{"type":"string"},"singleLogoutUrl":{"description":"slo url","type":"string","x-omitempty":false},"syncSsoTeams":{"type":"boolean","x-omitempty":false}},"type":"object"},"v1TenantSamlSpecAttribute":{"properties":{"attributeValue":{"type":"string"},"mappedAttribute":{"type":"string"},"name":{"type":"string"},"nameFormat":{"type":"string"}},"type":"object"},"v1TenantSelfSignUpSpec":{"description":"Tenant sign up data","properties":{"emailId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"loginMode":{"default":"devops","enum":["dev","devops"],"type":"string"},"notifyTenantAdmin":{"type":"boolean"},"orgName":{"type":"string"}},"required":["firstName","lastName","emailId","orgName"],"type":"object"},"v1TenantSpec":{"description":"Tenant Spec","properties":{"address":{"$ref":"#/definitions/v1Address"},"authType":{"type":"string"},"defaultLoginMode":{"type":"string"},"orgEmailId":{"type":"string"},"orgName":{"type":"string"},"planUid":{"type":"string"}},"type":"object"},"v1TenantSpecEntity":{"description":"Tenant Entity input","properties":{"address":{"$ref":"#/definitions/v1Address"},"authType":{"type":"string"},"emailId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"loginMode":{"default":"devops","enum":["dev","devops"],"type":"string"},"orgEmailId":{"type":"string"},"orgName":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array","uniqueItems":true},"ssoApp":{"type":"string"}},"type":"object"},"v1TenantSsoAuthProvidersEntity":{"properties":{"isEnabled":{"type":"boolean","x-omitempty":false},"ssoLogins":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1TenantStatus":{"description":"Tenant Status","properties":{"cleanUpStatus":{"$ref":"#/definitions/v1TenantCleanUpStatus"},"isActive":{"type":"boolean","x-omitempty":false},"toBeDeleted":{"type":"boolean","x-omitempty":false}},"type":"object"},"v1TenantUpgradeSettingsEntity":{"properties":{"enableLock":{"type":"boolean","x-omitempty":false},"supportedVersionsRange":{"type":"integer","x-omitempty":false}}},"v1TenantUsage":{"description":"Tenant usage object","properties":{"orgName":{"description":"Organization name","type":"string"},"tenantUid":{"description":"Tenant uid","type":"string"},"usedAlloyCredits":{"description":"Credits used by imported clusters","format":"float64","type":"number"},"usedPureCredits":{"description":"Credits used by managed clusters","format":"float64","type":"number"}}},"v1Tenants":{"description":"Tenants list","properties":{"items":{"items":{"$ref":"#/definitions/v1Tenant"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1TenantsAccountsNas":{"properties":{"failures":{"items":{"type":"string"},"type":"array"},"success":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1TenantsActivities":{"description":"Active tenants and clusters data","properties":{"tenants":{"additionalProperties":{"$ref":"#/definitions/v1TenantActivity"},"type":"object"}},"type":"object"},"v1TencentAccount":{"description":"Tencent cloud account information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the account.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1TencentCloudAccount"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1TencentAccounts":{"properties":{"items":{"items":{"$ref":"#/definitions/v1TencentAccount"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1TencentAvailabilityZone":{"description":"Tencent availability zone","properties":{"name":{"description":"Tencent availability zone name","type":"string"},"state":{"description":"Tencent availability zone state","type":"string"},"zoneId":{"description":"Tencent availability zone id","type":"string"}},"type":"object"},"v1TencentAvailabilityZones":{"description":"List of Tencent Availability zones","properties":{"zones":{"items":{"$ref":"#/definitions/v1TencentAvailabilityZone"},"type":"array"}},"required":["zones"],"type":"object"},"v1TencentCloudAccount":{"properties":{"secretId":{"description":"Tencent api secretID","type":"string"},"secretKey":{"description":"Tencent api secret key","type":"string"}},"required":["secretId","secretKey"],"type":"object"},"v1TencentCloudClusterConfigEntity":{"description":"Tencent cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1TencentClusterConfig"}},"type":"object"},"v1TencentCloudConfig":{"description":"TencentCloudConfig is the Schema for the tencentcloudconfigs API","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1TencentCloudConfigSpec"}},"type":"object"},"v1TencentCloudConfigSpec":{"description":"TencentCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"cloudAccountRef should point to the secret which contains TencentCloudAccount"},"clusterConfig":{"$ref":"#/definitions/v1TencentClusterConfig"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1TencentMachinePoolConfig"},"type":"array"}},"type":"object"},"v1TencentClusterConfig":{"description":"Cluster level configuration for tencent cloud and applicable for all the machine pools","properties":{"endpointAccess":{"$ref":"#/definitions/v1TkeEndpointAccess","description":"Endpoints specifies access to this cluster's control plane endpoints"},"region":{"type":"string"},"sshKeyIDs":{"items":{"type":"string"},"type":"array"},"vpcID":{"description":"VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created","type":"string"}},"required":["region"],"type":"object"},"v1TencentInstanceTypes":{"description":"List of Tencent instance types","properties":{"instanceTypes":{"items":{"$ref":"#/definitions/v1InstanceType"},"type":"array"}},"type":"object"},"v1TencentKeypair":{"description":"Tencent Keypair entity","properties":{"id":{"description":"Tencent keypair id","type":"string"},"name":{"description":"Tencent keypair name","type":"string"},"publickey":{"description":"Tencent public key","type":"string"}},"type":"object"},"v1TencentKeypairs":{"description":"List of Tencent keypairs","properties":{"keypairs":{"items":{"$ref":"#/definitions/v1TencentKeypair"},"type":"array"}},"type":"object"},"v1TencentMachine":{"description":"Tencent cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1TencentMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1TencentMachinePoolCloudConfigEntity":{"properties":{"azs":{"items":{"type":"string"},"type":"array"},"instanceType":{"description":"instance type","type":"string"},"rootDeviceSize":{"description":"rootDeviceSize in GBs","format":"int64","maximum":2000,"minimum":1,"type":"integer"},"subnetIds":{"additionalProperties":{"type":"string"},"description":"AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment","type":"object"}},"type":"object"},"v1TencentMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"AdditionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"azs":{"description":"AZs is only used for dynamic placement","items":{"type":"string"},"type":"array"},"instanceConfig":{"$ref":"#/definitions/v1InstanceConfig"},"instanceType":{"description":"instance type","type":"string"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean"},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"rootDeviceSize":{"description":"rootDeviceSize in GBs","format":"int64","type":"integer"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"subnetIds":{"additionalProperties":{"type":"string"},"description":"AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment","type":"object"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array"},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean"}},"type":"object"},"v1TencentMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1TencentMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"required":["cloudConfig"],"type":"object"},"v1TencentMachineSpec":{"description":"Tencent cloud VM definition spec","properties":{"dnsName":{"type":"string"},"imageId":{"type":"string"},"instanceType":{"type":"string"},"nics":{"items":{"$ref":"#/definitions/v1TencentNic"},"type":"array"},"securityGroups":{"items":{"type":"string"},"type":"array"},"subnetId":{"type":"string"},"type":{"type":"string"},"vpcId":{"type":"string"},"zoneId":{"type":"string"}},"required":["nics","instanceType","imageId"],"type":"object"},"v1TencentMachines":{"description":"Tencent machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1TencentMachine"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1TencentNic":{"description":"Tencent network interface","properties":{"index":{"format":"int8","type":"integer"},"privateIPs":{"items":{"type":"string"},"type":"array"},"publicIp":{"type":"string"}},"type":"object"},"v1TencentRegion":{"description":"Tencent region entity","properties":{"name":{"description":"Name of tencent region","type":"string"},"state":{"description":"State of tencent region","type":"string"}},"type":"object"},"v1TencentRegions":{"description":"List of tencent regions","properties":{"regions":{"description":"Tencent regions entity","items":{"$ref":"#/definitions/v1TencentRegion"},"type":"array"}},"required":["regions"],"type":"object"},"v1TencentSecurityGroup":{"description":"Tencent Security Group. A security group is a virtual firewall that features stateful data packet filtering","properties":{"id":{"description":"Tencent security group id","type":"string"},"isDefault":{"description":"Whether it is the default security group, the default security group does not support deletion.","type":"boolean"},"name":{"description":"Tencent security group name","type":"string"},"projectId":{"description":"Tencent security group associated to a project","type":"string"}},"type":"object"},"v1TencentSecurityGroups":{"description":"List of Tencent security groups","properties":{"groups":{"items":{"$ref":"#/definitions/v1TencentSecurityGroup"},"type":"array"}},"type":"object"},"v1TencentStorageTypes":{"description":"List of Tencent storage types","properties":{"storageTypes":{"items":{"$ref":"#/definitions/v1StorageType"},"type":"array"}},"type":"object"},"v1TencentSubnet":{"description":"Tencent Subnet entity","properties":{"az":{"description":"Availability zone associated with tencent subnet","type":"string"},"cidrBlock":{"description":"Tencent subnet CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32","type":"string"},"name":{"description":"Tencent subnet name","type":"string"},"subnetId":{"description":"Tencent subnet id","type":"string"}},"type":"object"},"v1TencentVpc":{"description":"Tencent VPC entity","properties":{"cidrBlock":{"description":"Tencent VPC CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32","type":"string"},"name":{"description":"Tencent VPC name","type":"string"},"subnets":{"items":{"$ref":"#/definitions/v1TencentSubnet"},"type":"array"},"vpcId":{"description":"Tencent VPC id","type":"string"}},"required":["vpcId"],"type":"object"},"v1TencentVpcs":{"description":"List of Tencent VPCs","properties":{"vpcs":{"items":{"$ref":"#/definitions/v1TencentVpc"},"type":"array"}},"required":["vpcs"],"type":"object"},"v1TierPrice":{"description":"tier price","properties":{"alloyPricing":{"items":{"$ref":"#/definitions/v1PriceRange"},"type":"array","uniqueItems":true},"purePricing":{"items":{"$ref":"#/definitions/v1PriceRange"},"type":"array","uniqueItems":true}}},"v1Time":{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","format":"date-time","type":"string"},"v1TkeEndpointAccess":{"description":"TKEEndpointAccess specifies how control plane endpoints are accessible","properties":{"IsExtranet":{"description":"IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)","type":"boolean"},"private":{"description":"Private points VPC-internal control plane access to the private endpoint","type":"boolean"},"privateCIDR":{"description":"Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint","type":"string"},"public":{"description":"Public controls whether control plane endpoints are publicly accessible","type":"boolean"},"publicCIDRs":{"description":"Deprecated. PublicCIDRs specifies which blocks can access the public endpoint","items":{"type":"string"},"type":"array"},"securityGroup":{"description":"Tencent security group","type":"string"},"subnetId":{"description":"Tencent Subnet","type":"string"}},"type":"object"},"v1TlsConfiguration":{"description":"TLS configuration","properties":{"ca":{"type":"string"},"certificate":{"type":"string"},"enabled":{"type":"boolean","x-omitempty":false},"insecureSkipVerify":{"type":"boolean","x-omitempty":false},"key":{"type":"string"}},"type":"object"},"v1TotalClusterRate":{"description":"Cluster total estimated rate information","properties":{"compute":{"format":"float64","type":"number","x-omitempty":false},"storage":{"format":"float64","type":"number","x-omitempty":false},"total":{"format":"float64","type":"number","x-omitempty":false}},"type":"object"},"v1TotalResourceUsage":{"description":"Total Resource Usage","properties":{"projects":{"items":{"$ref":"#/definitions/v1ProjectResourceUsage"},"type":"array","uniqueItems":true},"totalAlloyCpuCoreHours":{"type":"number","x-omitempty":false},"totalPureCpuCoreHours":{"type":"number","x-omitempty":false}}},"v1TransferJob":{"description":"transfer job details","properties":{"finishTime":{"$ref":"#/definitions/v1Time"},"folder":{"type":"string"},"isCompleted":{"type":"boolean"},"message":{"items":{"type":"string"},"type":"array"},"startTime":{"$ref":"#/definitions/v1Time"},"state":{"type":"string"},"status":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1Uid":{"properties":{"uid":{"type":"string"}},"required":["uid"],"type":"object"},"v1UidRoleSummary":{"properties":{"inheritedRoles":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"name":{"type":"string"},"roles":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"uid":{"type":"string"}},"type":"object"},"v1UidSummary":{"properties":{"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1Uids":{"items":{"$ref":"#/definitions/v1Uid"},"type":"array","uniqueItems":true},"v1UpdateStrategy":{"description":"UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1","properties":{"type":{"description":"update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut","enum":["RollingUpdateScaleOut","RollingUpdateScaleIn"],"type":"string"}},"type":"object"},"v1UpdateTenantStatus":{"description":"Update tenant status","properties":{"errorMessage":{"type":"string"},"kind":{"type":"string"},"stage":{"type":"string"}},"type":"object"},"v1Updated":{"description":"The resource was updated successfully"},"v1UpdatedMsg":{"description":"Update response with message","properties":{"msg":{"type":"string"}}},"v1Upgrades":{"description":"Upgrades represent the reason of the last upgrade that took place","properties":{"reason":{"items":{"type":"string"},"type":"array"},"timestamp":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1User":{"description":"User","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1UserSpec"},"status":{"$ref":"#/definitions/v1UserStatus"}},"type":"object"},"v1UserActivateInfo":{"properties":{"passwordToken":{"type":"string"}},"type":"object"},"v1UserActivateLink":{"properties":{"activationLink":{"type":"string"}},"type":"object"},"v1UserActivityInfo":{"description":"Active user data","properties":{"lastLogin":{"type":"string"},"lastLoginTimestamp":{"$ref":"#/definitions/v1Time"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1UserAssetSsh":{"description":"SSH key information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1UserAssetSshSpec"}},"type":"object"},"v1UserAssetSshEntity":{"description":"SSH Key request payload","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1UserAssetSshSpec"}},"type":"object"},"v1UserAssetSshSpec":{"description":"SSH key specification","properties":{"publicKey":{"type":"string"}},"type":"object"},"v1UserAssetsLocation":{"description":"Location object","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1UserAssetsLocationSpec"}},"type":"object"},"v1UserAssetsLocationAzure":{"description":"Azure location object","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1UserAssetsLocationAzureSpec"}},"type":"object"},"v1UserAssetsLocationAzureSpec":{"description":"Azure location specification","properties":{"config":{"$ref":"#/definitions/v1AzureStorageConfig"},"isDefault":{"description":"Set to 'true', if location has to be set as default","type":"boolean"},"type":{"description":"Azure location type [azure]","type":"string"}},"required":["config"],"type":"object"},"v1UserAssetsLocationGcp":{"description":"GCP location object","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1UserAssetsLocationGcpSpec"}},"type":"object"},"v1UserAssetsLocationGcpSpec":{"description":"GCP location specification","properties":{"config":{"$ref":"#/definitions/v1GcpStorageConfig"},"isDefault":{"description":"Set to 'true', if location has to be set as default","type":"boolean"},"type":{"description":"GCP location type [gcp]","type":"string"}},"required":["config"],"type":"object"},"v1UserAssetsLocationS3":{"description":"S3 location object","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"},"spec":{"$ref":"#/definitions/v1UserAssetsLocationS3Spec"}},"type":"object"},"v1UserAssetsLocationS3Spec":{"description":"S3 location specification","properties":{"config":{"$ref":"#/definitions/v1S3StorageConfig"},"isDefault":{"description":"Set to 'true', if location has to be set as default","type":"boolean"},"type":{"description":"S3 location type [s3/minio]","type":"string"}},"required":["config"],"type":"object"},"v1UserAssetsLocationSpec":{"description":"Location specification","properties":{"isDefault":{"type":"boolean"},"storage":{"$ref":"#/definitions/v1LocationType"},"type":{"type":"string"}},"type":"object"},"v1UserAssetsLocations":{"properties":{"items":{"description":"List of locations","items":{"$ref":"#/definitions/v1UserAssetsLocation"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1UserAssetsSsh":{"properties":{"items":{"description":"List of SSH keys","items":{"$ref":"#/definitions/v1UserAssetSsh"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1UserAuthenticatedUrl":{"description":"Returns the Authenticated redirect Url for the palette oidc","properties":{"redirectUrl":{"description":"authenticated redirect Url for the palette oidc","type":"string"}},"type":"object"},"v1UserEntity":{"description":"User","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1UserSpecEntity"}},"type":"object"},"v1UserInfoResponse":{"properties":{"address":{"description":"End-User's preferred postal address","type":"string"},"birthdate":{"description":"End-User's birthday, represented as an ISO 8601:2004 [ISO8601‑2004] YYYY-MM-DD format","type":"string"},"email":{"description":"End-User's preferred e-mail address","type":"string"},"email_verified":{"description":"User at the time the verification was performed","type":"boolean"},"family_name":{"description":"Surname(s) or last name(s) of the End-User","type":"string"},"gender":{"description":"End-User's gender","type":"string"},"given_name":{"description":"Given name(s) or first name(s) of the End-User","type":"string"},"locale":{"description":"End-User's locale, represented as a BCP47 [RFC5646] language tag","type":"string"},"middle_name":{"description":"Middle name(s) of the End-User","type":"string"},"name":{"description":"End-User's full name in displayable form including all name parts, possibly including titles and suffixes, ordered according to the End-User's locale and preferences","type":"string"},"nickname":{"description":"Casual name of the End-User that may or may not be the same as the given_name","type":"string"},"phone_number":{"description":"End-User's preferred telephone number","type":"string"},"phone_number_verified":{"description":"User at the time the verification was performed","type":"boolean"},"picture":{"description":"URL of the End-User's profile picture","type":"string"},"preferred_username":{"description":"Shorthand name by which the End-User wishes to be referred to at the RP, such as janedoe or j.doe","type":"string"},"profile":{"description":"URL of the End-User's profile page","type":"string"},"sub":{"description":"Subject - Identifier for the End-User at the Issuer","type":"string"},"updated_at":{"description":"Time the End-User's information was last updated","type":"integer"},"website":{"description":"URL of the End-User's Web page or blog","type":"string"},"zoneinfo":{"description":"String from zoneinfo [zoneinfo] time zone database representing the End-User's time zone","type":"string"}},"type":"object"},"v1UserKubectlSession":{"properties":{"clusterUid":{"type":"string"},"creationTime":{"type":"string"},"isActive":{"type":"boolean"},"podIp":{"type":"string"},"podName":{"type":"string"},"port":{"type":"string"},"projectUid":{"type":"string"},"sessionUid":{"type":"string"},"shellyCluster":{"type":"string"},"tenantClusterEndpoint":{"type":"string"},"userName":{"type":"string"},"userUid":{"type":"string"}},"type":"object"},"v1UserMe":{"description":"User information wrt permissions","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1UserSpec"},"status":{"$ref":"#/definitions/v1UserMeStatus"}},"type":"object"},"v1UserMeStatus":{"description":"User status with permissions","properties":{"activationLink":{"description":"Contains activation link for the user","type":"string"},"isActive":{"description":"Specifies if user account is active/disabled","type":"boolean"},"isContractAccepted":{"description":"Specifies if user account has accepted the contract","type":"boolean","x-omitempty":false},"loginMode":{"description":"User's login Mode","type":"string"},"projectPermissions":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},"tenant":{"$ref":"#/definitions/v1UserMeTenant","description":"users's tenant information"},"tenantPermissions":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}}},"v1UserMeTenant":{"properties":{"orgName":{"type":"string"},"tenantUid":{"type":"string"}},"type":"object"},"v1UserMeta":{"properties":{"emailId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"org":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1UserMetaEntity":{"description":"User meta entity","properties":{"emailId":{"type":"string"},"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1UserPatch":{"items":{"$ref":"#/definitions/v1HttpPatch"},"type":"array"},"v1UserProfile":{"description":"User Profile","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1UserProfileSpec"},"status":{"$ref":"#/definitions/v1UserProfileStatus"}},"type":"object"},"v1UserProfileSpec":{"description":"User Profile specifications","properties":{"emailId":{"description":"User's email id","type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"}}},"v1UserProfileStatus":{"description":"User Profile status","properties":{"lastPasswordPolicyMail":{"$ref":"#/definitions/v1Time","description":"user's last password policy time"},"lastPasswordUpdate":{"$ref":"#/definitions/v1Time","description":"user's last password update time"}}},"v1UserProfiles":{"properties":{"items":{"items":{"$ref":"#/definitions/v1UserProfile"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1UserRoleMap":{"properties":{"roles":{"items":{"type":"string"},"type":"array"},"userId":{"type":"string"}}},"v1UserRoleUIDs":{"properties":{"roles":{"items":{"type":"string"},"type":"array"}},"type":"object"},"v1UserRolesEntity":{"properties":{"inheritedRoles":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"roles":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"}},"type":"object"},"v1UserRsaToken":{"description":"Rsa Auth token response","properties":{"token":{"type":"string"}},"type":"object"},"v1UserSpec":{"description":"User specifications","properties":{"emailId":{"description":"User's email id","type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1UserSpecEntity":{"description":"User Entity input","properties":{"emailId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"loginMode":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array","uniqueItems":true},"teams":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1UserSpecSummary":{"properties":{"emailId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"projects":{"description":"Deprecated.","items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"projectsCount":{"format":"int32","type":"integer","x-omitempty":false},"roles":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"},"teams":{"items":{"$ref":"#/definitions/v1UidSummary"},"type":"array"}},"type":"object"},"v1UserStatus":{"description":"User status","properties":{"activationLink":{"description":"provides the link to activate or reset the user password","type":"string","x-omitempty":false},"isActive":{"description":"Specifies if user account is active/disabled","type":"boolean","x-omitempty":false},"isPasswordResetting":{"description":"Specifies if user in multi org requested password reset","type":"boolean","x-omitempty":false},"lastSignIn":{"$ref":"#/definitions/v1Time","description":"user's last sign in time"}}},"v1UserStatusLoginMode":{"properties":{"loginMode":{"enum":["dev","devops"],"type":"string"}},"type":"object"},"v1UserSummary":{"description":"User summary","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1UserSpecSummary"},"status":{"$ref":"#/definitions/v1UserStatus"}},"type":"object"},"v1UserSummarySortFields":{"enum":["name","creationTimestamp"],"type":"string","x-nullable":true},"v1UserSummarySortSpec":{"properties":{"field":{"$ref":"#/definitions/v1UserSummarySortFields"},"order":{"$ref":"#/definitions/v1SortOrder"}}},"v1UserToken":{"description":"Returns the Authorization token. To be used for further api calls","properties":{"Authorization":{"description":"Describes the authentication token in jwt format.","type":"string"},"isMfa":{"description":"Indicates the authentication flow using MFA","type":"boolean","x-omitempty":false}},"type":"object"},"v1UserUpdateEntity":{"description":"User","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1UserUpdateSpecEntity"}},"type":"object"},"v1UserUpdateSpecEntity":{"description":"User Entity input","properties":{"emailId":{"type":"string"},"firstName":{"type":"string"},"lastName":{"type":"string"},"roles":{"description":"Deprecated. Use 'v1/users/{uid}/roles' API to assign roles.","items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1Users":{"properties":{"items":{"items":{"$ref":"#/definitions/v1User"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1UsersFilterSpec":{"description":"Users filter spec","properties":{"emailId":{"$ref":"#/definitions/v1FilterString"},"name":{"$ref":"#/definitions/v1FilterString"}}},"v1UsersMetadata":{"properties":{"items":{"items":{"$ref":"#/definitions/v1UserMetaEntity"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1UsersSummary":{"description":"Deprecated, Use v1UsersSummaryList - Returns User summary","properties":{"items":{"items":{"$ref":"#/definitions/v1UserSummary"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1UsersSummaryList":{"properties":{"items":{"items":{"$ref":"#/definitions/v1UserSummary"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1UsersSummarySpec":{"description":"Users filter summary spec","properties":{"filter":{"$ref":"#/definitions/v1UsersFilterSpec"},"sort":{"items":{"$ref":"#/definitions/v1UserSummarySortSpec"},"type":"array","uniqueItems":true}}},"v1V1SystemAdminEmail":{"description":"SystemAdmin","properties":{"email":{"type":"string"},"insecureVerify":{"type":"boolean"},"password":{"type":"string"}},"type":"object"},"v1V1SystemAdminPasswordResetEntity":{"description":"SystemAdmin","properties":{"email":{"type":"string"},"newPassword":{"type":"string"},"oldPassword":{"type":"string"}},"type":"object"},"v1VMAddVolumeEntity":{"properties":{"addVolumeOptions":{"$ref":"#/definitions/v1VmAddVolumeOptions","description":"Parameters required to add volume to virtual machine/virtual machine instance"},"dataVolumeTemplate":{"$ref":"#/definitions/v1VmDataVolumeTemplateSpec","description":"dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle."},"persist":{"description":"If 'true' add the disk to the Virtual Machine \u0026 Virtual Machine Instance, else add the disk to the Virtual Machine Instance only","type":"boolean"}},"required":["addVolumeOptions"],"type":"object"},"v1VMCluster":{"description":"VM Dashboard enabled Spectro cluster","properties":{"metadata":{"properties":{"name":{"type":"string"},"projectUid":{"type":"string"},"uid":{"type":"string"}}},"spec":{"description":"Spectro cluster spec","properties":{"cloudType":{"type":"string"}},"type":"object"},"status":{"description":"Spectro cluster status","properties":{"clusterState":{"type":"string"}}}},"type":"object"},"v1VMClusters":{"properties":{"items":{"items":{"$ref":"#/definitions/v1VMCluster"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1VMRemoveVolumeEntity":{"properties":{"persist":{"description":"If 'true' remove the disk from the Virtual Machine \u0026 Virtual Machine Instance, else remove the disk from the Virtual Machine Instance only","type":"boolean"},"removeVolumeOptions":{"$ref":"#/definitions/v1VmRemoveVolumeOptions","description":"Parameters required to remove volume from virtual machine/virtual machine instance"}},"required":["removeVolumeOptions"],"type":"object"},"v1Variable":{"description":"Unique variable field with schema definition","properties":{"defaultValue":{"description":"The default value of the variable","type":"string"},"description":{"description":"Variable description","type":"string"},"displayName":{"description":"Unique display name of the variable","type":"string"},"format":{"$ref":"#/definitions/v1VariableFormat"},"hidden":{"description":"If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false","type":"boolean","x-omitempty":false},"immutable":{"description":"If true, then variable value can't be editable. By default the immutable flag will be set to false","type":"boolean","x-omitempty":false},"isSensitive":{"description":"If true, then default value will be masked. By default the isSensitive flag will be set to false","type":"boolean","x-omitempty":false},"name":{"description":"Variable name","type":"string"},"regex":{"description":"Regular expression pattern which the variable value must match","type":"string"},"required":{"description":"Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided","type":"boolean","x-omitempty":false}},"required":["name"],"type":"object"},"v1VariableFormat":{"default":"string","description":"Format type of the variable value","enum":["string","number","boolean","ipv4","ipv4cidr","ipv6","version"],"type":"string"},"v1VariableNames":{"properties":{"variables":{"description":"Array of variable names","items":{"type":"string"},"type":"array","uniqueItems":true}},"required":["variables"]},"v1Variables":{"properties":{"variables":{"description":"List of unique variable fields with schema constraints","items":{"$ref":"#/definitions/v1Variable"},"type":"array","uniqueItems":true}},"type":"object"},"v1Virtual":{"properties":{"appDeployments":{"description":"list of apps deployed on the virtual cluster","items":{"$ref":"#/definitions/v1ObjectResReference"},"type":"array"},"clusterGroup":{"$ref":"#/definitions/v1ObjectResReference","description":"cluster group details of virtual cluster"},"hostCluster":{"$ref":"#/definitions/v1ObjectResReference","description":"host cluster reference"},"lifecycleStatus":{"$ref":"#/definitions/v1LifecycleStatus","description":"cluster life cycle status of virtual cluster"},"state":{"description":"cluster virtual host status","type":"string"},"virtualClusters":{"description":"list of virtual clusters deployed on the cluster","items":{"$ref":"#/definitions/v1ObjectResReference"},"type":"array"}}},"v1VirtualCloudClusterConfigEntity":{"description":"Virtual cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1VirtualClusterConfig"}},"type":"object"},"v1VirtualCloudConfig":{"description":"VirtualCloudConfig is the Schema for the virtual cloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1VirtualCloudConfigSpec"},"status":{"$ref":"#/definitions/v1NestedCloudConfigStatus"}},"type":"object"},"v1VirtualCloudConfigSpec":{"description":"VirtualCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec for cluster-api.","properties":{"clusterConfig":{"$ref":"#/definitions/v1VirtualClusterConfig"},"hostClusterUid":{"type":"string"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1VirtualMachinePoolConfig"},"type":"array"}},"required":["clusterConfig","hostClusterUid","machinePoolConfig"],"type":"object"},"v1VirtualClusterConfig":{"description":"Cluster level configuration for virtual cluster","properties":{"controlPlaneEndpoint":{"$ref":"#/definitions/v1APIEndpoint"},"helmRelease":{"$ref":"#/definitions/v1VirtualClusterHelmRelease"},"kubernetesVersion":{"default":"","type":"string"}},"type":"object"},"v1VirtualClusterHelmChart":{"properties":{"name":{"default":"","type":"string"},"repo":{"default":"","type":"string"},"version":{"default":"","type":"string"}},"type":"object"},"v1VirtualClusterHelmRelease":{"properties":{"chart":{"$ref":"#/definitions/v1VirtualClusterHelmChart"},"values":{"default":"","type":"string"}},"type":"object"},"v1VirtualClusterResize":{"properties":{"instanceType":{"$ref":"#/definitions/v1VirtualInstanceType"}},"required":["instanceType"],"type":"object"},"v1VirtualInstanceType":{"properties":{"maxCPU":{"description":"Maximum CPU cores","format":"int32","type":"integer"},"maxMemInMiB":{"description":"Maximum memory in MiB","format":"int32","type":"integer"},"maxStorageGiB":{"description":"Maximum storage in GiB","format":"int32","type":"integer"},"minCPU":{"description":"Minimum CPU cores","format":"int32","type":"integer"},"minMemInMiB":{"description":"Minimum memory in MiB","format":"int32","type":"integer"},"minStorageGiB":{"description":"Minimum storage in GiB","format":"int32","type":"integer"}},"type":"object"},"v1VirtualMachine":{"description":"Virtual cloud machine definition","properties":{"kind":{"type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1VirtualMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1VirtualMachinePoolCloudConfigEntity":{"properties":{"instanceType":{"$ref":"#/definitions/v1VirtualInstanceType"}},"required":["instanceType"],"type":"object"},"v1VirtualMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"azs":{"items":{"type":"string"},"type":"array"},"instanceType":{"$ref":"#/definitions/v1VirtualInstanceType","description":"InstanceType defines the required CPU, Memory"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean"},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"resourcePool":{"type":"string"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean"}},"required":["instanceType"],"type":"object"},"v1VirtualMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1VirtualMachinePoolCloudConfigEntity"}},"required":["cloudConfig"],"type":"object"},"v1VirtualMachineSnapshot":{"description":"VirtualMachineSnapshot defines the operation of snapshotting a VM","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/v1VmObjectMeta"},"spec":{"$ref":"#/definitions/v1VirtualMachineSnapshotSpec"},"status":{"$ref":"#/definitions/v1VirtualMachineSnapshotStatus"}},"required":["spec"],"type":"object"},"v1VirtualMachineSnapshotList":{"description":"VirtualMachineSnapshotList is a list of VirtualMachineSnapshot resources","properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"items":{"items":{"$ref":"#/definitions/v1VirtualMachineSnapshot"},"type":"array"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds","type":"string"},"metadata":{"$ref":"#/definitions/v1VmListMeta"}},"required":["metadata","items"],"type":"object"},"v1VirtualMachineSnapshotSpec":{"description":"VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource","properties":{"deletionPolicy":{"type":"string"},"failureDeadline":{"$ref":"#/definitions/v1VmDuration"},"source":{"$ref":"#/definitions/v1VmTypedLocalObjectReference"}},"required":["source"],"type":"object"},"v1VirtualMachineSnapshotStatus":{"description":"VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource","properties":{"conditions":{"items":{"$ref":"#/definitions/v1VmCondition"},"type":"array"},"creationTime":{"$ref":"#/definitions/v1Time"},"error":{"$ref":"#/definitions/v1VmError"},"indications":{"items":{"type":"string"},"type":"array","x-kubernetes-list-type":"set"},"phase":{"type":"string"},"readyToUse":{"type":"boolean"},"snapshotVolumes":{"$ref":"#/definitions/v1VmSnapshotVolumesLists"},"sourceUID":{"type":"string"},"virtualMachineSnapshotContentName":{"type":"string"}},"type":"object","x-nullable":true},"v1VirtualMachineSpec":{"description":"Virtual cloud machine definition spec","properties":{"hostname":{"type":"string"}},"type":"object"},"v1VirtualMachines":{"description":"List of virtual machines","properties":{"items":{"items":{"$ref":"#/definitions/v1VirtualMachine"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1VirtualNetwork":{"description":"Azure virtual network is the fundamental building block for your private network in Azure.","properties":{"addressSpaces":{"description":"Location of the virtual network","items":{"type":"string"},"type":"array","uniqueItems":true},"id":{"description":"The ID of the resource group","type":"string"},"location":{"description":"Location of the virtual network","type":"string"},"name":{"description":"Name of the virtual network","type":"string"},"subnets":{"description":"List of subnets associated with Azure VPC","items":{"$ref":"#/definitions/v1Subnet"},"type":"array"},"type":{"description":"Type of the virtual network","type":"string"}},"type":"object"},"v1VmAccessCredential":{"description":"AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.","properties":{"sshPublicKey":{"$ref":"#/definitions/v1VmSshPublicKeyAccessCredential"},"userPassword":{"$ref":"#/definitions/v1VmUserPasswordAccessCredential"}},"type":"object"},"v1VmAccessCredentialSecretSource":{"properties":{"secretName":{"description":"SecretName represents the name of the secret in the VMI's namespace","type":"string"}},"required":["secretName"],"type":"object"},"v1VmAddVolumeOptions":{"description":"AddVolumeOptions is provided when dynamically hot plugging a volume and disk","properties":{"disk":{"$ref":"#/definitions/v1VmDisk"},"dryRun":{"description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","items":{"type":"string"},"type":"array","x-kubernetes-list-type":"atomic"},"name":{"description":"Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.","type":"string"},"volumeSource":{"$ref":"#/definitions/v1VmHotplugVolumeSource"}},"required":["name","disk","volumeSource"],"type":"object"},"v1VmAffinity":{"description":"Affinity is a group of affinity scheduling rules.","properties":{"nodeAffinity":{"$ref":"#/definitions/v1VmNodeAffinity"},"podAffinity":{"$ref":"#/definitions/v1VmPodAffinity"},"podAntiAffinity":{"$ref":"#/definitions/v1PodAntiAffinity"}},"type":"object"},"v1VmBIOS":{"description":"If set (default), BIOS will be used.","properties":{"useSerial":{"description":"If set, the BIOS output will be transmitted over serial","type":"boolean"}},"type":"object"},"v1VmBlockSize":{"description":"BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.","properties":{"custom":{"$ref":"#/definitions/v1VmCustomBlockSize"},"matchVolume":{"$ref":"#/definitions/v1VmFeatureState"}},"type":"object"},"v1VmBootloader":{"description":"Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.","properties":{"bios":{"$ref":"#/definitions/v1VmBIOS"},"efi":{"$ref":"#/definitions/v1VmEFI"}},"type":"object"},"v1VmCDRomTarget":{"properties":{"bus":{"description":"Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.","type":"string"},"readonly":{"description":"ReadOnly. Defaults to true.","type":"boolean"},"tray":{"description":"Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.","type":"string"}},"type":"object"},"v1VmChassis":{"description":"Chassis specifies the chassis info passed to the domain.","properties":{"asset":{"type":"string"},"manufacturer":{"type":"string"},"serial":{"type":"string"},"sku":{"type":"string"},"version":{"type":"string"}},"type":"object"},"v1VmClientPassthroughDevices":{"description":"Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.","type":"object"},"v1VmClock":{"description":"Represents the clock and timers of a vmi.","properties":{"timer":{"$ref":"#/definitions/v1VmTimer"},"timezone":{"description":"Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').","type":"string"},"utc":{"$ref":"#/definitions/v1VmClockOffsetUTC"}},"type":"object"},"v1VmClockOffsetUTC":{"description":"UTC sets the guest clock to UTC on each boot.","properties":{"offsetSeconds":{"description":"OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.","format":"int32","type":"integer"}},"type":"object"},"v1VmCloudInitConfigDriveSource":{"description":"Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html","properties":{"networkData":{"description":"NetworkData contains config drive inline cloud-init networkdata.","type":"string"},"networkDataBase64":{"description":"NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.","type":"string"},"networkDataSecretRef":{"$ref":"#/definitions/v1VmLocalObjectReference"},"secretRef":{"$ref":"#/definitions/v1VmLocalObjectReference"},"userData":{"description":"UserData contains config drive inline cloud-init userdata.","type":"string"},"userDataBase64":{"description":"UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.","type":"string"}},"type":"object"},"v1VmCloudInitNoCloudSource":{"description":"Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html","properties":{"networkData":{"description":"NetworkData contains NoCloud inline cloud-init networkdata.","type":"string"},"networkDataBase64":{"description":"NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.","type":"string"},"networkDataSecretRef":{"$ref":"#/definitions/v1VmLocalObjectReference"},"secretRef":{"$ref":"#/definitions/v1VmLocalObjectReference"},"userData":{"description":"UserData contains NoCloud inline cloud-init userdata.","type":"string"},"userDataBase64":{"description":"UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.","type":"string"}},"type":"object"},"v1VmCondition":{"description":"Condition defines conditions","properties":{"lastProbeTime":{"type":"string"},"lastTransitionTime":{"type":"string"},"message":{"type":"string"},"reason":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"}},"required":["type","status"],"type":"object"},"v1VmConfigDriveSshPublicKeyAccessCredentialPropagation":{"type":"object"},"v1VmConfigMapVolumeSource":{"description":"ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap","properties":{"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"optional":{"description":"Specify whether the ConfigMap or it's keys must be defined","type":"boolean"},"volumeLabel":{"description":"The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).","type":"string"}},"type":"object"},"v1VmContainerDiskSource":{"description":"Represents a docker image with an embedded disk.","properties":{"image":{"description":"Image is the name of the image with the embedded disk.","type":"string"},"imagePullPolicy":{"description":"Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images","type":"string"},"imagePullSecret":{"description":"ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.","type":"string"},"path":{"description":"Path defines the path to disk file in the container","type":"string"}},"required":["image"],"type":"object"},"v1VmCoreDataVolumeSource":{"properties":{"hotpluggable":{"description":"Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.","type":"boolean"},"name":{"description":"Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.","type":"string"}},"required":["name"],"type":"object"},"v1VmCoreResourceRequirements":{"description":"ResourceRequirements describes the compute resource requirements.","properties":{"limits":{"additionalProperties":{"$ref":"#/definitions/v1VmQuantity"},"description":"Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/","type":"object"},"requests":{"additionalProperties":{"$ref":"#/definitions/v1VmQuantity"},"description":"Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/","type":"object"}},"type":"object"},"v1VmCpu":{"description":"CPU allows specifying the CPU topology.","properties":{"cores":{"description":"Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.","format":"int64","type":"integer"},"dedicatedCpuPlacement":{"description":"DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.","type":"boolean"},"features":{"description":"Features specifies the CPU features list inside the VMI.","items":{"$ref":"#/definitions/v1VmCpuFeature"},"type":"array"},"isolateEmulatorThread":{"description":"IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.","type":"boolean"},"model":{"description":"Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.","type":"string"},"numa":{"$ref":"#/definitions/v1VmNUMA"},"realtime":{"$ref":"#/definitions/v1VmRealtime"},"sockets":{"description":"Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.","format":"int64","type":"integer"},"threads":{"description":"Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.","format":"int64","type":"integer"}},"type":"object"},"v1VmCpuFeature":{"description":"CPUFeature allows specifying a CPU feature.","properties":{"name":{"description":"Name of the CPU feature","type":"string"},"policy":{"description":"Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require","type":"string"}},"required":["name"],"type":"object"},"v1VmCustomBlockSize":{"description":"CustomBlockSize represents the desired logical and physical block size for a VM disk.","properties":{"logical":{"format":"int32","type":"integer"},"physical":{"format":"int32","type":"integer"}},"required":["logical","physical"],"type":"object"},"v1VmDHCPOptions":{"description":"Extra DHCP options to use in the interface.","properties":{"bootFileName":{"description":"If specified will pass option 67 to interface's DHCP server","type":"string"},"ntpServers":{"description":"If specified will pass the configured NTP server to the VM via DHCP option 042.","items":{"type":"string"},"type":"array"},"privateOptions":{"description":"If specified will pass extra DHCP options for private use, range: 224-254","items":{"$ref":"#/definitions/v1VmDHCPPrivateOptions"},"type":"array"},"tftpServerName":{"description":"If specified will pass option 66 to interface's DHCP server","type":"string"}},"type":"object"},"v1VmDHCPPrivateOptions":{"description":"DHCPExtraOptions defines Extra DHCP options for a VM.","properties":{"option":{"description":"Option is an Integer value from 224-254 Required.","format":"int32","type":"integer"},"value":{"description":"Value is a String value for the Option provided Required.","type":"string"}},"required":["option","value"],"type":"object"},"v1VmDataVolumeBlankImage":{"description":"DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC","type":"object"},"v1VmDataVolumeCheckpoint":{"description":"DataVolumeCheckpoint defines a stage in a warm migration.","properties":{"current":{"description":"Current is the identifier of the snapshot created for this checkpoint.","type":"string"},"previous":{"description":"Previous is the identifier of the snapshot from the previous checkpoint.","type":"string"}},"required":["previous","current"],"type":"object"},"v1VmDataVolumeSource":{"description":"DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC","properties":{"blank":{"$ref":"#/definitions/v1VmDataVolumeBlankImage"},"http":{"$ref":"#/definitions/v1VmDataVolumeSourceHttp"},"imageio":{"$ref":"#/definitions/v1VmDataVolumeSourceImageIO"},"pvc":{"$ref":"#/definitions/v1VmDataVolumeSourcePVC"},"registry":{"$ref":"#/definitions/v1VmDataVolumeSourceRegistry"},"s3":{"$ref":"#/definitions/v1VmDataVolumeSourceS3"},"upload":{"$ref":"#/definitions/v1VmDataVolumeSourceUpload"},"vddk":{"$ref":"#/definitions/v1VmDataVolumeSourceVDDK"}},"type":"object"},"v1VmDataVolumeSourceHttp":{"description":"DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs","properties":{"certConfigMap":{"description":"CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate","type":"string"},"extraHeaders":{"description":"ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests","items":{"type":"string"},"type":"array"},"secretExtraHeaders":{"description":"SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information","items":{"type":"string"},"type":"array"},"secretRef":{"description":"SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded","type":"string"},"url":{"description":"URL is the URL of the http(s) endpoint","type":"string"}},"required":["url"],"type":"object"},"v1VmDataVolumeSourceImageIO":{"description":"DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source","properties":{"certConfigMap":{"description":"CertConfigMap provides a reference to the CA cert","type":"string"},"diskId":{"description":"DiskID provides id of a disk to be imported","type":"string"},"secretRef":{"description":"SecretRef provides the secret reference needed to access the ovirt-engine","type":"string"},"url":{"description":"URL is the URL of the ovirt-engine","type":"string"}},"required":["url","diskId"],"type":"object"},"v1VmDataVolumeSourcePVC":{"description":"DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC","properties":{"name":{"description":"The name of the source PVC","type":"string"},"namespace":{"description":"The namespace of the source PVC","type":"string"}},"required":["namespace","name"],"type":"object"},"v1VmDataVolumeSourceRef":{"description":"DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume","properties":{"kind":{"description":"The kind of the source reference, currently only \"DataSource\" is supported","type":"string"},"name":{"description":"The name of the source reference","type":"string"},"namespace":{"description":"The namespace of the source reference, defaults to the DataVolume namespace","type":"string"}},"required":["kind","name"],"type":"object"},"v1VmDataVolumeSourceRegistry":{"description":"DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source","properties":{"certConfigMap":{"description":"CertConfigMap provides a reference to the Registry certs","type":"string"},"imageStream":{"description":"ImageStream is the name of image stream for import","type":"string"},"pullMethod":{"description":"PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)","type":"string"},"secretRef":{"description":"SecretRef provides the secret reference needed to access the Registry source","type":"string"},"url":{"description":"URL is the url of the registry source (starting with the scheme: docker, oci-archive)","type":"string"}},"type":"object"},"v1VmDataVolumeSourceS3":{"description":"DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source","properties":{"certConfigMap":{"description":"CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate","type":"string"},"secretRef":{"description":"SecretRef provides the secret reference needed to access the S3 source","type":"string"},"url":{"description":"URL is the url of the S3 source","type":"string"}},"required":["url"],"type":"object"},"v1VmDataVolumeSourceUpload":{"description":"DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source","type":"object"},"v1VmDataVolumeSourceVDDK":{"description":"DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source","properties":{"backingFile":{"description":"BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi","type":"string"},"initImageURL":{"description":"InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map","type":"string"},"secretRef":{"description":"SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host","type":"string"},"thumbprint":{"description":"Thumbprint is the certificate thumbprint of the vCenter or ESXi host","type":"string"},"url":{"description":"URL is the URL of the vCenter or ESXi host with the VM to migrate","type":"string"},"uuid":{"description":"UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi","type":"string"}},"type":"object"},"v1VmDataVolumeSpec":{"description":"DataVolumeSpec defines the DataVolume type specification","properties":{"checkpoints":{"description":"Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.","items":{"$ref":"#/definitions/v1VmDataVolumeCheckpoint"},"type":"array"},"contentType":{"description":"DataVolumeContentType options: \"kubevirt\", \"archive\"","type":"string"},"finalCheckpoint":{"description":"FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.","type":"boolean"},"preallocation":{"description":"Preallocation controls whether storage for DataVolumes should be allocated in advance.","type":"boolean"},"priorityClassName":{"description":"PriorityClassName for Importer, Cloner and Uploader pod","type":"string"},"pvc":{"$ref":"#/definitions/v1VmPersistentVolumeClaimSpec"},"source":{"$ref":"#/definitions/v1VmDataVolumeSource"},"sourceRef":{"$ref":"#/definitions/v1VmDataVolumeSourceRef"},"storage":{"$ref":"#/definitions/v1VmStorageSpec"}},"type":"object"},"v1VmDataVolumeTemplateSpec":{"properties":{"apiVersion":{"description":"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.","type":"string"},"kind":{"description":"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.","type":"string"},"metadata":{"$ref":"#/definitions/v1VmObjectMeta"},"spec":{"$ref":"#/definitions/v1VmDataVolumeSpec"}},"required":["spec"],"type":"object"},"v1VmDevices":{"properties":{"autoattachGraphicsDevice":{"description":"Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.","type":"boolean"},"autoattachInputDevice":{"description":"Whether to attach an Input Device. Defaults to false.","type":"boolean"},"autoattachMemBalloon":{"description":"Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.","type":"boolean"},"autoattachPodInterface":{"description":"Whether to attach a pod network interface. Defaults to true.","type":"boolean"},"autoattachSerialConsole":{"description":"Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.","type":"boolean"},"autoattachVSOCK":{"description":"Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.","type":"boolean"},"blockMultiQueue":{"description":"Whether or not to enable virtio multi-queue for block devices. Defaults to false.","type":"boolean"},"clientPassthrough":{"$ref":"#/definitions/v1VmClientPassthroughDevices"},"disableHotplug":{"description":"DisableHotplug disabled the ability to hotplug disks.","type":"boolean"},"disks":{"description":"Disks describes disks, cdroms and luns which are connected to the vmi.","items":{"$ref":"#/definitions/v1VmDisk"},"type":"array"},"filesystems":{"description":"Filesystems describes filesystem which is connected to the vmi.","items":{"$ref":"#/definitions/v1VmFilesystem"},"type":"array","x-kubernetes-list-type":"atomic"},"gpus":{"description":"Whether to attach a GPU device to the vmi.","items":{"$ref":"#/definitions/v1VmGPU"},"type":"array","x-kubernetes-list-type":"atomic"},"hostDevices":{"description":"Whether to attach a host device to the vmi.","items":{"$ref":"#/definitions/v1VmHostDevice"},"type":"array","x-kubernetes-list-type":"atomic"},"inputs":{"description":"Inputs describe input devices","items":{"$ref":"#/definitions/v1VmInput"},"type":"array"},"interfaces":{"description":"Interfaces describe network interfaces which are added to the vmi.","items":{"$ref":"#/definitions/v1VmInterface"},"type":"array"},"networkInterfaceMultiqueue":{"description":"If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.","type":"boolean"},"rng":{"$ref":"#/definitions/v1VmRng"},"sound":{"$ref":"#/definitions/v1VmSoundDevice"},"tpm":{"$ref":"#/definitions/v1VmTPMDevice"},"useVirtioTransitional":{"description":"Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).","type":"boolean"},"watchdog":{"$ref":"#/definitions/v1VmWatchdog"}},"type":"object"},"v1VmDisk":{"properties":{"blockSize":{"$ref":"#/definitions/v1VmBlockSize"},"bootOrder":{"description":"BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.","format":"int32","type":"integer"},"cache":{"description":"Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.","type":"string"},"cdrom":{"$ref":"#/definitions/v1VmCDRomTarget"},"dedicatedIOThread":{"description":"dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.","type":"boolean"},"disk":{"$ref":"#/definitions/v1VmDiskTarget"},"io":{"description":"IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.","type":"string"},"lun":{"$ref":"#/definitions/v1VmLunTarget"},"name":{"description":"Name is the device name","type":"string"},"serial":{"description":"Serial provides the ability to specify a serial number for the disk device.","type":"string"},"shareable":{"description":"If specified the disk is made sharable and multiple write from different VMs are permitted","type":"boolean"},"tag":{"description":"If specified, disk address and its tag will be provided to the guest via config drive metadata","type":"string"}},"required":["name"],"type":"object"},"v1VmDiskTarget":{"properties":{"bus":{"description":"Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.","type":"string"},"pciAddress":{"description":"If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10","type":"string"},"readonly":{"description":"ReadOnly. Defaults to false.","type":"boolean"}},"type":"object"},"v1VmDomainSpec":{"properties":{"chassis":{"$ref":"#/definitions/v1VmChassis"},"clock":{"$ref":"#/definitions/v1VmClock"},"cpu":{"$ref":"#/definitions/v1VmCpu"},"devices":{"$ref":"#/definitions/v1VmDevices"},"features":{"$ref":"#/definitions/v1VmFeatures"},"firmware":{"$ref":"#/definitions/v1VmFirmware"},"ioThreadsPolicy":{"description":"Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto","type":"string"},"launchSecurity":{"$ref":"#/definitions/v1VmLaunchSecurity"},"machine":{"$ref":"#/definitions/v1VmMachine"},"memory":{"$ref":"#/definitions/v1VmMemory"},"resources":{"$ref":"#/definitions/v1VmResourceRequirements"}},"required":["devices"],"type":"object"},"v1VmDownwardApiVolumeFile":{"description":"DownwardAPIVolumeFile represents information to create the file containing the pod field","properties":{"fieldRef":{"$ref":"#/definitions/v1VmObjectFieldSelector"},"mode":{"description":"Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.","format":"int32","type":"integer"},"path":{"description":"Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'","type":"string"},"resourceFieldRef":{"$ref":"#/definitions/v1VmResourceFieldSelector"}},"required":["path"],"type":"object"},"v1VmDownwardApiVolumeSource":{"description":"DownwardAPIVolumeSource represents a volume containing downward API info.","properties":{"fields":{"description":"Fields is a list of downward API volume file","items":{"$ref":"#/definitions/v1VmDownwardApiVolumeFile"},"type":"array"},"volumeLabel":{"description":"The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).","type":"string"}},"type":"object"},"v1VmDownwardMetricsVolumeSource":{"description":"DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.","type":"object"},"v1VmDuration":{"description":"Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.","type":"string"},"v1VmEFI":{"description":"If set, EFI will be used instead of BIOS.","properties":{"secureBoot":{"description":"If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true","type":"boolean"}},"type":"object"},"v1VmEmptyDiskSource":{"description":"EmptyDisk represents a temporary disk which shares the vmis lifecycle.","properties":{"capacity":{"$ref":"#/definitions/v1VmQuantity"}},"required":["capacity"],"type":"object"},"v1VmEphemeralVolumeSource":{"properties":{"persistentVolumeClaim":{"$ref":"#/definitions/v1VmPersistentVolumeClaimVolumeSource"}},"type":"object"},"v1VmError":{"description":"Error is the last error encountered during the snapshot/restore","properties":{"message":{"type":"string"},"time":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1VmExecAction":{"description":"ExecAction describes a \"run in container\" action.","properties":{"command":{"description":"Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.","items":{"type":"string"},"type":"array"}},"type":"object"},"v1VmFeatureApiC":{"properties":{"enabled":{"description":"Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.","type":"boolean"},"endOfInterrupt":{"description":"EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.","type":"boolean"}},"type":"object"},"v1VmFeatureHyperv":{"description":"Hyperv specific features.","properties":{"evmcs":{"$ref":"#/definitions/v1VmFeatureState"},"frequencies":{"$ref":"#/definitions/v1VmFeatureState"},"ipi":{"$ref":"#/definitions/v1VmFeatureState"},"reenlightenment":{"$ref":"#/definitions/v1VmFeatureState"},"relaxed":{"$ref":"#/definitions/v1VmFeatureState"},"reset":{"$ref":"#/definitions/v1VmFeatureState"},"runtime":{"$ref":"#/definitions/v1VmFeatureState"},"spinlocks":{"$ref":"#/definitions/v1VmFeatureSpinlocks"},"synic":{"$ref":"#/definitions/v1VmFeatureState"},"synictimer":{"$ref":"#/definitions/v1VmSyNICTimer"},"tlbflush":{"$ref":"#/definitions/v1VmFeatureState"},"vapic":{"$ref":"#/definitions/v1VmFeatureState"},"vendorid":{"$ref":"#/definitions/v1VmFeatureVendorId"},"vpindex":{"$ref":"#/definitions/v1VmFeatureState"}},"type":"object"},"v1VmFeatureKVm":{"properties":{"hidden":{"description":"Hide the KVM hypervisor from standard MSR based discovery. Defaults to false","type":"boolean"}},"type":"object"},"v1VmFeatureSpinlocks":{"properties":{"enabled":{"description":"Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.","type":"boolean"},"spinlocks":{"description":"Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.","format":"int64","type":"integer"}},"type":"object"},"v1VmFeatureState":{"description":"Represents if a feature is enabled or disabled.","properties":{"enabled":{"description":"Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.","type":"boolean"}},"type":"object"},"v1VmFeatureVendorId":{"properties":{"enabled":{"description":"Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.","type":"boolean"},"vendorid":{"description":"VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.","type":"string"}},"type":"object"},"v1VmFeatures":{"properties":{"acpi":{"$ref":"#/definitions/v1VmFeatureState"},"apic":{"$ref":"#/definitions/v1VmFeatureApiC"},"hyperv":{"$ref":"#/definitions/v1VmFeatureHyperv"},"kvm":{"$ref":"#/definitions/v1VmFeatureKVm"},"pvspinlock":{"$ref":"#/definitions/v1VmFeatureState"},"smm":{"$ref":"#/definitions/v1VmFeatureState"}},"type":"object"},"v1VmFieldsV1":{"description":"FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff","properties":{"Raw":{"items":{"format":"byte","type":"string"},"type":"array"}},"type":"object"},"v1VmFilesystem":{"properties":{"name":{"description":"Name is the device name","type":"string"},"virtiofs":{"$ref":"#/definitions/v1VmFilesystemVirtiofs"}},"required":["name","virtiofs"],"type":"object"},"v1VmFilesystemVirtiofs":{"type":"object"},"v1VmFirmware":{"properties":{"bootloader":{"$ref":"#/definitions/v1VmBootloader"},"kernelBoot":{"$ref":"#/definitions/v1VmKernelBoot"},"serial":{"description":"The system-serial-number in SMBIOS","type":"string"},"uuid":{"description":"UUID reported by the vmi bios. Defaults to a random generated uid.","type":"string"}},"type":"object"},"v1VmGPU":{"properties":{"deviceName":{"type":"string"},"name":{"description":"Name of the GPU device as exposed by a device plugin","type":"string"},"tag":{"description":"If specified, the virtual network interface address and its tag will be provided to the guest via config drive","type":"string"},"virtualGPUOptions":{"$ref":"#/definitions/v1VmVGPUOptions"}},"required":["name","deviceName"],"type":"object"},"v1VmGuestAgentPing":{"description":"GuestAgentPing configures the guest-agent based ping probe","type":"object"},"v1VmHPETTimer":{"properties":{"present":{"description":"Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.","type":"boolean"},"tickPolicy":{"description":"TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".","type":"string"}},"type":"object"},"v1VmHostDevice":{"properties":{"deviceName":{"description":"DeviceName is the resource name of the host device exposed by a device plugin","type":"string"},"name":{"type":"string"},"tag":{"description":"If specified, the virtual network interface address and its tag will be provided to the guest via config drive","type":"string"}},"required":["name","deviceName"],"type":"object"},"v1VmHostDisk":{"description":"Represents a disk created on the cluster level","properties":{"capacity":{"$ref":"#/definitions/v1VmQuantity"},"path":{"description":"The path to HostDisk image located on the cluster","type":"string"},"shared":{"description":"Shared indicate whether the path is shared between nodes","type":"boolean"},"type":{"description":"Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'","type":"string"}},"required":["path","type"],"type":"object"},"v1VmHotplugVolumeSource":{"description":"HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.","properties":{"dataVolume":{"$ref":"#/definitions/v1VmCoreDataVolumeSource"},"persistentVolumeClaim":{"$ref":"#/definitions/v1VmPersistentVolumeClaimVolumeSource"}},"type":"object"},"v1VmHttpGetAction":{"description":"HTTPGetAction describes an action based on HTTP Get requests.","properties":{"host":{"description":"Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.","type":"string"},"httpHeaders":{"description":"Custom headers to set in the request. HTTP allows repeated headers.","items":{"$ref":"#/definitions/v1VmHttpHeader"},"type":"array"},"path":{"description":"Path to access on the HTTP server.","type":"string"},"port":{"description":"Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.","type":["string","number"]},"scheme":{"description":"Scheme to use for connecting to the host. Defaults to HTTP.","type":"string"}},"required":["port"],"type":"object"},"v1VmHttpHeader":{"description":"HTTPHeader describes a custom header to be used in HTTP probes","properties":{"name":{"description":"The header field name","type":"string"},"value":{"description":"The header field value","type":"string"}},"required":["name","value"],"type":"object"},"v1VmHugepages":{"description":"Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.","properties":{"pageSize":{"description":"PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.","type":"string"}},"type":"object"},"v1VmHypervTimer":{"properties":{"present":{"description":"Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.","type":"boolean"}},"type":"object"},"v1VmI6300ESBWatchdog":{"description":"i6300esb watchdog device.","properties":{"action":{"description":"The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.","type":"string"}},"type":"object"},"v1VmInput":{"properties":{"bus":{"description":"Bus indicates the bus of input device to emulate. Supported values: virtio, usb.","type":"string"},"name":{"description":"Name is the device name","type":"string"},"type":{"description":"Type indicated the type of input device. Supported values: tablet.","type":"string"}},"required":["type","name"],"type":"object"},"v1VmInstancetypeMatcher":{"description":"InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.","properties":{"inferFromVolume":{"description":"InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.","type":"string"},"kind":{"description":"Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.","type":"string"},"name":{"description":"Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype","type":"string"},"revisionName":{"description":"RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.","type":"string"}},"type":"object"},"v1VmInterface":{"properties":{"acpiIndex":{"description":"If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).","format":"int32","type":"integer"},"bootOrder":{"description":"BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.","format":"int32","type":"integer"},"bridge":{"$ref":"#/definitions/v1VmInterfaceBridge"},"dhcpOptions":{"$ref":"#/definitions/v1VmDHCPOptions"},"macAddress":{"description":"Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.","type":"string"},"macvtap":{"$ref":"#/definitions/v1VmInterfaceMacvtap"},"masquerade":{"$ref":"#/definitions/v1VmInterfaceMasquerade"},"model":{"description":"Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.","type":"string"},"name":{"description":"Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.","type":"string"},"passt":{"$ref":"#/definitions/v1VmInterfacePasst"},"pciAddress":{"description":"If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10","type":"string"},"ports":{"description":"List of ports to be forwarded to the virtual machine.","items":{"$ref":"#/definitions/v1VmPort"},"type":"array"},"slirp":{"$ref":"#/definitions/v1VmInterfaceSlirp"},"sriov":{"$ref":"#/definitions/v1VmInterfaceSRIOV"},"tag":{"description":"If specified, the virtual network interface address and its tag will be provided to the guest via config drive","type":"string"}},"required":["name"],"type":"object"},"v1VmInterfaceBridge":{"description":"InterfaceBridge connects to a given network via a linux bridge.","type":"object"},"v1VmInterfaceMacvtap":{"description":"InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.","type":"object"},"v1VmInterfaceMasquerade":{"description":"InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.","type":"object"},"v1VmInterfacePasst":{"description":"InterfacePasst connects to a given network.","type":"object"},"v1VmInterfaceSRIOV":{"description":"InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.","type":"object"},"v1VmInterfaceSlirp":{"description":"InterfaceSlirp connects to a given network using QEMU user networking mode.","type":"object"},"v1VmKVmTimer":{"properties":{"present":{"description":"Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.","type":"boolean"}},"type":"object"},"v1VmKernelBoot":{"description":"Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments","properties":{"container":{"$ref":"#/definitions/v1VmKernelBootContainer"},"kernelArgs":{"description":"Arguments to be passed to the kernel at boot time","type":"string"}},"type":"object"},"v1VmKernelBootContainer":{"description":"If set, the VM will be booted from the defined kernel / initrd.","properties":{"image":{"description":"Image that contains initrd / kernel files.","type":"string"},"imagePullPolicy":{"description":"Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images","type":"string"},"imagePullSecret":{"description":"ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.","type":"string"},"initrdPath":{"description":"the fully-qualified path to the ramdisk image in the host OS","type":"string"},"kernelPath":{"description":"The fully-qualified path to the kernel image in the host OS","type":"string"}},"required":["image"],"type":"object"},"v1VmLabelSelector":{"description":"A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.","properties":{"matchExpressions":{"description":"matchExpressions is a list of label selector requirements. The requirements are ANDed.","items":{"$ref":"#/definitions/v1VmLabelSelectorRequirement"},"type":"array"},"matchLabels":{"additionalProperties":{"type":"string"},"description":"matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.","type":"object"}},"type":"object"},"v1VmLabelSelectorRequirement":{"description":"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"key is the label key that the selector applies to.","type":"string","x-kubernetes-patch-merge-key":"key","x-kubernetes-patch-strategy":"merge"},"operator":{"description":"operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.","type":"string"},"values":{"description":"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"v1VmLaunchSecurity":{"properties":{"sev":{"$ref":"#/definitions/v1VmSEV"}},"type":"object"},"v1VmListMeta":{"description":"ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.","properties":{"continue":{"description":"continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.","type":"string"},"remainingItemCount":{"description":"remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact.","format":"int64","type":"integer"},"resourceVersion":{"description":"String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only.","type":"string"},"selfLink":{"description":"selfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.","type":"string"}},"type":"object"},"v1VmLocalObjectReference":{"description":"LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.","properties":{"name":{"description":"Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"}},"type":"object"},"v1VmLunTarget":{"properties":{"bus":{"description":"Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.","type":"string"},"readonly":{"description":"ReadOnly. Defaults to false.","type":"boolean"}},"type":"object"},"v1VmMachine":{"properties":{"type":{"description":"QEMU machine type is the actual chipset of the VirtualMachineInstance.","type":"string"}},"type":"object"},"v1VmManagedFieldsEntry":{"description":"ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.","properties":{"apiVersion":{"description":"APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.","type":"string"},"fieldsType":{"description":"FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"","type":"string"},"fieldsV1":{"$ref":"#/definitions/v1VmFieldsV1"},"manager":{"description":"Manager is an identifier of the workflow managing these fields.","type":"string"},"operation":{"description":"Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.","type":"string"},"subresource":{"description":"Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.","type":"string"},"time":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1VmMemory":{"description":"Memory allows specifying the VirtualMachineInstance memory features.","properties":{"guest":{"$ref":"#/definitions/v1VmQuantity"},"hugepages":{"$ref":"#/definitions/v1VmHugepages"}},"type":"object"},"v1VmMemoryDumpVolumeSource":{"properties":{"claimName":{"description":"ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","type":"string"},"hotpluggable":{"description":"Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.","type":"boolean"},"readOnly":{"description":"Will force the ReadOnly setting in VolumeMounts. Default false.","type":"boolean"}},"required":["claimName"],"type":"object"},"v1VmMultusNetwork":{"description":"Represents the multus cni network.","properties":{"default":{"description":"Select the default network and add it to the multus-cni.io/default-network annotation.","type":"boolean"},"networkName":{"description":"References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.","type":"string"}},"required":["networkName"],"type":"object"},"v1VmNUMA":{"properties":{"guestMappingPassthrough":{"$ref":"#/definitions/v1VmNUMAGuestMappingPassthrough"}},"type":"object"},"v1VmNUMAGuestMappingPassthrough":{"description":"NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.","type":"object"},"v1VmNetwork":{"description":"Network represents a network type and a resource that should be connected to the vm.","properties":{"multus":{"$ref":"#/definitions/v1VmMultusNetwork"},"name":{"description":"Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"pod":{"$ref":"#/definitions/v1VmPodNetwork"}},"required":["name"],"type":"object"},"v1VmNodeAffinity":{"description":"Node affinity is a group of node affinity scheduling rules.","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.","items":{"$ref":"#/definitions/v1VmPreferredSchedulingTerm"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"$ref":"#/definitions/v1VmNodeSelector"}},"type":"object"},"v1VmNodeSelector":{"description":"A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.","properties":{"nodeSelectorTerms":{"description":"Required. A list of node selector terms. The terms are ORed.","items":{"$ref":"#/definitions/v1VmNodeSelectorTerm"},"type":"array"}},"required":["nodeSelectorTerms"],"type":"object"},"v1VmNodeSelectorRequirement":{"description":"A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.","properties":{"key":{"description":"The label key that the selector applies to.","type":"string"},"operator":{"description":"Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.","type":"string"},"values":{"description":"An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.","items":{"type":"string"},"type":"array"}},"required":["key","operator"],"type":"object"},"v1VmNodeSelectorTerm":{"description":"A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.","properties":{"matchExpressions":{"description":"A list of node selector requirements by node's labels.","items":{"$ref":"#/definitions/v1VmNodeSelectorRequirement"},"type":"array"},"matchFields":{"description":"A list of node selector requirements by node's fields.","items":{"$ref":"#/definitions/v1VmNodeSelectorRequirement"},"type":"array"}},"type":"object"},"v1VmObjectFieldSelector":{"description":"ObjectFieldSelector selects an APIVersioned field of an object.","properties":{"apiVersion":{"description":"Version of the schema the FieldPath is written in terms of, defaults to \"v1\".","type":"string"},"fieldPath":{"description":"Path of the field to select in the specified API version.","type":"string"}},"required":["fieldPath"],"type":"object"},"v1VmObjectMeta":{"description":"ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.","properties":{"annotations":{"additionalProperties":{"type":"string"},"description":"Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations","type":"object"},"clusterName":{"description":"The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.","type":"string"},"creationTimestamp":{"description":"CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","type":"string"},"deletionGracePeriodSeconds":{"description":"Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.","format":"int64","type":"integer"},"deletionTimestamp":{"description":"DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata","format":"date-time","type":"string","x-nullable":true},"finalizers":{"description":"Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.","items":{"type":"string"},"type":"array","x-kubernetes-patch-strategy":"merge"},"generateName":{"description":"GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.","type":"string"},"generation":{"description":"A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.","format":"int64","type":"integer"},"labels":{"additionalProperties":{"type":"string"},"description":"Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels","type":"object"},"managedFields":{"description":"ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.","items":{"$ref":"#/definitions/v1VmManagedFieldsEntry"},"type":"array"},"name":{"description":"Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names","type":"string"},"namespace":{"description":"Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.","type":"string"},"ownerReferences":{"description":"List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.","items":{"$ref":"#/definitions/v1VmOwnerReference"},"type":"array","x-kubernetes-patch-merge-key":"uid","x-kubernetes-patch-strategy":"merge"},"resourceVersion":{"description":"An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.","type":"string"},"selfLink":{"description":"SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.","type":"string"},"uid":{"description":"UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.","type":"string"}},"type":"object"},"v1VmOwnerReference":{"description":"OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.","properties":{"apiVersion":{"description":"API version of the referent.","type":"string"},"blockOwnerDeletion":{"description":"If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.","type":"boolean"},"controller":{"description":"If true, this reference points to the managing controller.","type":"boolean"},"kind":{"description":"Kind of the referent.","type":"string"},"name":{"description":"Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names","type":"string"},"uid":{"description":"UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids","type":"string"}},"required":["apiVersion","kind","name","uid"],"type":"object"},"v1VmPITTimer":{"properties":{"present":{"description":"Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.","type":"boolean"},"tickPolicy":{"description":"TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".","type":"string"}},"type":"object"},"v1VmPersistentVolumeClaimSpec":{"description":"PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes","properties":{"accessModes":{"description":"AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1","items":{"type":"string"},"type":"array"},"dataSource":{"$ref":"#/definitions/v1VmTypedLocalObjectReference"},"dataSourceRef":{"$ref":"#/definitions/v1VmTypedLocalObjectReference"},"resources":{"$ref":"#/definitions/v1VmCoreResourceRequirements"},"selector":{"$ref":"#/definitions/v1VmLabelSelector"},"storageClassName":{"description":"Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1","type":"string"},"volumeMode":{"description":"volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.","type":"string"},"volumeName":{"description":"VolumeName is the binding reference to the PersistentVolume backing this claim.","type":"string"}},"type":"object"},"v1VmPersistentVolumeClaimVolumeSource":{"description":"PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","properties":{"claimName":{"description":"ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims","type":"string"},"hotpluggable":{"description":"Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.","type":"boolean"},"readOnly":{"description":"Will force the ReadOnly setting in VolumeMounts. Default false.","type":"boolean"}},"required":["claimName"],"type":"object"},"v1VmPodAffinity":{"description":"Pod affinity is a group of inter pod affinity scheduling rules.","properties":{"preferredDuringSchedulingIgnoredDuringExecution":{"description":"The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.","items":{"$ref":"#/definitions/v1VmWeightedPodAffinityTerm"},"type":"array"},"requiredDuringSchedulingIgnoredDuringExecution":{"description":"If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.","items":{"$ref":"#/definitions/v1VmPodAffinityTerm"},"type":"array"}},"type":"object"},"v1VmPodAffinityTerm":{"description":"Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running","properties":{"labelSelector":{"$ref":"#/definitions/v1VmLabelSelector"},"namespaceSelector":{"$ref":"#/definitions/v1VmLabelSelector"},"namespaces":{"description":"namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"","items":{"type":"string"},"type":"array"},"topologyKey":{"description":"This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.","type":"string"}},"required":["topologyKey"],"type":"object"},"v1VmPodDnsConfig":{"description":"PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.","properties":{"nameservers":{"description":"A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.","items":{"type":"string"},"type":"array"},"options":{"description":"A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.","items":{"$ref":"#/definitions/v1VmPodDnsConfigOption"},"type":"array"},"searches":{"description":"A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.","items":{"type":"string"},"type":"array"}},"type":"object"},"v1VmPodDnsConfigOption":{"description":"PodDNSConfigOption defines DNS resolver options of a pod.","properties":{"name":{"description":"Required.","type":"string"},"value":{"type":"string"}},"type":"object"},"v1VmPodNetwork":{"description":"Represents the stock pod network interface.","properties":{"vmIPv6NetworkCIDR":{"description":"IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.","type":"string"},"vmNetworkCIDR":{"description":"CIDR for vm network. Default 10.0.2.0/24 if not specified.","type":"string"}},"type":"object"},"v1VmPort":{"description":"Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory","properties":{"name":{"description":"If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.","type":"string"},"port":{"description":"Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.","format":"int32","type":"integer"},"protocol":{"description":"Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".","type":"string"}},"required":["port"],"type":"object"},"v1VmPreferenceMatcher":{"description":"PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.","properties":{"inferFromVolume":{"description":"InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.","type":"string"},"kind":{"description":"Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.","type":"string"},"name":{"description":"Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference","type":"string"},"revisionName":{"description":"RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.","type":"string"}},"type":"object"},"v1VmPreferredSchedulingTerm":{"description":"An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).","properties":{"preference":{"$ref":"#/definitions/v1VmNodeSelectorTerm"},"weight":{"description":"Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["weight","preference"],"type":"object"},"v1VmProbe":{"description":"Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.","properties":{"exec":{"$ref":"#/definitions/v1VmExecAction"},"failureThreshold":{"description":"Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.","format":"int32","type":"integer"},"guestAgentPing":{"$ref":"#/definitions/v1VmGuestAgentPing"},"httpGet":{"$ref":"#/definitions/v1VmHttpGetAction"},"initialDelaySeconds":{"description":"Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes","format":"int32","type":"integer"},"periodSeconds":{"description":"How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.","format":"int32","type":"integer"},"successThreshold":{"description":"Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.","format":"int32","type":"integer"},"tcpSocket":{"$ref":"#/definitions/v1VmTcpSocketAction"},"timeoutSeconds":{"description":"Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes","format":"int32","type":"integer"}},"type":"object"},"v1VmQemuGuestAgentSshPublicKeyAccessCredentialPropagation":{"properties":{"users":{"description":"Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.","items":{"type":"string"},"type":"array","x-kubernetes-list-type":"set"}},"required":["users"],"type":"object"},"v1VmQemuGuestAgentUserPasswordAccessCredentialPropagation":{"type":"object"},"v1VmQuantity":{"description":"Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.","type":"string"},"v1VmRTCTimer":{"properties":{"present":{"description":"Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.","type":"boolean"},"tickPolicy":{"description":"TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".","type":"string"},"track":{"description":"Track the guest or the wall clock.","type":"string"}},"type":"object"},"v1VmRealtime":{"description":"Realtime holds the tuning knobs specific for realtime workloads.","properties":{"mask":{"description":"Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"","type":"string"}},"type":"object"},"v1VmRemoveVolumeOptions":{"description":"RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk","properties":{"dryRun":{"description":"When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed","items":{"type":"string"},"type":"array","x-kubernetes-list-type":"atomic"},"name":{"description":"Name represents the name that maps to both the disk and volume that should be removed","type":"string"}},"required":["name"],"type":"object"},"v1VmResourceFieldSelector":{"description":"ResourceFieldSelector represents container resources (cpu, memory) and their output format","properties":{"containerName":{"description":"Container name: required for volumes, optional for env vars","type":"string"},"divisor":{"$ref":"#/definitions/v1VmQuantity"},"resource":{"description":"Required: resource to select","type":"string"}},"required":["resource"],"type":"object"},"v1VmResourceRequirements":{"properties":{"limits":{"description":"Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".","type":"object"},"overcommitGuestOverhead":{"description":"Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.","type":"boolean"},"requests":{"description":"Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".","type":"object"}},"type":"object"},"v1VmRng":{"description":"Rng represents the random device passed from host","type":"object"},"v1VmSEV":{"type":"object"},"v1VmSecretVolumeSource":{"description":"SecretVolumeSource adapts a Secret into a volume.","properties":{"optional":{"description":"Specify whether the Secret or it's keys must be defined","type":"boolean"},"secretName":{"description":"Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret","type":"string"},"volumeLabel":{"description":"The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).","type":"string"}},"type":"object"},"v1VmServiceAccountVolumeSource":{"description":"ServiceAccountVolumeSource adapts a ServiceAccount into a volume.","properties":{"serviceAccountName":{"description":"Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/","type":"string"}},"type":"object"},"v1VmSnapshotVolumesLists":{"description":"SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot","properties":{"excludedVolumes":{"items":{"type":"string"},"type":"array","x-kubernetes-list-type":"set"},"includedVolumes":{"items":{"type":"string"},"type":"array","x-kubernetes-list-type":"set"}},"type":"object"},"v1VmSoundDevice":{"description":"Represents the user's configuration to emulate sound cards in the VMI.","properties":{"model":{"description":"We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9","type":"string"},"name":{"description":"User's defined name for this sound device","type":"string"}},"required":["name"],"type":"object"},"v1VmSshPublicKeyAccessCredential":{"description":"SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest","properties":{"propagationMethod":{"$ref":"#/definitions/v1VmSshPublicKeyAccessCredentialPropagationMethod"},"source":{"$ref":"#/definitions/v1VmSshPublicKeyAccessCredentialSource"}},"required":["source","propagationMethod"],"type":"object"},"v1VmSshPublicKeyAccessCredentialPropagationMethod":{"description":"SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.","properties":{"configDrive":{"$ref":"#/definitions/v1VmConfigDriveSshPublicKeyAccessCredentialPropagation"},"qemuGuestAgent":{"$ref":"#/definitions/v1VmQemuGuestAgentSshPublicKeyAccessCredentialPropagation"}},"type":"object"},"v1VmSshPublicKeyAccessCredentialSource":{"description":"SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.","properties":{"secret":{"$ref":"#/definitions/v1VmAccessCredentialSecretSource"}},"type":"object"},"v1VmStorageSpec":{"description":"StorageSpec defines the Storage type specification","properties":{"accessModes":{"description":"AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1","items":{"type":"string"},"type":"array"},"dataSource":{"$ref":"#/definitions/v1VmTypedLocalObjectReference"},"resources":{"$ref":"#/definitions/v1VmCoreResourceRequirements"},"selector":{"$ref":"#/definitions/v1VmLabelSelector"},"storageClassName":{"description":"Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1","type":"string"},"volumeMode":{"description":"volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.","type":"string"},"volumeName":{"description":"VolumeName is the binding reference to the PersistentVolume backing this claim.","type":"string"}},"type":"object"},"v1VmSyNICTimer":{"properties":{"direct":{"$ref":"#/definitions/v1VmFeatureState"},"enabled":{"type":"boolean"}},"type":"object"},"v1VmSysprepSource":{"description":"Represents a Sysprep volume source.","properties":{"configMap":{"$ref":"#/definitions/v1VmLocalObjectReference"},"secret":{"$ref":"#/definitions/v1VmLocalObjectReference"}},"type":"object"},"v1VmTPMDevice":{"type":"object"},"v1VmTcpSocketAction":{"description":"TCPSocketAction describes an action based on opening a socket","properties":{"host":{"description":"Optional: Host name to connect to, defaults to the pod IP.","type":"string"},"port":{"description":"Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.","type":["string","number"]}},"required":["port"],"type":"object"},"v1VmTimer":{"description":"Represents all available timers in a vmi.","properties":{"hpet":{"$ref":"#/definitions/v1VmHPETTimer"},"hyperv":{"$ref":"#/definitions/v1VmHypervTimer"},"kvm":{"$ref":"#/definitions/v1VmKVmTimer"},"pit":{"$ref":"#/definitions/v1VmPITTimer"},"rtc":{"$ref":"#/definitions/v1VmRTCTimer"}},"type":"object"},"v1VmToleration":{"description":"The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.","properties":{"effect":{"description":"Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.","type":"string"},"key":{"description":"Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.","type":"string"},"operator":{"description":"Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.","type":"string"},"tolerationSeconds":{"description":"TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.","format":"int64","type":"integer"},"value":{"description":"Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.","type":"string"}},"type":"object"},"v1VmTopologySpreadConstraint":{"description":"TopologySpreadConstraint specifies how to spread matching pods among the given topology.","properties":{"labelSelector":{"$ref":"#/definitions/v1VmLabelSelector"},"maxSkew":{"description":"MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.","format":"int32","type":"integer"},"topologyKey":{"description":"TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.","type":"string"},"whenUnsatisfiable":{"description":"WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.","type":"string"}},"required":["maxSkew","topologyKey","whenUnsatisfiable"],"type":"object"},"v1VmTypedLocalObjectReference":{"description":"TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.","properties":{"apiGroup":{"description":"APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.","type":"string"},"kind":{"description":"Kind is the type of resource being referenced","type":"string"},"name":{"description":"Name is the name of resource being referenced","type":"string"}},"required":["kind","name"],"type":"object"},"v1VmUserPasswordAccessCredential":{"description":"UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.","properties":{"propagationMethod":{"$ref":"#/definitions/v1VmUserPasswordAccessCredentialPropagationMethod"},"source":{"$ref":"#/definitions/v1VmUserPasswordAccessCredentialSource"}},"required":["source","propagationMethod"],"type":"object"},"v1VmUserPasswordAccessCredentialPropagationMethod":{"description":"UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.","properties":{"qemuGuestAgent":{"$ref":"#/definitions/v1VmQemuGuestAgentUserPasswordAccessCredentialPropagation"}},"type":"object"},"v1VmUserPasswordAccessCredentialSource":{"description":"UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.","properties":{"secret":{"$ref":"#/definitions/v1VmAccessCredentialSecretSource"}},"type":"object"},"v1VmVGPUDisplayOptions":{"properties":{"enabled":{"description":"Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.","type":"boolean"},"ramFB":{"$ref":"#/definitions/v1VmFeatureState"}},"type":"object"},"v1VmVGPUOptions":{"properties":{"display":{"$ref":"#/definitions/v1VmVGPUDisplayOptions"}},"type":"object"},"v1VmVirtualMachineCondition":{"description":"VirtualMachineCondition represents the state of VirtualMachine","properties":{"lastProbeTime":{"type":"string"},"lastTransitionTime":{"type":"string"},"message":{"type":"string"},"reason":{"type":"string"},"status":{"type":"string"},"type":{"type":"string"}},"required":["type","status"],"type":"object"},"v1VmVirtualMachineInstanceSpec":{"description":"VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.","properties":{"accessCredentials":{"description":"Specifies a set of public keys to inject into the vm guest","items":{"$ref":"#/definitions/v1VmAccessCredential"},"type":"array","x-kubernetes-list-type":"atomic"},"affinity":{"$ref":"#/definitions/v1VmAffinity"},"dnsConfig":{"$ref":"#/definitions/v1VmPodDnsConfig"},"dnsPolicy":{"description":"Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.","type":"string"},"domain":{"$ref":"#/definitions/v1VmDomainSpec"},"evictionStrategy":{"description":"EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.","type":"string"},"hostname":{"description":"Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.","type":"string"},"livenessProbe":{"$ref":"#/definitions/v1VmProbe"},"networks":{"description":"List of networks that can be attached to a vm's virtual interface.","items":{"$ref":"#/definitions/v1VmNetwork"},"type":"array"},"nodeSelector":{"additionalProperties":{"type":"string"},"description":"NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/","type":"object"},"priorityClassName":{"description":"If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.","type":"string"},"readinessProbe":{"$ref":"#/definitions/v1VmProbe"},"schedulerName":{"description":"If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.","type":"string"},"startStrategy":{"description":"StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.","type":"string"},"subdomain":{"description":"If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.","type":"string"},"terminationGracePeriodSeconds":{"description":"Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.","format":"int64","type":"integer"},"tolerations":{"description":"If toleration is specified, obey all the toleration rules.","items":{"$ref":"#/definitions/v1VmToleration"},"type":"array"},"topologySpreadConstraints":{"description":"TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.","items":{"$ref":"#/definitions/v1VmTopologySpreadConstraint"},"type":"array","x-kubernetes-list-map-keys":["topologyKey","whenUnsatisfiable"],"x-kubernetes-list-type":"map","x-kubernetes-patch-merge-key":"topologyKey","x-kubernetes-patch-strategy":"merge"},"volumes":{"description":"List of volumes that can be mounted by disks belonging to the vmi.","items":{"$ref":"#/definitions/v1VmVolume"},"type":"array"}},"required":["domain"],"type":"object"},"v1VmVirtualMachineInstanceTemplateSpec":{"properties":{"metadata":{"$ref":"#/definitions/v1VmObjectMeta"},"spec":{"$ref":"#/definitions/v1VmVirtualMachineInstanceSpec"}},"type":"object"},"v1VmVirtualMachineMemoryDumpRequest":{"description":"VirtualMachineMemoryDumpRequest represent the memory dump request phase and info","properties":{"claimName":{"description":"ClaimName is the name of the pvc that will contain the memory dump","type":"string"},"endTimestamp":{"$ref":"#/definitions/v1Time"},"fileName":{"description":"FileName represents the name of the output file","type":"string"},"message":{"description":"Message is a detailed message about failure of the memory dump","type":"string"},"phase":{"description":"Phase represents the memory dump phase","type":"string"},"remove":{"description":"Remove represents request of dissociating the memory dump pvc","type":"boolean"},"startTimestamp":{"$ref":"#/definitions/v1Time"}},"required":["claimName","phase"],"type":"object"},"v1VmVirtualMachineStartFailure":{"description":"VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status","properties":{"consecutiveFailCount":{"format":"int32","type":"integer"},"lastFailedVMIUID":{"type":"string"},"retryAfterTimestamp":{"$ref":"#/definitions/v1Time"}},"type":"object"},"v1VmVirtualMachineStateChangeRequest":{"properties":{"action":{"description":"Indicates the type of action that is requested. e.g. Start or Stop","type":"string"},"data":{"additionalProperties":{"type":"string"},"description":"Provides additional data in order to perform the Action","type":"object"},"uid":{"description":"Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable","type":"string"}},"required":["action"],"type":"object"},"v1VmVirtualMachineVolumeRequest":{"properties":{"addVolumeOptions":{"$ref":"#/definitions/v1VmAddVolumeOptions"},"removeVolumeOptions":{"$ref":"#/definitions/v1VmRemoveVolumeOptions"}},"type":"object"},"v1VmVolume":{"description":"Volume represents a named volume in a vmi.","properties":{"cloudInitConfigDrive":{"$ref":"#/definitions/v1VmCloudInitConfigDriveSource"},"cloudInitNoCloud":{"$ref":"#/definitions/v1VmCloudInitNoCloudSource"},"configMap":{"$ref":"#/definitions/v1VmConfigMapVolumeSource"},"containerDisk":{"$ref":"#/definitions/v1VmContainerDiskSource"},"dataVolume":{"$ref":"#/definitions/v1VmCoreDataVolumeSource"},"downwardAPI":{"$ref":"#/definitions/v1VmDownwardApiVolumeSource"},"downwardMetrics":{"$ref":"#/definitions/v1VmDownwardMetricsVolumeSource"},"emptyDisk":{"$ref":"#/definitions/v1VmEmptyDiskSource"},"ephemeral":{"$ref":"#/definitions/v1VmEphemeralVolumeSource"},"hostDisk":{"$ref":"#/definitions/v1VmHostDisk"},"memoryDump":{"$ref":"#/definitions/v1VmMemoryDumpVolumeSource"},"name":{"description":"Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names","type":"string"},"persistentVolumeClaim":{"$ref":"#/definitions/v1VmPersistentVolumeClaimVolumeSource"},"secret":{"$ref":"#/definitions/v1VmSecretVolumeSource"},"serviceAccount":{"$ref":"#/definitions/v1VmServiceAccountVolumeSource"},"sysprep":{"$ref":"#/definitions/v1VmSysprepSource"}},"required":["name"],"type":"object"},"v1VmVolumeSnapshotStatus":{"properties":{"enabled":{"description":"True if the volume supports snapshotting","type":"boolean"},"name":{"description":"Volume name","type":"string"},"reason":{"description":"Empty if snapshotting is enabled, contains reason otherwise","type":"string"}},"required":["name","enabled"],"type":"object"},"v1VmWatchdog":{"description":"Named watchdog device.","properties":{"i6300esb":{"$ref":"#/definitions/v1VmI6300ESBWatchdog"},"name":{"description":"Name of the watchdog.","type":"string"}},"required":["name"],"type":"object"},"v1VmWeightedPodAffinityTerm":{"description":"The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)","properties":{"podAffinityTerm":{"$ref":"#/definitions/v1VmPodAffinityTerm"},"weight":{"description":"weight associated with matching the corresponding podAffinityTerm, in the range 1-100.","format":"int32","type":"integer"}},"required":["weight","podAffinityTerm"],"type":"object"},"v1VsphereAccount":{"description":"VSphere account information","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the account.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1VsphereCloudAccount"},"status":{"$ref":"#/definitions/v1CloudAccountStatus"}},"type":"object"},"v1VsphereAccounts":{"properties":{"items":{"items":{"$ref":"#/definitions/v1VsphereAccount"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1VsphereCloudAccount":{"properties":{"insecure":{"description":"Insecure is a flag that controls whether or not to validate the vSphere server's certificate.","type":"boolean","x-omitempty":false},"password":{"type":"string"},"username":{"type":"string"},"vcenterServer":{"description":"VcenterServer is the address of the vSphere endpoint","type":"string"}},"required":["vcenterServer","username","password"],"type":"object"},"v1VsphereCloudClusterConfigEntity":{"description":"vSphere cloud cluster config entity","properties":{"clusterConfig":{"$ref":"#/definitions/v1VsphereClusterConfigEntity"}},"type":"object"},"v1VsphereCloudConfig":{"description":"VsphereCloudConfig is the Schema for the vspherecloudconfigs API","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info. APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources","type":"string"},"kind":{"description":"Cloud type of the cloud config","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1VsphereCloudConfigSpec"},"status":{"$ref":"#/definitions/v1VsphereCloudConfigStatus"}},"type":"object"},"v1VsphereCloudConfigSpec":{"description":"VsphereCloudConfigSpec defines the desired state of VsphereCloudConfig","properties":{"cloudAccountRef":{"$ref":"#/definitions/v1ObjectReference","description":"cloudAccountRef should point to the secret which contains VsphereCloudAccount"},"clusterConfig":{"$ref":"#/definitions/v1VsphereClusterConfig"},"edgeHostRef":{"$ref":"#/definitions/v1ObjectReference","description":"Appliance (Edge Host) uid for Edge env"},"machinePoolConfig":{"items":{"$ref":"#/definitions/v1VsphereMachinePoolConfig"},"type":"array"}},"required":["clusterConfig","machinePoolConfig"],"type":"object"},"v1VsphereCloudConfigStatus":{"description":"VsphereCloudConfigStatus defines the observed state of VsphereCloudConfig","properties":{"ansibleDigest":{"type":"string"},"conditions":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"},"isAddonLayer":{"description":"addon layers present in spc","type":"boolean"},"lastOVACreated":{"type":"string"},"lastVMExported":{"type":"string"},"nodeImage":{"$ref":"#/definitions/v1VsphereImage"},"roleDigest":{"additionalProperties":{"type":"string"},"description":"this map will be for ansible roles present in eack pack","type":"object"},"sourceImageId":{"description":"sourceImageId, it can be from packref's annotations or from pack.json","type":"string"},"uploadOvaS3":{"description":"UploadOVAS3 will hold last image name which uploaded to S3","type":"string"},"useCapiImage":{"description":"If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add","type":"boolean"}},"type":"object"},"v1VsphereCloudDatacenter":{"description":"Vsphere datacenter","properties":{"computeClusters":{"items":{"$ref":"#/definitions/v1VsphereComputeCluster"},"type":"array"},"folders":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"}},"type":"object"},"v1VsphereClusterConfig":{"properties":{"controlPlaneEndpoint":{"$ref":"#/definitions/v1ControlPlaneEndPoint","description":"The optional control plane endpoint, which can be an IP or FQDN"},"ntpServers":{"description":"NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.","items":{"type":"string"},"type":"array"},"placement":{"$ref":"#/definitions/v1VspherePlacementConfig","description":"Placement configuration Placement config in ClusterConfig serve as default values for each MachinePool"},"sshKeys":{"description":"SSHKeys specifies a list of ssh authorized keys for the 'spectro' user","items":{"type":"string"},"type":"array"},"staticIp":{"description":"whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name","type":"boolean"}},"required":["placement"],"type":"object"},"v1VsphereClusterConfigEntity":{"properties":{"controlPlaneEndpoint":{"$ref":"#/definitions/v1ControlPlaneEndPoint","description":"The optional control plane endpoint, which can be an IP or FQDN"},"ntpServers":{"description":"NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.","items":{"type":"string"},"type":"array"},"placement":{"$ref":"#/definitions/v1VspherePlacementConfigEntity","description":"Placement configuration Placement config in ClusterConfig serve as default values for each MachinePool"},"sshKeys":{"description":"SSHKeys specifies a list of ssh authorized keys for the 'spectro' user","items":{"type":"string"},"type":"array"},"staticIp":{"description":"whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name","type":"boolean"}},"required":["placement"],"type":"object"},"v1VsphereComputeCluster":{"description":"Vsphere compute cluster","properties":{"datastores":{"items":{"type":"string"},"type":"array","uniqueItems":true},"name":{"type":"string"},"networks":{"items":{"type":"string"},"type":"array","uniqueItems":true},"resourcePools":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1VsphereComputeClusterResources":{"description":"Datacenter and its resources like datastore, resoucepool, folders","properties":{"computecluster":{"$ref":"#/definitions/v1VsphereComputeCluster"},"datacenter":{"description":"Name of the datacenter","type":"string"}},"type":"object"},"v1VsphereDatacenter":{"description":"List of Datacenter with computeclusters","properties":{"computeclusters":{"description":"List of the VSphere compute clusters in datacenter","items":{"type":"string"},"type":"array","uniqueItems":true},"datacenter":{"description":"name of the datacenter of the VSphere","type":"string"},"folders":{"description":"List of the VSphere folders in datacenter","items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1VsphereDatacenters":{"description":"List of Datacenters with computeclusters","properties":{"items":{"description":"List of associated datacenters","items":{"$ref":"#/definitions/v1VsphereDatacenter"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1VsphereDnsMapping":{"description":"VSphere DNS Mapping","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1VsphereDnsMappingSpec"}},"type":"object"},"v1VsphereDnsMappingSpec":{"description":"VSphere DNS Mapping Spec","properties":{"datacenter":{"description":"VSphere datacenter name","type":"string"},"dnsName":{"description":"VSphere DNS name","type":"string"},"network":{"description":"VSphere network name","type":"string"},"networkUrl":{"description":"VSphere network URL","readOnly":true,"type":"string"},"privateGatewayUid":{"description":"VSphere private gateway uid","type":"string"}},"required":["privateGatewayUid","datacenter","network","dnsName"],"type":"object"},"v1VsphereDnsMappings":{"properties":{"items":{"description":"List of vSphere DNS mapping","items":{"$ref":"#/definitions/v1VsphereDnsMapping"},"type":"array","uniqueItems":true}},"required":["items"],"type":"object"},"v1VsphereEnv":{"description":"Vsphere environment entity","properties":{"version":{"description":"Version of vsphere environment","type":"string"}},"type":"object"},"v1VsphereImage":{"description":"A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack","properties":{"fullPath":{"description":"full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos","type":"string"},"state":{"type":"string"}},"type":"object"},"v1VsphereInstanceType":{"properties":{"diskGiB":{"description":"DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.","format":"int32","type":"integer"},"memoryMiB":{"description":"MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.","format":"int64","type":"integer"},"numCPUs":{"description":"NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.","format":"int32","type":"integer"}},"required":["numCPUs","memoryMiB","diskGiB"],"type":"object"},"v1VsphereMachine":{"description":"vSphere cloud VM definition","properties":{"apiVersion":{"description":"Deprecated. Not used for the resource info.","type":"string"},"kind":{"description":"Deprecated. Cloud type of the machine.","type":"string"},"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1VsphereMachineSpec"},"status":{"$ref":"#/definitions/v1CloudMachineStatus"}},"type":"object"},"v1VsphereMachinePoolCloudConfigEntity":{"properties":{"instanceType":{"$ref":"#/definitions/v1VsphereInstanceType"},"placements":{"description":"Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster","items":{"$ref":"#/definitions/v1VspherePlacementConfigEntity"},"type":"array"}}},"v1VsphereMachinePoolConfig":{"properties":{"additionalLabels":{"additionalProperties":{"type":"string"},"description":"additionalLabels","type":"object"},"additionalTags":{"additionalProperties":{"type":"string"},"description":"AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole","type":"object"},"instanceType":{"$ref":"#/definitions/v1VsphereInstanceType","description":"InstanceType defines the required CPU, Memory, Storage"},"isControlPlane":{"description":"whether this pool is for control plane","type":"boolean","x-omitempty":false},"labels":{"description":"labels for this pool, example: master/worker, gpu, windows","items":{"type":"string"},"type":"array"},"machinePoolProperties":{"$ref":"#/definitions/v1MachinePoolProperties"},"maxSize":{"description":"max size of the pool, for scaling","format":"int32","type":"integer"},"minSize":{"description":"min size of the pool, for scaling","format":"int32","type":"integer"},"name":{"type":"string"},"nodeRepaveInterval":{"description":"Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster","format":"int32","type":"integer"},"placements":{"description":"Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster","items":{"$ref":"#/definitions/v1VspherePlacementConfig"},"type":"array"},"size":{"description":"size of the pool, number of machines","format":"int32","type":"integer"},"taints":{"description":"master or worker taints","items":{"$ref":"#/definitions/v1Taint"},"type":"array","uniqueItems":true},"updateStrategy":{"$ref":"#/definitions/v1UpdateStrategy","description":"rolling update strategy for this machinepool if not specified, will use ScaleOut"},"useControlPlaneAsWorker":{"description":"if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove master taint this will not be used for worker pools","type":"boolean","x-omitempty":false}},"required":["isControlPlane","instanceType"],"type":"object"},"v1VsphereMachinePoolConfigEntity":{"properties":{"cloudConfig":{"$ref":"#/definitions/v1VsphereMachinePoolCloudConfigEntity"},"poolConfig":{"$ref":"#/definitions/v1MachinePoolConfigEntity"}},"required":["cloudConfig"],"type":"object"},"v1VsphereMachineSpec":{"description":"vSphere cloud VM definition spec","properties":{"images":{"items":{"$ref":"#/definitions/v1VsphereImage"},"type":"array"},"instanceType":{"$ref":"#/definitions/v1VsphereInstanceType"},"nics":{"items":{"$ref":"#/definitions/v1VsphereNic"},"type":"array"},"ntpServers":{"description":"NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.","items":{"type":"string"},"type":"array"},"placement":{"$ref":"#/definitions/v1VspherePlacementConfig","description":"Placement configuration"},"vcenterServer":{"description":"VcenterServer is the address of the vSphere endpoint","type":"string"}},"required":["vcenterServer","nics","placement"],"type":"object"},"v1VsphereMachines":{"description":"vSphere machine list","properties":{"items":{"items":{"$ref":"#/definitions/v1VsphereMachine"},"type":"array","uniqueItems":true},"listmeta":{"$ref":"#/definitions/v1ListMetaData"}},"required":["items"],"type":"object"},"v1VsphereNetworkConfig":{"properties":{"ipPool":{"$ref":"#/definitions/v1IPPool","description":"when staticIP=true, need to provide IPPool"},"networkName":{"description":"NetworkName is the name of the network in which VMs are created/located.","type":"string"},"parentPoolRef":{"$ref":"#/definitions/v1ObjectReference","description":"ParentPoolRef reference to the ParentPool which allocates IPs for this IPPool"},"staticIp":{"description":"support dhcp or static IP, if false, use DHCP","type":"boolean"}},"required":["networkName"],"type":"object"},"v1VsphereNetworkConfigEntity":{"properties":{"networkName":{"description":"NetworkName is the name of the network in which VMs are created/located.","type":"string"},"parentPoolUid":{"description":"ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool","type":"string"},"staticIp":{"description":"support dhcp or static IP, if false, use DHCP","type":"boolean"}},"required":["networkName"],"type":"object"},"v1VsphereNic":{"description":"vSphere network interface","properties":{"index":{"format":"int8","type":"integer"},"macAddress":{"type":"string"},"networkName":{"type":"string"},"privateIPs":{"items":{"type":"string"},"type":"array"}},"required":["networkName"],"type":"object"},"v1VsphereOverlordClusterConfigEntity":{"properties":{"controlPlaneEndpoint":{"$ref":"#/definitions/v1ControlPlaneEndPoint","description":"The optional control plane endpoint, which can be an IP or FQDN"},"ntpServers":{"description":"NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.","items":{"type":"string"},"type":"array"},"placements":{"description":"Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster","items":{"$ref":"#/definitions/v1VspherePlacementConfigEntity"},"type":"array"},"sshKeys":{"description":"SSHKeys specifies a list of ssh authorized keys for the 'spectro' user","items":{"type":"string"},"type":"array"},"staticIp":{"description":"whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name","type":"boolean"}},"type":"object"},"v1VspherePlacementConfig":{"description":"Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool","properties":{"cluster":{"description":"Cluster is the computecluster in vsphere","type":"string"},"datacenter":{"description":"Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.","type":"string"},"datastore":{"description":"Datastore is the datastore in which VMs are created/located.","type":"string"},"folder":{"description":"Folder is the folder in which VMs are created/located.","type":"string"},"imageTemplateFolder":{"description":"ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates","type":"string"},"network":{"$ref":"#/definitions/v1VsphereNetworkConfig","description":"network info"},"resourcePool":{"description":"ResourcePool is the resource pool within the above computecluster Cluster","type":"string"},"storagePolicyName":{"description":"StoragePolicyName of the storage policy to use with this Virtual Machine","type":"string"},"uid":{"description":"UID for this placement","type":"string"}},"type":"object"},"v1VspherePlacementConfigEntity":{"description":"Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool","properties":{"cluster":{"description":"Cluster is the computecluster in vsphere","type":"string"},"datacenter":{"description":"Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.","type":"string"},"datastore":{"description":"Datastore is the datastore in which VMs are created/located.","type":"string"},"folder":{"description":"Folder is the folder in which VMs are created/located.","type":"string"},"imageTemplateFolder":{"description":"ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates","type":"string"},"network":{"$ref":"#/definitions/v1VsphereNetworkConfigEntity","description":"network info"},"resourcePool":{"description":"ResourcePool is the resource pool within the above computecluster Cluster","type":"string"},"storagePolicyName":{"description":"StoragePolicyName of the storage policy to use with this Virtual Machine","type":"string"},"uid":{"description":"UID for this placement","type":"string"}},"type":"object"},"v1Workspace":{"description":"Workspace information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1WorkspaceSpec"},"status":{"$ref":"#/definitions/v1WorkspaceStatus"}}},"v1WorkspaceBackup":{"description":"Workspace backup","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1WorkspaceBackupSpec"},"status":{"$ref":"#/definitions/v1WorkspaceBackupStatus"}}},"v1WorkspaceBackupClusterRef":{"description":"Workspace backup cluster ref","properties":{"backupName":{"type":"string"},"clusterUid":{"type":"string"}}},"v1WorkspaceBackupConfig":{"description":"Workspace backup config","properties":{"backupConfig":{"$ref":"#/definitions/v1ClusterBackupConfig"},"clusterUids":{"items":{"type":"string"},"type":"array","uniqueItems":true},"includeAllClusters":{"type":"boolean"}}},"v1WorkspaceBackupConfigEntity":{"description":"Cluster backup config","properties":{"backupConfig":{"$ref":"#/definitions/v1ClusterBackupConfig"},"clusterUids":{"items":{"type":"string"},"type":"array","uniqueItems":true},"includeAllClusters":{"type":"boolean"}}},"v1WorkspaceBackupDeleteEntity":{"description":"Cluster backup delete config","properties":{"clusterConfigs":{"items":{"$ref":"#/definitions/v1WorkspaceBackupClusterRef"},"type":"array","uniqueItems":true},"requestUid":{"type":"string"}}},"v1WorkspaceBackupSpec":{"description":"Workspace backup spec","properties":{"config":{"$ref":"#/definitions/v1WorkspaceBackupConfig"},"workspaceUid":{"type":"string"}}},"v1WorkspaceBackupState":{"description":"Workspace backup state","properties":{"deleteState":{"type":"string"},"state":{"type":"string"}}},"v1WorkspaceBackupStatus":{"description":"Workspace backup status","properties":{"workspaceBackupStatuses":{"items":{"$ref":"#/definitions/v1WorkspaceBackupStatusMeta"},"type":"array"}}},"v1WorkspaceBackupStatusConfig":{"description":"Workspace backup status config","properties":{"backupName":{"type":"string"},"durationInHours":{"format":"int64","type":"number"},"includeAllDisks":{"type":"boolean"},"includeClusterResources":{"type":"boolean"},"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1WorkspaceBackupStatusMeta":{"description":"Workspace backup status meta","properties":{"actor":{"$ref":"#/definitions/v1ClusterFeatureActor"},"requestUid":{"type":"string"},"workspaceBackupConfig":{"$ref":"#/definitions/v1WorkspaceClusterBackupConfig"}}},"v1WorkspaceClusterBackupConfig":{"description":"Workspace cluster backup config","properties":{"backupName":{"type":"string"},"backupState":{"$ref":"#/definitions/v1WorkspaceBackupState"},"backupTime":{"$ref":"#/definitions/v1Time"},"clusterBackupRefs":{"items":{"$ref":"#/definitions/v1WorkspaceClusterBackupResponse"},"type":"array"},"config":{"$ref":"#/definitions/v1WorkspaceBackupStatusConfig"},"requestTime":{"$ref":"#/definitions/v1Time"}}},"v1WorkspaceClusterBackupResponse":{"description":"Workspace cluster backup response","properties":{"backupStatusMeta":{"$ref":"#/definitions/v1BackupStatusMeta"},"backupUid":{"type":"string"},"clusterName":{"type":"string"},"clusterUid":{"type":"string"}}},"v1WorkspaceClusterNamespace":{"description":"Workspace cluster namespace","properties":{"image":{"$ref":"#/definitions/v1WorkspaceNamespaceImage"},"isRegex":{"type":"boolean","x-omitempty":false},"name":{"type":"string"},"namespaceResourceAllocation":{"$ref":"#/definitions/v1WorkspaceNamespaceResourceAllocation"}}},"v1WorkspaceClusterNamespacesEntity":{"description":"Workspace cluster namespaces update entity","properties":{"clusterNamespaces":{"items":{"$ref":"#/definitions/v1WorkspaceClusterNamespace"},"type":"array","uniqueItems":true},"clusterRefs":{"items":{"$ref":"#/definitions/v1WorkspaceClusterRef"},"type":"array","uniqueItems":true},"quota":{"$ref":"#/definitions/v1WorkspaceQuota"}}},"v1WorkspaceClusterRef":{"description":"Workspace cluster reference","properties":{"clusterName":{"type":"string"},"clusterUid":{"type":"string"}}},"v1WorkspaceClusterRestoreConfig":{"description":"Workspace cluster restore config","properties":{"backupName":{"type":"string"},"clusterRestoreRefs":{"items":{"$ref":"#/definitions/v1WorkspaceClusterRestoreResponse"},"type":"array"},"restoreState":{"$ref":"#/definitions/v1WorkspaceRestoreState"},"restoreTime":{"$ref":"#/definitions/v1Time"}}},"v1WorkspaceClusterRestoreResponse":{"description":"Workspace cluster restore response","properties":{"backupName":{"type":"string"},"clusterName":{"type":"string"},"clusterUid":{"type":"string"},"restoreStatusMeta":{"$ref":"#/definitions/v1WorkspaceClusterRestoreState"},"restoreUid":{"type":"string"}}},"v1WorkspaceClusterRestoreState":{"description":"Workspace cluster restore state","properties":{"msg":{"type":"string"},"restoreTime":{"$ref":"#/definitions/v1Time"},"state":{"type":"string"}}},"v1WorkspaceClusterWorkloadCronJobs":{"description":"Workspace cluster workload cronjobs summary","properties":{"cronjobs":{"items":{"$ref":"#/definitions/v1ClusterWorkloadCronJob"},"type":"array"},"metadata":{"$ref":"#/definitions/v1RelatedObject"}},"type":"object"},"v1WorkspaceClusterWorkloadDaemonSets":{"description":"Workspace cluster workload daemonsets summary","properties":{"daemonSets":{"items":{"$ref":"#/definitions/v1ClusterWorkloadDaemonSet"},"type":"array"},"metadata":{"$ref":"#/definitions/v1RelatedObject"}},"type":"object"},"v1WorkspaceClusterWorkloadDeployments":{"description":"Workspace cluster workload deployments summary","properties":{"deployments":{"items":{"$ref":"#/definitions/v1ClusterWorkloadDeployment"},"type":"array"},"metadata":{"$ref":"#/definitions/v1RelatedObject"}},"type":"object"},"v1WorkspaceClusterWorkloadJobs":{"description":"Workspace cluster workload jobs summary","properties":{"jobs":{"items":{"$ref":"#/definitions/v1ClusterWorkloadJob"},"type":"array"},"metadata":{"$ref":"#/definitions/v1RelatedObject"}},"type":"object"},"v1WorkspaceClusterWorkloadNamespaces":{"description":"Workspace cluster workload namespaces summary","properties":{"metadata":{"$ref":"#/definitions/v1RelatedObject"},"namespaces":{"items":{"$ref":"#/definitions/v1ClusterWorkloadNamespace"},"type":"array"}},"type":"object"},"v1WorkspaceClusterWorkloadPods":{"description":"Workspace cluster workload pods summary","properties":{"metadata":{"$ref":"#/definitions/v1RelatedObject"},"pods":{"items":{"$ref":"#/definitions/v1ClusterWorkloadPod"},"type":"array"}},"type":"object"},"v1WorkspaceClusterWorkloadRoleBindings":{"description":"Workspace cluster workload rbac bindings summary","properties":{"bindings":{"items":{"$ref":"#/definitions/v1ClusterWorkloadRoleBinding"},"type":"array"},"metadata":{"$ref":"#/definitions/v1RelatedObject"}},"type":"object"},"v1WorkspaceClusterWorkloadStatefulSets":{"description":"Workspace cluster workload statefulsets summary","properties":{"metadata":{"$ref":"#/definitions/v1RelatedObject"},"statefulSets":{"items":{"$ref":"#/definitions/v1ClusterWorkloadStatefulSet"},"type":"array"}},"type":"object"},"v1WorkspaceClustersWorkloadCronJobs":{"description":"Workspace clusters workload cronjobs summary","properties":{"clusters":{"items":{"$ref":"#/definitions/v1WorkspaceClusterWorkloadCronJobs"},"type":"array"},"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"}},"type":"object"},"v1WorkspaceClustersWorkloadDaemonSets":{"description":"Workspace clusters workload statefulsets summary","properties":{"clusters":{"items":{"$ref":"#/definitions/v1WorkspaceClusterWorkloadDaemonSets"},"type":"array"},"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"}},"type":"object"},"v1WorkspaceClustersWorkloadDeployments":{"description":"Workspace clusters workload deployments summary","properties":{"clusters":{"items":{"$ref":"#/definitions/v1WorkspaceClusterWorkloadDeployments"},"type":"array"},"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"}},"type":"object"},"v1WorkspaceClustersWorkloadJobs":{"description":"Workspace clusters workload jobs summary","properties":{"clusters":{"items":{"$ref":"#/definitions/v1WorkspaceClusterWorkloadJobs"},"type":"array"},"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"}},"type":"object"},"v1WorkspaceClustersWorkloadNamespaces":{"description":"Workspace clusters workload namespaces summary","properties":{"clusters":{"items":{"$ref":"#/definitions/v1WorkspaceClusterWorkloadNamespaces"},"type":"array"},"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"}},"type":"object"},"v1WorkspaceClustersWorkloadPods":{"description":"Workspace clusters workload pods summary","properties":{"clusters":{"items":{"$ref":"#/definitions/v1WorkspaceClusterWorkloadPods"},"type":"array"},"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"}},"type":"object"},"v1WorkspaceClustersWorkloadRoleBindings":{"description":"Workspace clusters workload rbac bindings summary","properties":{"clusters":{"items":{"$ref":"#/definitions/v1WorkspaceClusterWorkloadRoleBindings"},"type":"array"},"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"}},"type":"object"},"v1WorkspaceClustersWorkloadStatefulSets":{"description":"Workspace clusters workload statefulsets summary","properties":{"clusters":{"items":{"$ref":"#/definitions/v1WorkspaceClusterWorkloadStatefulSets"},"type":"array"},"metadata":{"$ref":"#/definitions/v1ObjectMetaInputEntity"}},"type":"object"},"v1WorkspaceEntity":{"description":"Workspace information","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1WorkspaceSpec"}}},"v1WorkspaceError":{"description":"Workspace error","properties":{"clusterUid":{"type":"string"},"msg":{"type":"string"},"name":{"type":"string"},"resourceType":{"type":"string"}}},"v1WorkspaceNamespaceImage":{"description":"Workspace namespace image information","properties":{"blackListedImages":{"items":{"type":"string"},"type":"array","uniqueItems":true}}},"v1WorkspaceNamespaceResourceAllocation":{"description":"Workspace namespace resource allocation","properties":{"clusterResourceAllocations":{"items":{"$ref":"#/definitions/v1ClusterResourceAllocation"},"type":"array","uniqueItems":true},"defaultResourceAllocation":{"$ref":"#/definitions/v1WorkspaceResourceAllocation"}}},"v1WorkspacePolicies":{"description":"Workspace policies","properties":{"backupPolicy":{"$ref":"#/definitions/v1WorkspaceBackupConfigEntity"}}},"v1WorkspaceQuota":{"description":"Workspace resource quota","properties":{"resourceAllocation":{"$ref":"#/definitions/v1WorkspaceResourceAllocation"}}},"v1WorkspaceResourceAllocation":{"description":"Workspace resource allocation","properties":{"cpuCores":{"minimum":-1,"type":"number","x-omitempty":false},"memoryMiB":{"minimum":-1,"type":"number","x-omitempty":false}}},"v1WorkspaceResourceAllocationsEntity":{"description":"Workspace resource allocation update entity","properties":{"clusterNamespaces":{"items":{"$ref":"#/definitions/v1WorkspaceClusterNamespace"},"type":"array","uniqueItems":true},"clusterRefs":{"items":{"$ref":"#/definitions/v1WorkspaceClusterRef"},"type":"array","uniqueItems":true},"quota":{"$ref":"#/definitions/v1WorkspaceQuota"}}},"v1WorkspaceRestore":{"description":"Workspace restore","properties":{"metadata":{"$ref":"#/definitions/v1ObjectMeta"},"spec":{"$ref":"#/definitions/v1WorkspaceRestoreSpec"},"status":{"$ref":"#/definitions/v1WorkspaceRestoreStatus"}}},"v1WorkspaceRestoreConfig":{"description":"Workspace cluster restore config","properties":{"backupName":{"type":"string"},"includeClusterResources":{"type":"boolean"},"includeNamespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true},"preserveNodePorts":{"type":"boolean"},"restorePVs":{"type":"boolean"},"sourceClusterUid":{"type":"string"}},"required":["backupName","sourceClusterUid"]},"v1WorkspaceRestoreConfigEntity":{"description":"Cluster restore config","properties":{"backupRequestUid":{"type":"string"},"restoreConfigs":{"items":{"$ref":"#/definitions/v1WorkspaceRestoreConfig"},"type":"array","uniqueItems":true}},"required":["backupRequestUid"]},"v1WorkspaceRestoreSpec":{"description":"Workspace restore spec","properties":{"workspaceUid":{"type":"string"}}},"v1WorkspaceRestoreState":{"description":"Workspace restore state","properties":{"deleteState":{"type":"string"},"state":{"type":"string"}}},"v1WorkspaceRestoreStatus":{"description":"Workspace restore status","properties":{"workspaceRestoreStatuses":{"items":{"$ref":"#/definitions/v1WorkspaceRestoreStatusMeta"},"type":"array"}}},"v1WorkspaceRestoreStatusMeta":{"description":"Workspace restore status meta","properties":{"actor":{"$ref":"#/definitions/v1ClusterFeatureActor"},"requestUid":{"type":"string"},"workspaceRestoreConfig":{"$ref":"#/definitions/v1WorkspaceClusterRestoreConfig"}}},"v1WorkspaceRolesPatch":{"properties":{"roles":{"items":{"type":"string"},"type":"array"},"uid":{"type":"string"}},"type":"object"},"v1WorkspaceRolesUidSummary":{"properties":{"name":{"type":"string"},"uid":{"type":"string"}},"type":"object"},"v1WorkspaceScopeRoles":{"description":"List all workspaces with the roles assigned to the users","properties":{"projects":{"items":{"$ref":"#/definitions/v1ProjectsWorkspaces"},"type":"array","uniqueItems":true}}},"v1WorkspaceSpec":{"description":"Workspace specifications","properties":{"clusterNamespaces":{"items":{"$ref":"#/definitions/v1WorkspaceClusterNamespace"},"type":"array","uniqueItems":true},"clusterRbacs":{"items":{"$ref":"#/definitions/v1ClusterRbac"},"type":"array","uniqueItems":true},"clusterRefs":{"items":{"$ref":"#/definitions/v1WorkspaceClusterRef"},"type":"array","uniqueItems":true},"policies":{"$ref":"#/definitions/v1WorkspacePolicies"},"quota":{"$ref":"#/definitions/v1WorkspaceQuota"}}},"v1WorkspaceStatus":{"description":"Workspace status","properties":{"errors":{"items":{"$ref":"#/definitions/v1WorkspaceError"},"type":"array","uniqueItems":true}}},"v1WorkspaceWorkloadsFilter":{"description":"Workspace workloads filter","properties":{"clusters":{"items":{"type":"string"},"type":"array","uniqueItems":true},"namespaces":{"items":{"type":"string"},"type":"array","uniqueItems":true}},"type":"object"},"v1WorkspaceWorkloadsSpec":{"description":"Workspace workloads spec","properties":{"filter":{"$ref":"#/definitions/v1WorkspaceWorkloadsFilter"}},"type":"object"},"v1WorkspacesRoles":{"description":"Workspace users and their roles","properties":{"inheritedRoles":{"items":{"$ref":"#/definitions/v1WorkspaceRolesUidSummary"},"type":"array"},"name":{"type":"string"},"roles":{"items":{"$ref":"#/definitions/v1WorkspaceRolesUidSummary"},"type":"array"},"uid":{"type":"string"}}},"v1WorkspacesRolesPatch":{"properties":{"workspaces":{"items":{"$ref":"#/definitions/v1WorkspaceRolesPatch"},"type":"array"}},"type":"object"},"v1YearlyUsage":{"description":"Yearly usage object","properties":{"billingPeriod":{"$ref":"#/definitions/v1InvoiceBillingPeriod"},"monthlyUsages":{"description":"List of monthly usages","items":{"$ref":"#/definitions/v1MonthlyUsage"},"type":"array","uniqueItems":true},"productUsages":{"$ref":"#/definitions/v1ProductUsage"}}},"v1ZoneEntity":{"description":"Azure availability zone entity","properties":{"id":{"description":"Azure availability zone id","type":"string"}},"type":"object"}},"info":{"title":"Palette APIs - 4.3","version":"v1"},"paths":{"/cluster/{uid}/manifest":{"get":{"description":"Deprecated","operationId":"v1SpectroClustersUidInstallerManifest","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's installer manifest file","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/apiKeys":{"get":{"operationId":"v1ApiKeysList","responses":{"200":{"description":"Retrieves a list of API keys","schema":{"$ref":"#/definitions/v1ApiKeys"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of API keys","tags":["v1"]},"post":{"operationId":"v1ApiKeysCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ApiKeyEntity"}}],"responses":{"201":{"description":"APIKey Created successfully","schema":{"$ref":"#/definitions/v1ApiKeyCreateResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create an API key","tags":["v1"]}},"/v1/apiKeys/{uid}":{"delete":{"operationId":"v1ApiKeysUidDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified API key","tags":["v1"]},"get":{"operationId":"v1ApiKeysUidGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1ApiKey"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified API key","tags":["v1"]},"parameters":[{"description":"Specify API key uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1ApiKeysUidActiveState","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ApiKeyActiveState"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Activate or de-active the specified API key","tags":["v1"]},"put":{"operationId":"v1ApiKeysUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ApiKeyUpdate"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the specified API key","tags":["v1"]}},"/v1/apiKeys/{uid}/state":{"parameters":[{"description":"Specify API key uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ApiKeysUidState","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ApiKeyActiveState"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Revoke or re-activate the API key access","tags":["v1"]}},"/v1/appDeployments":{"post":{"operationId":"v1AppDeploymentsVirtualClusterCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppDeploymentVirtualClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a application deployment in the virtual cluster","tags":["v1"]}},"/v1/appDeployments/clusterGroup":{"post":{"operationId":"v1AppDeploymentsClusterGroupCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppDeploymentClusterGroupEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a application deployment in one of virtual clusters in the cluster group","tags":["v1"]}},"/v1/appDeployments/{uid}":{"delete":{"operationId":"v1AppDeploymentsUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified application deployment","tags":["v1"]},"get":{"operationId":"v1AppDeploymentsUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AppDeployment"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified application deployment","tags":["v1"]},"parameters":[{"description":"Application deployment uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/appDeployments/{uid}/profile":{"get":{"operationId":"v1AppDeploymentsUidProfileGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AppDeploymentProfileSpec"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns profile of the specified application deployment","tags":["v1"]},"parameters":[{"description":"Application deployment uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1AppDeploymentsUidProfileUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppDeploymentProfileEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified application deployment profile","tags":["v1"]}},"/v1/appDeployments/{uid}/profile/apply":{"parameters":[{"description":"Application deployment uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Application deployment notification uid","in":"query","name":"notify","type":"string"}],"patch":{"operationId":"v1AppDeploymentsUidProfileApply","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Apply the application deployment profile updates","tags":["v1"]}},"/v1/appDeployments/{uid}/profile/tiers/{tierUid}":{"get":{"operationId":"v1AppDeploymentsProfileTiersUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AppTier"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified application deployment profile tier information","tags":["v1"]},"parameters":[{"description":"Application deployment uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Application deployment tier uid","in":"path","name":"tierUid","required":true,"type":"string"}],"put":{"operationId":"v1AppDeploymentsProfileTiersUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppTierUpdateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified application deployment profile tier information","tags":["v1"]}},"/v1/appDeployments/{uid}/profile/tiers/{tierUid}/manifests":{"get":{"operationId":"v1AppDeploymentsProfileTiersUidManifestsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AppTierManifests"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of manifests of the specified application deployment profile tier","tags":["v1"]},"parameters":[{"description":"Application deployment uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Application deployment tier uid","in":"path","name":"tierUid","required":true,"type":"string"}]},"/v1/appDeployments/{uid}/profile/tiers/{tierUid}/manifests/{manifestUid}":{"get":{"operationId":"v1AppDeploymentsProfileTiersManifestsUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Manifest"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified application deployment tier manifest information","tags":["v1"]},"parameters":[{"description":"Application deployment uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Application deployment tier uid","in":"path","name":"tierUid","required":true,"type":"string"},{"description":"Application deployment tier manifest uid","in":"path","name":"manifestUid","required":true,"type":"string"}],"put":{"operationId":"v1AppDeploymentsProfileTiersManifestsUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ManifestRefUpdateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified application deployment tier manifest information","tags":["v1"]}},"/v1/appDeployments/{uid}/profile/versions":{"get":{"operationId":"v1AppDeploymentsUidProfileVersionsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AppDeploymentProfileVersions"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of profile versions of the specified application deployment","tags":["v1"]},"parameters":[{"description":"Application deployment uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/appProfiles":{"post":{"operationId":"v1AppProfilesCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppProfileEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a application profile","tags":["v1"]}},"/v1/appProfiles/macros":{"get":{"operationId":"v1AppProfilesMacrosList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Macros"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of application profile macros","tags":["v1"]}},"/v1/appProfiles/{uid}":{"delete":{"operationId":"v1AppProfilesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified application profile","tags":["v1"]},"get":{"operationId":"v1AppProfilesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AppProfile"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified application profile","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1AppProfilesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppProfileEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified application profile","tags":["v1"]}},"/v1/appProfiles/{uid}/clone":{"parameters":[{"description":"Application profile uid","in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1AppProfilesUidClone","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppProfileCloneEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Clones the specified application profile","tags":["v1"]}},"/v1/appProfiles/{uid}/clone/validate":{"parameters":[{"description":"Application profile uid","in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1AppProfilesUidCloneValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppProfileCloneMetaInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates the specified application profile clone","tags":["v1"]}},"/v1/appProfiles/{uid}/metadata":{"parameters":[{"description":"Application profile uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1AppProfilesUidMetadataUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppProfileMetaEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified application profile metadata","tags":["v1"]}},"/v1/appProfiles/{uid}/tiers":{"get":{"operationId":"v1AppProfilesUidTiersGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AppProfileTiers"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of tiers of the specified application profile","tags":["v1"]},"parameters":[{"description":"Application profile uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1AppProfilesUidTiersPatch","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppTierPatchEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates app tier of the specified application profile","tags":["v1"]},"post":{"operationId":"v1AppProfilesUidTiersCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppTierEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds tier to the specified application profile","tags":["v1"]}},"/v1/appProfiles/{uid}/tiers/{tierUid}":{"delete":{"operationId":"v1AppProfilesUidTiersUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified application profile tier","tags":["v1"]},"get":{"operationId":"v1AppProfilesUidTiersUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AppTier"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified application profile tier information","tags":["v1"]},"parameters":[{"description":"Application profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Application profile tier uid","in":"path","name":"tierUid","required":true,"type":"string"}],"put":{"operationId":"v1AppProfilesUidTiersUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppTierUpdateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified application profile tier","tags":["v1"]}},"/v1/appProfiles/{uid}/tiers/{tierUid}/manifests":{"get":{"operationId":"v1AppProfilesUidTiersUidManifestsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AppTierManifests"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of manifests of the specified application profile tier","tags":["v1"]},"parameters":[{"description":"Application profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Application profile tier uid","in":"path","name":"tierUid","required":true,"type":"string"}],"post":{"operationId":"v1AppProfilesUidTiersUidManifestsCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ManifestInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds manifest to the specified application profile tier","tags":["v1"]}},"/v1/appProfiles/{uid}/tiers/{tierUid}/manifests/{manifestUid}":{"delete":{"operationId":"v1AppProfilesUidTiersUidManifestsUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified application profile tier manifest","tags":["v1"]},"get":{"operationId":"v1AppProfilesUidTiersUidManifestsUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Manifest"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified application profile tier manifest information","tags":["v1"]},"parameters":[{"description":"Application profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Application profile tier uid","in":"path","name":"tierUid","required":true,"type":"string"},{"description":"Application profile tier manifest uid","in":"path","name":"manifestUid","required":true,"type":"string"}],"put":{"operationId":"v1AppProfilesUidTiersUidManifestsUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ManifestRefUpdateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified application profile tier manifest information","tags":["v1"]}},"/v1/appProfiles/{uid}/tiers/{tierUid}/resolvedValues":{"get":{"operationId":"v1AppProfilesUidTiersUidResolvedValuesGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AppTierResolvedValues"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified application profile tier resolved values","tags":["v1"]},"parameters":[{"description":"Application profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Application profile tier uid","in":"path","name":"tierUid","required":true,"type":"string"}]},"/v1/audits":{"get":{"operationId":"v1AuditsList","parameters":[{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","format":"date-time","in":"query","name":"startTime","type":"string"},{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","format":"date-time","in":"query","name":"endTime","type":"string"},{"description":"Specify the user uid, to retrieve the specific user audit logs","in":"query","name":"userUid","type":"string"},{"description":"Specify the project uid, to retrieve the specific project audit logs","in":"query","name":"projectUid","type":"string"},{"description":"Specify the tenant uid, to retrieve the specific tenant audit logs","in":"query","name":"tenantUid","type":"string"},{"description":"Specify the resource name, to retrieve the specific resource audit logs","in":"query","name":"resourceKind","type":"string"},{"description":"Specify the resource uid, to retrieve the specific resource audit logs","in":"query","name":"resourceUid","type":"string"},{"enum":["create","update","delete","publish","deploy"],"in":"query","name":"actionType","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1Audits"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves the list of audit logs","tags":["v1"]}},"/v1/audits/{uid}":{"get":{"operationId":"v1AuditsUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1Audit"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified audit log","tags":["v1"]},"parameters":[{"description":"Specify the audit uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/audits/{uid}/sysMsg":{"get":{"operationId":"v1AuditsUidGetSysMsg","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AuditSysMsg"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified system audit message","tags":["v1"]},"parameters":[{"description":"Specify the audit uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/audits/{uid}/userMsg":{"parameters":[{"description":"Specify the audit uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1AuditsUidMsgUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AuditMsgUpdate"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified user message for the specified audit","tags":["v1"]}},"/v1/auth/authenticate":{"post":{"description":"Creates a authentication request with the specified credentials","operationId":"v1Authenticate","parameters":[{"default":true,"description":"Describes a way to set cookie from backend.","in":"query","name":"setCookie","type":"boolean"},{"description":"Describes the credential details required for authentication","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1AuthLogin"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UserToken"}}},"summary":"Authenticates the user for the specified crendentials","tags":["v1"]}},"/v1/auth/org":{"get":{"description":"Returns the allowed login method and information with the organization details","operationId":"v1AuthOrg","parameters":[{"in":"query","name":"orgName","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1LoginResponse"}}},"summary":"Returns the user organization details","tags":["v1"]}},"/v1/auth/org/{orgName}/switch":{"post":{"description":"Creates a request to switch to the same user's other organization. Only possible if user belongs to multiple organization","operationId":"V1AuthOrgSwitch","parameters":[{"default":true,"description":"Describes a way to set cookie from backend for switched organization","in":"query","name":"setCookie","type":"boolean"},{"description":"Organization name for which switch request has to be created","in":"path","name":"orgName","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UserToken"}}},"summary":"Creates a request to switch organization","tags":["v1"]}},"/v1/auth/org/{org}/oidc/callback":{"get":{"description":"Returns the Authorization token for the palette. This is called by the IDP as a callback url after IDP authenticates the user with its server.","operationId":"V1OidcCallback","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UserToken"}}},"summary":"Idp authorization code callback","tags":["v1"]},"parameters":[{"description":"Organization name","in":"path","name":"org","required":true,"type":"string"},{"description":"Describes temporary and very short lived code sent by IDP to validate the token","in":"query","name":"code","type":"string"},{"description":"Describes a state to validate and associate request and response","in":"query","name":"state","type":"string"},{"description":"Describes a error code in case the IDP is not able to validate and authenticates the user","in":"query","name":"error","type":"string"},{"description":"Describes a error in case the IDP is not able to validate and authenticates the user","in":"query","name":"error_description","type":"string"}]},"/v1/auth/org/{org}/oidc/logout":{"get":{"description":"Returns No Content. Works as a callback url after the IDP logout from their server.","operationId":"V1OidcLogout","responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"summary":"Identity provider logout url for the Oidc","tags":["v1"]},"parameters":[{"description":"Organization name","in":"path","name":"org","required":true,"type":"string"},{"description":"Describes a state to validate and associate request and response","in":"query","name":"state","type":"string"}]},"/v1/auth/org/{org}/saml/callback":{"parameters":[{"description":"Organization name","in":"path","name":"org","required":true,"type":"string"},{"description":"Deprecated.","in":"query","name":"authToken","type":"string"}],"post":{"consumes":["application/x-www-form-urlencoded"],"description":"Returns the Authorization token for the palette. This is called by the SAML based IDP as a callback url after IDP authenticates the user with its server.","operationId":"V1SamlCallback","parameters":[{"description":"Describe the SAML compliant response sent by IDP which will be validated by Palette","in":"formData","name":"SAMLResponse","type":"string"},{"description":"Describes a state to validate and associate request and response","in":"formData","name":"RelayState","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UserToken"}}},"summary":"Identity provider callback url for the SMAL authentication","tags":["v1"]}},"/v1/auth/org/{org}/saml/logout":{"parameters":[{"description":"Organization name","in":"path","name":"org","required":true,"type":"string"},{"description":"Deprecated.","in":"query","name":"authToken","type":"string"}],"post":{"consumes":["application/x-www-form-urlencoded"],"description":"Returns No Content. Works as a callback url after the IDP logout from their server.","operationId":"V1SamlLogout","parameters":[{"description":"Describe the SAML compliant response sent by IDP which will be validated by Palette to perform logout.","in":"formData","name":"SAMLResponse","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"summary":"Identity provider logout url for the SMAL","tags":["v1"]}},"/v1/auth/orgs":{"get":{"description":"Returns a list of user's organizations details and login methods","operationId":"V1AuthOrgs","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Organizations"}}},"summary":"Returns a list of user's organizations","tags":["v1"]}},"/v1/auth/password/{passwordToken}/activate":{"parameters":[{"description":"Describes the expirable password token for the user to be used for authentication of user","in":"path","name":"passwordToken","required":true,"type":"string"}],"patch":{"description":"Updates and Activates user password with the help of password token","operationId":"v1PasswordActivate","parameters":[{"in":"body","name":"body","required":true,"schema":{"properties":{"password":{"description":"Describes the new password for the user","format":"password","type":"string"}},"required":["password"],"type":"object"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"summary":"Updates and Activates the specified user password using the password token","tags":["v1"]}},"/v1/auth/password/{passwordToken}/reset":{"parameters":[{"description":"Describes the expirable password token for the user to be used for authentication of user","in":"path","name":"passwordToken","required":true,"type":"string"}],"patch":{"description":"Updates the new user password with the help of password token","operationId":"v1PasswordReset","parameters":[{"in":"body","name":"body","required":true,"schema":{"properties":{"password":{"description":"Describes the new password for the user","format":"password","type":"string"}},"required":["password"],"type":"object"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"summary":"Resets the user password using the password token","tags":["v1"]}},"/v1/auth/refresh/{token}":{"get":{"description":"Returns a new token within refresh timeout and same session id is maintained","operationId":"v1AuthRefresh","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UserToken"}}},"summary":"Refreshes authentication token","tags":["v1"]},"parameters":[{"default":true,"description":"Describes a way to set cookie from backend.","in":"query","name":"setCookie","type":"boolean"},{"description":"Non expired Authorization token","in":"path","name":"token","required":true,"type":"string"}]},"/v1/auth/sso/idps":{"get":{"description":"Returns a list of predefined Identity Provider (IDP)","operationId":"V1SsoIdps","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1IdentityProviders"}}},"summary":"Returns a list of predefined Identity Provider (IDP)","tags":["v1"]}},"/v1/auth/sso/logins":{"get":{"description":"Returns a list of supported sso logins and their authentication mechanism","operationId":"V1SsoLogins","parameters":[{"in":"query","name":"org","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1SsoLogins"}}},"summary":"Returns a list of supported sso logins","tags":["v1"]}},"/v1/auth/sso/providers":{"get":{"description":"Returns a list of supported sso auth providers","operationId":"V1AuthSsoProviders","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1SsoLogins"}}},"summary":"Returns a list of supported sso auth providers","tags":["v1"]}},"/v1/auth/sso/{ssoApp}/callback":{"get":{"description":"Returns Authorization token. Works as a callback url for the system defined sso apps","operationId":"V1SsoCallback","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UserToken"}}},"summary":"Returns Authorization token. Works as a callback url for the system defined sso apps","tags":["v1"]},"parameters":[{"description":"Describes the sso app use to login into the system","in":"path","name":"ssoApp","required":true,"type":"string"},{"description":"Describes temporary and very short lived code sent by IDP to validate the token","in":"query","name":"code","type":"string"},{"description":"Describes a state to validate and associate request and response","in":"query","name":"state","type":"string"},{"description":"Describes a error code in case the IDP is not able to validate and authenticates the user","in":"query","name":"error","type":"string"},{"description":"Describes a error in case the IDP is not able to validate and authenticates the user","in":"query","name":"error_description","type":"string"}]},"/v1/auth/user/org/forgot":{"get":{"description":"Returns No Content. Sends the user organization(s) information via email","operationId":"V1AuthUserOrgForgot","parameters":[{"description":"Describes user's email id for sending organzation(s) details via email.","in":"query","name":"emailId","required":true,"type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"summary":"Returns No Content. Sends the user organization information via email","tags":["v1"]}},"/v1/auth/user/password/reset":{"post":{"description":"Creates request to reset password via email. Password reset email will be sent to the user. Sends 204 No Content.","operationId":"v1PasswordResetRequest","parameters":[{"in":"body","name":"body","required":true,"schema":{"properties":{"emailId":{"description":"Describes email if for which password reset email has to be sent","type":"string"}},"required":["emailId"],"type":"object"}}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"summary":"Creates request to reset password via email","tags":["v1"]}},"/v1/cloudaccounts/aws":{"get":{"operationId":"v1CloudAccountsAwsList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cloud account items","schema":{"$ref":"#/definitions/v1AwsAccounts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AWS cloud accounts","tags":["v1"]},"post":{"operationId":"v1CloudAccountsAwsCreate","parameters":[{"description":"Request payload to validate AWS cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1AwsAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an AWS cloud account","tags":["v1"]}},"/v1/cloudaccounts/aws/{uid}":{"delete":{"operationId":"v1CloudAccountsAwsDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified AWS account","tags":["v1"]},"get":{"operationId":"v1CloudAccountsAwsGet","parameters":[{"default":false,"in":"query","name":"assumeCredentials","type":"boolean"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AwsAccount"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified AWS account","tags":["v1"]},"parameters":[{"description":"AWS cloud account uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1CloudAccountsAwsUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AwsAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified AWS account","tags":["v1"]}},"/v1/cloudaccounts/azure":{"get":{"operationId":"v1CloudAccountsAzureList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of azure cloud account items","schema":{"$ref":"#/definitions/v1AzureAccounts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of azure cloud accounts","tags":["v1"]},"post":{"operationId":"v1CloudAccountsAzureCreate","parameters":[{"description":"Request payload to validate Azure cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create azure cloud account","tags":["v1"]}},"/v1/cloudaccounts/azure/{uid}":{"delete":{"operationId":"v1CloudAccountsAzureDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified azure account","tags":["v1"]},"get":{"operationId":"v1CloudAccountsAzureGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AzureAccount"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified azure cloud account","tags":["v1"]},"parameters":[{"description":"Azure cloud account uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1CloudAccountsAzureUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified azure account","tags":["v1"]}},"/v1/cloudaccounts/cloudTypes/{cloudType}":{"get":{"operationId":"v1CloudAccountsCustomList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cloud account by specified cloud type items","schema":{"$ref":"#/definitions/v1CustomAccounts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cloud accounts by cloud type","tags":["v1"]},"parameters":[{"description":"Custom cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"post":{"operationId":"v1CloudAccountsCustomCreate","parameters":[{"description":"Request payload to validate Custom cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1CustomAccountEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an cloud account of specific cloud type","tags":["v1"]}},"/v1/cloudaccounts/cloudTypes/{cloudType}/{uid}":{"delete":{"operationId":"v1CloudAccountsCustomDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified account by cloud type","tags":["v1"]},"get":{"operationId":"v1CloudAccountsCustomGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1CustomAccount"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified account by cloud type","tags":["v1"]},"parameters":[{"description":"Custom cloud account uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Custom cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"operationId":"v1CloudAccountsCustomUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CustomAccountEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified account by cloud type","tags":["v1"]}},"/v1/cloudaccounts/coxedge":{"get":{"operationId":"v1CloudAccountsCoxEdgeList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cloud account items","schema":{"$ref":"#/definitions/v1CoxEdgeAccounts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of CoxEdge cloud accounts","tags":["v1"]},"post":{"operationId":"v1CloudAccountsCoxEdgeCreate","parameters":[{"description":"Request payload to validate CoxEdge cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1CoxEdgeAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an CoxEdge cloud account","tags":["v1"]}},"/v1/cloudaccounts/coxedge/{uid}":{"delete":{"operationId":"v1CloudAccountsCoxEdgeDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified CoxEdge account","tags":["v1"]},"get":{"operationId":"v1CloudAccountsCoxEdgeGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1CoxEdgeAccount"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified CoxEdge account","tags":["v1"]},"parameters":[{"description":"CoxEdge cloud account uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1CloudAccountsCoxEdgeUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CoxEdgeAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified CoxEdge account","tags":["v1"]}},"/v1/cloudaccounts/gcp":{"get":{"operationId":"v1CloudAccountsGcpList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of gcp cloud account items","schema":{"$ref":"#/definitions/v1GcpAccounts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of gcp cloud accounts","tags":["v1"]},"post":{"operationId":"v1CloudAccountsGcpCreate","parameters":[{"description":"Request payload to validate GCP cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpAccountEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a GCP cloud account","tags":["v1"]}},"/v1/cloudaccounts/gcp/{uid}":{"delete":{"operationId":"v1CloudAccountsGcpDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified GCP account","tags":["v1"]},"get":{"operationId":"v1CloudAccountsGcpGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1GcpAccount"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified GCP cloud account","tags":["v1"]},"parameters":[{"description":"GCP cloud account uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1CloudAccountsGcpUpdate","parameters":[{"description":"Request payload to validate GCP cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpAccountEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified GCP account","tags":["v1"]}},"/v1/cloudaccounts/maas":{"get":{"operationId":"v1CloudAccountsMaasList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cloud account items","schema":{"$ref":"#/definitions/v1MaasAccounts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Maas cloud accounts","tags":["v1"]},"post":{"operationId":"v1CloudAccountsMaasCreate","parameters":[{"description":"Request payload to validate Maas cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1MaasAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an Maas cloud account","tags":["v1"]}},"/v1/cloudaccounts/maas/{uid}":{"delete":{"operationId":"v1CloudAccountsMaasDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified Maas account","tags":["v1"]},"get":{"operationId":"v1CloudAccountsMaasGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1MaasAccount"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Maas account","tags":["v1"]},"parameters":[{"description":"Maas cloud account uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1CloudAccountsMaasPatch","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CloudAccountsPatch"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Patches the specified CloudAccount Maas","tags":["v1"]},"put":{"operationId":"v1CloudAccountsMaasUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1MaasAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified Maas account","tags":["v1"]}},"/v1/cloudaccounts/maas/{uid}/properties/azs":{"get":{"operationId":"v1MaasAccountsUidAzs","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1MaasZones"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the maas azs for a given account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/maas/{uid}/properties/domains":{"get":{"operationId":"v1MaasAccountsUidDomains","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1MaasDomains"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the maas domains for a given account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/maas/{uid}/properties/resourcePools":{"get":{"operationId":"v1MaasAccountsUidPools","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1MaasPools"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the maas pools for a given account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/maas/{uid}/properties/subnets":{"get":{"operationId":"v1MaasAccountsUidSubnets","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1MaasSubnets"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the maas subnets for a given account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/maas/{uid}/properties/tags":{"get":{"operationId":"v1MaasAccountsUidTags","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1MaasTags"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the maas tags for a given account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/openstack":{"get":{"operationId":"v1CloudAccountsOpenStackList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cloud account items","schema":{"$ref":"#/definitions/v1OpenStackAccounts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of OpenStack cloud accounts","tags":["v1"]},"post":{"operationId":"v1CloudAccountsOpenStackCreate","parameters":[{"description":"Request payload to validate OpenStack cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1OpenStackAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a OpenStack cloud account","tags":["v1"]}},"/v1/cloudaccounts/openstack/{uid}":{"delete":{"operationId":"v1CloudAccountsOpenStackDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified OpenStack account","tags":["v1"]},"get":{"operationId":"v1CloudAccountsOpenStackGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1OpenStackAccount"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified OpenStack account","tags":["v1"]},"parameters":[{"description":"OpenStack cloud account uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1CloudAccountsOpenStackUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OpenStackAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified OpenStack account","tags":["v1"]}},"/v1/cloudaccounts/openstack/{uid}/properties/azs":{"get":{"operationId":"v1OpenstackAccountsUidAzs","parameters":[{"in":"query","name":"region","type":"string"},{"in":"query","name":"project","type":"string"},{"in":"query","name":"domain","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackAzs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the openstack azs for a given account and region","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/openstack/{uid}/properties/flavors":{"get":{"operationId":"v1OpenstackAccountsUidFlavors","parameters":[{"in":"query","name":"project","type":"string"},{"in":"query","name":"region","type":"string"},{"in":"query","name":"domain","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackFlavors"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the openstack keypairs for a given account and scope","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/openstack/{uid}/properties/keypairs":{"get":{"operationId":"v1OpenstackAccountsUidKeypairs","parameters":[{"in":"query","name":"project","type":"string"},{"in":"query","name":"region","type":"string"},{"in":"query","name":"domain","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackKeypairs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the openstack keypairs for a given account and scope","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/openstack/{uid}/properties/networks":{"get":{"operationId":"v1OpenstackAccountsUidNetworks","parameters":[{"in":"query","name":"project","type":"string"},{"in":"query","name":"region","type":"string"},{"in":"query","name":"domain","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackNetworks"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the openstack networks for a given account and scope","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/openstack/{uid}/properties/projects":{"get":{"operationId":"v1OpenstackAccountsUidProjects","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackProjects"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the openstack projects for a given account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/openstack/{uid}/properties/regions":{"get":{"operationId":"v1OpenstackAccountsUidRegions","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackRegions"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the openstack regions for a given account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/summary":{"get":{"operationId":"v1CloudAccountsListSummary","parameters":[{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cloud account summary items","schema":{"$ref":"#/definitions/v1CloudAccountsSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cloud accounts summary","tags":["v1"]}},"/v1/cloudaccounts/tencent":{"get":{"operationId":"v1CloudAccountsTencentList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cloud account items","schema":{"$ref":"#/definitions/v1TencentAccounts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Tencent cloud accounts","tags":["v1"]},"post":{"operationId":"v1CloudAccountsTencentCreate","parameters":[{"description":"Request payload to validate Tencent cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1TencentAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an Tencent cloud account","tags":["v1"]}},"/v1/cloudaccounts/tencent/{uid}":{"delete":{"operationId":"v1CloudAccountsTencentDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified Tencent account","tags":["v1"]},"get":{"operationId":"v1CloudAccountsTencentGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TencentAccount"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Tencent account","tags":["v1"]},"parameters":[{"description":"Tencent cloud account uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1CloudAccountsTencentUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TencentAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified Tencent account","tags":["v1"]}},"/v1/cloudaccounts/vsphere":{"get":{"operationId":"v1CloudAccountsVsphereList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cloud account items","schema":{"$ref":"#/definitions/v1VsphereAccounts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of vSphere cloud accounts","tags":["v1"]},"post":{"operationId":"v1CloudAccountsVsphereCreate","parameters":[{"description":"Request payload to validate VSphere cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1VsphereAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a vSphere cloud account","tags":["v1"]}},"/v1/cloudaccounts/vsphere/{uid}":{"delete":{"operationId":"v1CloudAccountsVsphereDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified vSphere account","tags":["v1"]},"get":{"operationId":"v1CloudAccountsVsphereGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1VsphereAccount"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified vSphere account","tags":["v1"]},"parameters":[{"description":"VSphere cloud account uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1CloudAccountsVsphereUpdate","parameters":[{"description":"Request payload to validate VSphere cloud account","in":"body","name":"body","schema":{"$ref":"#/definitions/v1VsphereAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified VSphere account","tags":["v1"]}},"/v1/cloudaccounts/vsphere/{uid}/properties/computecluster/resources":{"get":{"operationId":"v1VsphereAccountsUidClusterRes","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VsphereComputeClusterResources"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the vSphere computecluster resources for the given overlord account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"query","name":"datacenter","required":true,"type":"string"},{"in":"query","name":"computecluster","required":true,"type":"string"},{"in":"query","name":"useQualifiedNetworkName","type":"boolean"}]},"/v1/cloudaccounts/vsphere/{uid}/properties/datacenters":{"get":{"operationId":"v1VsphereAccountsUidDatacenters","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VsphereDatacenters"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the vSphere datacenters \u0026 datacluster for the given overlord account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/cloudaccounts/{uid}/geoLocation":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1AccountsGeolocationPatch","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1GeolocationLatlong"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the geolocation annotation","tags":["v1"]}},"/v1/cloudconfigs/aks/{configUid}":{"get":{"operationId":"v1CloudConfigsAksGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AzureCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified AKS cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/aks/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsAksUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/aks/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsAksMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an AKS cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/aks/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsAksMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsAksMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified AKS cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/aks/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsAksPoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of AKS machine items","schema":{"$ref":"#/definitions/v1AzureMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AKS machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsAksPoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/aks/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsAksPoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified Azure machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsAksPoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AzureMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified AKS machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsAksPoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/aws/{configUid}":{"get":{"operationId":"v1CloudConfigsAwsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AwsCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified AWS cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/aws/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsAwsUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AwsCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/aws/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsAwsMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AwsMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an AWS cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/aws/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsAwsMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsAwsMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AwsMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified AWS cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/aws/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsAwsPoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of AWS machine items","schema":{"$ref":"#/definitions/v1AwsMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AWS machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsAwsPoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AwsMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/aws/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsAwsPoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified AWS machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsAwsPoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AwsMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified AWS machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsAwsPoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AwsMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/azure/{configUid}":{"get":{"operationId":"v1CloudConfigsAzureGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AzureCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Azure cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/azure/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsAzureUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/azure/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsAzureMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an Azure cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/azure/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsAzureMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsAzureMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified Azure cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/azure/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"description":"Returns all the Azure machines restricted to the user role and filters.","operationId":"v1CloudConfigsAzurePoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of AWS machine items","schema":{"$ref":"#/definitions/v1AzureMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Azure machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsAzurePoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/azure/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsAzurePoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified Azure machine","tags":["v1"]},"get":{"description":"Returns a Azure machine for the specified uid.","operationId":"v1CloudConfigsAzurePoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AzureMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Azure machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsAzurePoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AzureMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}":{"get":{"operationId":"v1CloudConfigsCustomGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1CustomCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Custom cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud type","in":"path","name":"cloudType","required":true,"type":"string"},{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud type","in":"path","name":"cloudType","required":true,"type":"string"},{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsCustomUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CustomCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud type","in":"path","name":"cloudType","required":true,"type":"string"},{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsCustomMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CustomMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an Custom cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsCustomMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud type","in":"path","name":"cloudType","required":true,"type":"string"},{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsCustomMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CustomMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified Custom cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsCustomPoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of Custom machine items","schema":{"$ref":"#/definitions/v1CustomMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Custom machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud type","in":"path","name":"cloudType","required":true,"type":"string"},{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsCustomPoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CustomMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsCustomPoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified Custom machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsCustomPoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1CustomMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Custom machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud type","in":"path","name":"cloudType","required":true,"type":"string"},{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsCustomPoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CustomMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/coxedge/{configUid}":{"get":{"operationId":"v1CloudConfigsCoxEdgeGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1CoxEdgeCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified CoxEdge cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/coxedge/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsCoxEdgeUidClusterConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CoxEdgeCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/coxedge/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsCoxEdgeMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CoxEdgeMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a CoxEdge cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/coxedge/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsCoxEdgeMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsCoxEdgeMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CoxEdgeMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified CoxEdge cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/coxedge/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsCoxEdgePoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of CoxEdge machine items","schema":{"$ref":"#/definitions/v1CoxEdgeMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of CoxEdge machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsCoxEdgePoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CoxEdgeMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/coxedge/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsCoxEdgePoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified CoxEdge machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsCoxEdgePoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1CoxEdgeMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified CoxEdge machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsCoxEdgePoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1CoxEdgeMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/edge-native/{configUid}":{"get":{"operationId":"v1CloudConfigsEdgeNativeGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1EdgeNativeCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified edge-native cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/edge-native/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsEdgeNativeUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeNativeCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/edge-native/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsEdgeNativeMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeNativeMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a edge-native cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsEdgeNativeMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsEdgeNativeMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeNativeMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified edge-native cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsEdgeNativePoolMachinesList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of edge-native machine items","schema":{"$ref":"#/definitions/v1EdgeNativeMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of edge-native machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsEdgeNativePoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeNativeMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the edge-native machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsEdgeNativePoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified edge-native machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsEdgeNativePoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1EdgeNativeMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified edge-native machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsEdgeNativePoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeNativeMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/edge/{configUid}":{"get":{"operationId":"v1CloudConfigsEdgeGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1EdgeCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified edge cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/edge/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsEdgeUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/edge/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsEdgeMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a edge cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/edge/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsEdgeMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsEdgeMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified Edge cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/edge/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsEdgePoolMachinesList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of Edge machine items","schema":{"$ref":"#/definitions/v1EdgeMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Edge machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsEdgePoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the Edge machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/edge/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsEdgePoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified Edge machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsEdgePoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1EdgeMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Edge machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsEdgePoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/eks/{configUid}":{"get":{"operationId":"v1CloudConfigsEksGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1EksCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified EKS cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/eks/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsEksUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EksCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/eks/{configUid}/fargateProfiles":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsEksUidFargateProfilesUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EksFargateProfiles"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates EKS cloud config's fargate profiles","tags":["v1"]}},"/v1/cloudconfigs/eks/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsEksMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EksMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an EKS cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsEksMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsEksMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EksMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified EKS cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsEksPoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of EKS machine items","schema":{"$ref":"#/definitions/v1AwsMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of EKS machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsEksPoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AwsMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsEksPoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified EKS machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsEksPoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AwsMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified EKS machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsEksPoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AwsMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/gcp/{configUid}":{"get":{"operationId":"v1CloudConfigsGcpGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1GcpCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified GCP cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/gcp/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsGcpUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/gcp/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsGcpMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a Gcp cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsGcpMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsGcpMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified GCP cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsGcpPoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of GCP machine items","schema":{"$ref":"#/definitions/v1GcpMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of GCP machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsGcpPoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsGcpPoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified GCP machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsGcpPoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1GcpMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified GCP machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsGcpPoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/generic/{configUid}":{"get":{"operationId":"v1CloudConfigsGenericGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1GenericCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Generic cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/generic/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsGenericUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GenericCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/generic/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsGenericMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GenericMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a generic cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsGenericMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsGenericMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GenericMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified generic cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsGenericPoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of Generic machine items","schema":{"$ref":"#/definitions/v1GenericMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Generic machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsGenericPoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GenericMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsGenericPoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsGenericPoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1GenericMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified generic machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsGenericPoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GenericMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/gke/{configUid}":{"get":{"operationId":"v1CloudConfigsGkeGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1GcpCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified GKE cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/gke/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsGkeUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/gke/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsGkeMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an GKE cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsGkeMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsGkeMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified GKE cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsGkePoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of GKE machine items","schema":{"$ref":"#/definitions/v1GcpMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of GKE machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsGkePoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsGkePoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified Gcp machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsGkePoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1GcpMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified GKE machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsGkePoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1GcpMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/libvirt/{configUid}":{"get":{"operationId":"v1CloudConfigsLibvirtGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1LibvirtCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified libvirt cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/libvirt/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsLibvirtUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1LibvirtCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/libvirt/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsLibvirtMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1LibvirtMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a libvirt cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/libvirt/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsLibvirtMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsLibvirtMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1LibvirtMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified Libvirt cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/libvirt/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsLibvirtPoolMachinesList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of Libvirt machine items","schema":{"$ref":"#/definitions/v1LibvirtMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Libvirt machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsLibvirtPoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1LibvirtMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the Libvirt machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/libvirt/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsLibvirtPoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified Libvirt machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsLibvirtPoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1LibvirtMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Libvirt machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsLibvirtPoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1LibvirtMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/maas/{configUid}":{"get":{"operationId":"v1CloudConfigsMaasGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1MaasCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Maas cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/maas/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsMaasUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1MaasCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/maas/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsMaasMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1MaasMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an Maas cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsMaasMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsMaasMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1MaasMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified Maas cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsMaasPoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of Maas machine items","schema":{"$ref":"#/definitions/v1MaasMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Maas machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsMaasPoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1MaasMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsMaasPoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified Maas machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsMaasPoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1MaasMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Maas machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsMaasPoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1MaasMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/openstack/{configUid}":{"get":{"operationId":"v1CloudConfigsOpenStackGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1OpenStackCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified OpenStack cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/openstack/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsOpenStackUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OpenStackCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/openstack/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsOpenStackMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OpenStackMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a OpenStack cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsOpenStackMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsOpenStackMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OpenStackMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified OpenStack cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsOpenStackPoolMachinesList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of OpenStack machine items","schema":{"$ref":"#/definitions/v1OpenStackMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of OpenStack machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsOpenStackPoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OpenStackMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the OpenStack machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsOpenStackPoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified OpenStack machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsOpenStackPoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1OpenStackMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified OpenStack machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsOpenStackPoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OpenStackMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/tke/{configUid}":{"get":{"operationId":"v1CloudConfigsTkeGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TencentCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified TKE cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/tke/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsTkeUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TencentCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/tke/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsTkeMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TencentMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an TKE cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsTkeMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsTkeMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TencentMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified TKE cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsTkePoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of TKE machine items","schema":{"$ref":"#/definitions/v1TencentMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of TKE machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsTkePoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TencentMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsTkePoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified Tencent machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsTkePoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TencentMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Tke machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsTkePoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TencentMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/virtual/{configUid}":{"get":{"operationId":"v1CloudConfigsVirtualGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1VirtualCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Virtual cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/virtual/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsVirtualUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VirtualCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/virtual/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsVirtualMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VirtualMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a virtual cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsVirtualMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsVirtualMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VirtualMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified virtual cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsVirtualPoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of virtual machine items","schema":{"$ref":"#/definitions/v1VirtualMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of virtual machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsVirtualPoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VirtualMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsVirtualPoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified virtual machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsVirtualPoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1VirtualMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified virtual machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsVirtualPoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VirtualMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to the cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/virtual/{configUid}/resize":{"parameters":[{"description":"Specify virtual cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsVirtualUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VirtualClusterResize"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates and resizes the virtual cluster","tags":["v1"]}},"/v1/cloudconfigs/vsphere/{configUid}":{"get":{"operationId":"v1CloudConfigsVsphereGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1VsphereCloudConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified vSphere cloud config","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/cloudconfigs/vsphere/{configUid}/clusterConfig":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsVsphereUidClusterConfig","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VsphereCloudClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster configuration information","tags":["v1"]}},"/v1/cloudconfigs/vsphere/{configUid}/machinePools":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsVsphereMachinePoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VsphereMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a vSphere cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}":{"delete":{"operationId":"v1CloudConfigsVsphereMachinePoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified machine pool","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsVsphereMachinePoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VsphereMachinePoolConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified vSphere cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}/machines":{"get":{"operationId":"v1CloudConfigsVspherePoolMachinesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of vSphere machine items","schema":{"$ref":"#/definitions/v1VsphereMachines"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of vSphere machines","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"}],"post":{"operationId":"v1CloudConfigsVspherePoolMachinesAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VsphereMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds the vSphere machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}":{"delete":{"operationId":"v1CloudConfigsVspherePoolMachinesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified vSphere machine","tags":["v1"]},"get":{"operationId":"v1CloudConfigsVspherePoolMachinesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1VsphereMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified vSphere machine","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsVspherePoolMachinesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VsphereMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine to cloud config's machine pool","tags":["v1"]}},"/v1/cloudconfigs/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}/maintenance":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"},{"description":"Cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsMachinePoolsMachineUidMaintenanceUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1MachineMaintenance"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine maintenance","tags":["v1"]}},"/v1/cloudconfigs/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}/maintenance/status":{"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"},{"description":"Machine pool name","in":"path","name":"machinePoolName","required":true,"type":"string"},{"description":"Machine uid","in":"path","name":"machineUid","required":true,"type":"string"},{"description":"Cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"operationId":"v1CloudConfigsMachinePoolsMachineUidMaintenanceStatusUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1MachineMaintenanceStatus"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified machine maintenance","tags":["v1"]}},"/v1/cloudconfigs/{configUid}/machinePools/machineUids":{"get":{"operationId":"v1CloudConfigsMachinePoolsMachineUidsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1MachinePoolsMachineUids"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cloud config's machine pools and machine uid","tags":["v1"]},"parameters":[{"description":"Cluster's cloud config uid","in":"path","name":"configUid","required":true,"type":"string"}]},"/v1/clouds/aws/account/sts":{"get":{"operationId":"V1AwsAccountStsGet","parameters":[{"default":"aws","description":"AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values","enum":["aws","aws-us-gov"],"in":"query","name":"partition","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/V1AwsAccountSts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves AWS external id and account id","tags":["v1"]}},"/v1/clouds/aws/account/validate":{"post":{"operationId":"V1AwsAccountValidate","parameters":[{"description":"Request payload to validate AWS cloud account","in":"body","name":"awsCloudAccount","required":true,"schema":{"$ref":"#/definitions/v1AwsCloudAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate the specified AWS account credentials","tags":["v1"]}},"/v1/clouds/aws/cloudwatch/validate":{"post":{"description":"Validates aws cloud watch credentials","operationId":"V1CloudsAwsCloudWatchValidate","parameters":[{"description":"Request payload for cloud watch config","in":"body","name":"cloudWatchConfig","required":true,"schema":{"$ref":"#/definitions/v1.CloudWatchConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"validates aws cloud watch credentials","tags":["v1"]}},"/v1/clouds/aws/cost":{"post":{"operationId":"v1AwsCloudCost","parameters":[{"description":"Request payload for AWS cloud cost","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1AwsCloudCostSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsCloudCostSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves AWS cloud account usage cost from cost explorer.","tags":["v1"]}},"/v1/clouds/aws/imageIds/{imageId}/volumeSize":{"get":{"description":"Get AWS Volume Size","operationId":"V1AwsVolumeSizeGet","parameters":[{"description":"Specific AWS Region","in":"query","name":"region","required":true,"type":"string"},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"AWS image id","in":"path","name":"imageId","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsVolumeSize"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get AWS Volume Size","tags":["v1"]}},"/v1/clouds/aws/policies":{"post":{"operationId":"V1AwsIamPolicies","parameters":[{"description":"Request payload for AWS Cloud Account","in":"body","name":"account","required":true,"schema":{"$ref":"#/definitions/v1AwsCloudAccount"}},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsPolicies"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AWS policies for the specified account","tags":["v1"]}},"/v1/clouds/aws/policyArns/validate":{"post":{"operationId":"V1AwsPolicyArnsValidate","parameters":[{"description":"Request payload to validate AWS policy ARN","in":"body","name":"spec","required":true,"schema":{"$ref":"#/definitions/v1AwsPolicyArnsSpec"}},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate the aws policy arns validate","tags":["v1"]}},"/v1/clouds/aws/properties/validate":{"post":{"operationId":"V1AwsPropertiesValidate","parameters":[{"description":"Request payload for AWS properties validate spec","in":"body","name":"properties","required":true,"schema":{"$ref":"#/definitions/V1AwsPropertiesValidateSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate AWS properties","tags":["v1"]}},"/v1/clouds/aws/regions":{"get":{"operationId":"V1AwsRegions","parameters":[{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsRegions"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AWS regions for the specified account","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/availabilityzones":{"get":{"operationId":"V1AwsZones","parameters":[{"description":"Region for which zones are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsAvailabilityZones"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AWS availability zones for the specified region","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/copydefaultimages":{"post":{"operationId":"V1AwsCopyImageFromDefaultRegion","parameters":[{"description":"Region to copy AWS image from","in":"path","name":"region","required":true,"type":"string"},{"description":"Request payload to copy the AWS image","in":"body","name":"spectroClusterAwsImageTag","schema":{"$ref":"#/definitions/v1AwsFindImageRequest"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AsyncOperationIdEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Copies the specified image from one region to another region","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/eksClusters/name/validate":{"get":{"description":"Returns no contents if aws cluster name is valid else error.","operationId":"V1AwsClusterNameValidate","parameters":[{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"cluster name to be validated","in":"query","name":"name","required":true,"type":"string"},{"description":"Region for which cluster name is validated","in":"path","name":"region","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Check if Aws cluster name is valid","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/images":{"post":{"operationId":"V1AwsFindImage","parameters":[{"description":"Region to find AWS image","in":"path","name":"region","required":true,"type":"string"},{"description":"Request payload to find the AWS image","in":"body","name":"awsImageRequest","schema":{"$ref":"#/definitions/v1AwsFindImageRequest"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsImage"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns AWS image for the specified AMI name","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/instancetypes":{"get":{"operationId":"V1AwsInstanceTypes","parameters":[{"description":"Region for which AWS instances are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Filter for instances having cpu greater than or equal","format":"double","in":"query","name":"cpuGtEq","type":"number"},{"description":"Filter for instances having memory greater than or equal","format":"double","in":"query","name":"memoryGtEq","type":"number"},{"description":"Filter for instances having gpu greater than or equal","format":"double","in":"query","name":"gpuGtEq","type":"number"},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsInstanceTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AWS instance types","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/keypairs":{"get":{"operationId":"V1AwsKeyPairs","parameters":[{"description":"Region for which AWS key pairs are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsKeyPairs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AWS keypairs","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/keypairs/{keypair}/validate":{"post":{"operationId":"V1AwsKeyPairValidate","parameters":[{"description":"Region for which AWS key pairs is validated","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"AWS Key pair which is to be validated","in":"path","name":"keypair","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate the specified AWS keypair","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/kms/{keyId}":{"get":{"operationId":"V1AwsKmsKeyGet","parameters":[{"description":"Region for which AWS KMS key belongs","in":"path","name":"region","required":true,"type":"string"},{"description":"The globally unique identifier for the KMS key","in":"path","name":"keyId","required":true,"type":"string"},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsKmsKeyEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get AWS KMS key by Id","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/kmskeys":{"get":{"operationId":"V1AwsKmsKeys","parameters":[{"description":"Region for which AWS KMS key are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsKmsKeys"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AWS KMS keys for the specified account","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/kmskeys/validate":{"get":{"operationId":"V1AwsKmsKeyValidate","parameters":[{"description":"Region for which AWS KMS key is validated","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"AWS KEY ARN for validation","in":"query","name":"keyArn","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate an Aws KMS key for the specified account","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/storagetypes":{"get":{"operationId":"V1AwsStorageTypes","parameters":[{"description":"Region for which AWS storage types are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsStorageTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AWS storage types","tags":["v1"]}},"/v1/clouds/aws/regions/{region}/vpcs":{"get":{"operationId":"V1AwsVpcs","parameters":[{"description":"Region for which VPCs are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsVpcs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of VPCs for the specified account","tags":["v1"]}},"/v1/clouds/aws/s3/validate":{"post":{"operationId":"V1AwsS3Validate","parameters":[{"description":"AWS S3 bucket credentials","in":"body","name":"awsS3Credential","required":true,"schema":{"$ref":"#/definitions/v1AwsS3BucketCredentials"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate the AWS S3 bucket","tags":["v1"]}},"/v1/clouds/aws/securitygroups":{"get":{"operationId":"V1AwsSecurityGroups","parameters":[{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Region for which security groups are requested","in":"query","name":"region","required":true,"type":"string"},{"description":"Vpc Id for which security groups are requested","in":"query","name":"vpcId","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AwsSecurityGroups"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of AWS security groups for the specified account","tags":["v1"]}},"/v1/clouds/aws/volumeTypes":{"get":{"description":"List all AWS Volume Types","operationId":"V1AwsVolumeTypesGet","parameters":[{"description":"Specific AWS Region","in":"query","name":"region","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AWSVolumeTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get all AWS Volume Types","tags":["v1"]}},"/v1/clouds/azure/account/validate":{"post":{"description":"Returns no contents if account is valid else error.","operationId":"V1AzureAccountValidate","parameters":[{"description":"Request payload for Azure cloud account","in":"body","name":"azureCloudAccount","required":true,"schema":{"$ref":"#/definitions/v1AzureCloudAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Check if Azure account is valid","tags":["v1"]}},"/v1/clouds/azure/groups":{"get":{"operationId":"V1AzureGroups","parameters":[{"description":"Uid for the specific Azure cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureGroups"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Azure groups","tags":["v1"]}},"/v1/clouds/azure/regions":{"get":{"operationId":"V1AzureRegions","parameters":[{"description":"Uid for the specific Azure cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"SubscriptionId for which resources is requested","in":"query","name":"subscriptionId","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureRegions"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Azure regions","tags":["v1"]}},"/v1/clouds/azure/regions/{region}/instancetypes":{"get":{"operationId":"V1AzureInstanceTypes","parameters":[{"description":"Region for which Azure instance types are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Filter for instances having cpu greater than or equal","format":"double","in":"query","name":"cpuGtEq","type":"number"},{"description":"Filter for instances having memory greater than or equal","format":"double","in":"query","name":"memoryGtEq","type":"number"},{"description":"Filter for instances having gpu greater than or equal","format":"double","in":"query","name":"gpuGtEq","type":"number"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureInstanceTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Azure instance types","tags":["v1"]}},"/v1/clouds/azure/regions/{region}/storagetypes":{"get":{"operationId":"V1AzureStorageTypes","parameters":[{"description":"Region for which Azure storage types are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureStorageTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Azure storage types","tags":["v1"]}},"/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/aksClusters/name/validate":{"get":{"description":"Returns no contents if Azure cluster name is valid else error.","operationId":"V1AzureClusterNameValidate","parameters":[{"description":"Uid for the specific Azure cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"cluster name to be validated","in":"query","name":"name","required":true,"type":"string"},{"description":"region in which cluster name is to be validated","in":"path","name":"region","required":true,"type":"string"},{"description":"subscriptionId in which cluster name is to be validated","in":"path","name":"subscriptionId","required":true,"type":"string"},{"description":"resourceGroup in which cluster name is to be validated","in":"query","name":"resourceGroup","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Check if Azure cluster name is valid","tags":["v1"]}},"/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/networks":{"get":{"operationId":"V1AzureVirtualNetworkList","parameters":[{"description":"Uid for the specific Azure cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Region for which Azure virtual networks are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for which Azure virtual networks are requested","in":"path","name":"subscriptionId","required":true,"type":"string"},{"description":"Resource group for which Azure virtual networks are requested","in":"query","name":"resourceGroup","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureVirtualNetworkList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Azure virtual network list for the sepcified account","tags":["v1"]}},"/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/resourceGroups":{"get":{"operationId":"V1AzureResourceGroupList","parameters":[{"description":"Uid for the specific Azure cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Region for which Azure resource group are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for which Azure resource group are requested","in":"path","name":"subscriptionId","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureResourceGroupList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Azure resource group for the specified account","tags":["v1"]}},"/v1/clouds/azure/regions/{region}/zones":{"get":{"operationId":"V1AzureZones","parameters":[{"description":"Region for which Azure zones are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific Azure cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"subscriptionId of azure account","in":"query","name":"subscriptionId","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureZoneEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Azure zones for the specified region","tags":["v1"]}},"/v1/clouds/azure/resourceGroups/{resourceGroup}/privateDnsZones":{"get":{"description":"Returns Azure private DNS zones","operationId":"V1AzurePrivateDnsZones","parameters":[{"description":"resourceGroup for which Azure private dns zones are requested","in":"path","name":"resourceGroup","required":true,"type":"string"},{"description":"Uid for the specific Azure cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"subscriptionId for which Azure private dns zones are requested","in":"query","name":"subscriptionId","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzurePrivateDnsZones"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get Azure private DNS zones for the given resource group","tags":["v1"]}},"/v1/clouds/azure/resourceGroups/{resourceGroup}/storageAccounts":{"get":{"description":"Returns Azure storage accounts.","operationId":"V1AzureStorageAccounts","parameters":[{"description":"resourceGroup for which Azure storage accounts are requested","in":"path","name":"resourceGroup","required":true,"type":"string"},{"description":"Uid for the specific Azure cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"subscriptionId for which Azure storage accounts are requested","in":"query","name":"subscriptionId","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureStorageAccounts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get Azure storage accounts","tags":["v1"]}},"/v1/clouds/azure/resourceGroups/{resourceGroup}/storageAccounts/{storageAccountName}/containers":{"get":{"description":"Returns Azure storage containers for the given account.","operationId":"V1AzureStorageContainers","parameters":[{"description":"resourceGroup for which Azure storage accounts are requested","in":"path","name":"resourceGroup","required":true,"type":"string"},{"description":"Uid for the specific Azure cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"subscriptionId for which Azure storage accounts are requested","in":"query","name":"subscriptionId","required":true,"type":"string"},{"description":"resourceGroup for which Azure storage accounts are requested","in":"path","name":"storageAccountName","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureStorageContainers"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get Azure storage containers","tags":["v1"]}},"/v1/clouds/azure/storageaccounttypes":{"get":{"description":"Returns Azure storage account types.","operationId":"V1AzureStorageAccountTypes","parameters":[{"description":"Region for which Azure storage account types are requested","in":"query","name":"region","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureStorageAccountEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get Azure storage account types","tags":["v1"]}},"/v1/clouds/azure/subscriptions":{"get":{"description":"Returns list of Azure subscription list.","operationId":"V1AzureSubscriptionList","parameters":[{"description":"Uid for the specific Azure cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureSubscriptionList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Azure subscription list for the specified account","tags":["v1"]}},"/v1/clouds/azure/vhds/{vhd}/url":{"get":{"operationId":"V1AzureVhdUrl","parameters":[{"description":"vhd location for which Azure vhd url is requested","in":"path","name":"vhd","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1AzureVhdUrlEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the Azure vhd url for the specified vhd location","tags":["v1"]}},"/v1/clouds/cloudTypes":{"get":{"operationId":"V1CustomCloudTypesGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CustomCloudTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the custom cloud types","tags":["v1"]}},"/v1/clouds/cloudTypes/register":{"post":{"operationId":"V1CustomCloudTypeRegister","parameters":[{"description":"Request payload to register custom cloud type","in":"body","name":"body","schema":{"$ref":"#/definitions/v1CustomCloudRequestEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Registers the custom cloud type","tags":["v1"]}},"/v1/clouds/cloudTypes/{cloudType}":{"delete":{"operationId":"V1CustomCloudTypesDelete","parameters":[{"description":"Unique cloud type","in":"path","name":"cloudType","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the custom cloud type","tags":["v1"]}},"/v1/clouds/cloudTypes/{cloudType}/cloudAccountKeys":{"get":{"operationId":"V1CustomCloudTypeCloudAccountKeysGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CustomCloudTypeCloudAccountKeys"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns valid keys for the cloud account used for custom cloud type","tags":["v1"]},"parameters":[{"description":"Unique cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"operationId":"V1CustomCloudTypeCloudAccountKeysUpdate","parameters":[{"description":"Request payload for custom cloud meta entity","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CustomCloudTypeCloudAccountKeys"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the custom cloud type cloud account keys","tags":["v1"]}},"/v1/clouds/cloudTypes/{cloudType}/content/bootstrap":{"delete":{"operationId":"V1CustomCloudTypeBootstrapDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the custom cloud type bootstrap","tags":["v1"]},"get":{"operationId":"V1CustomCloudTypeBootstrapGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CustomCloudTypeContentResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the custom cloud type bootstrap","tags":["v1"]},"parameters":[{"description":"Unique cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"consumes":["multipart/form-data"],"operationId":"V1CustomCloudTypeBootstrapUpdate","parameters":[{"in":"formData","name":"fileName","type":"file"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the custom cloud type bootstrap","tags":["v1"]}},"/v1/clouds/cloudTypes/{cloudType}/content/cloudProvider":{"delete":{"operationId":"V1CustomCloudTypeCloudProviderDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the custom cloud type cloud provider","tags":["v1"]},"get":{"operationId":"V1CustomCloudTypeCloudProviderGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CustomCloudTypeContentResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the custom cloud type cloud provider","tags":["v1"]},"parameters":[{"description":"Unique cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"consumes":["multipart/form-data"],"operationId":"V1CustomCloudTypeCloudProviderUpdate","parameters":[{"in":"formData","name":"fileName","type":"file"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the custom cloud type cloud provider","tags":["v1"]}},"/v1/clouds/cloudTypes/{cloudType}/content/controlPlane":{"delete":{"operationId":"V1CustomCloudTypeControlPlaneDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the custom cloud type control plane","tags":["v1"]},"get":{"operationId":"V1CustomCloudTypeControlPlaneGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CustomCloudTypeContentResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the custom cloud type control plane","tags":["v1"]},"parameters":[{"description":"Unique cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"consumes":["multipart/form-data"],"operationId":"V1CustomCloudTypeControlPlaneUpdate","parameters":[{"in":"formData","name":"fileName","type":"file"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the custom cloud type control plane","tags":["v1"]}},"/v1/clouds/cloudTypes/{cloudType}/content/templates/clusterTemplate":{"delete":{"operationId":"V1CustomCloudTypeClusterTemplateDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the custom cloud type cluster template","tags":["v1"]},"get":{"operationId":"V1CustomCloudTypeClusterTemplateGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CustomCloudTypeContentResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the custom cloud type cluster template","tags":["v1"]},"parameters":[{"description":"Unique cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"consumes":["multipart/form-data"],"operationId":"V1CustomCloudTypeClusterTemplateUpdate","parameters":[{"in":"formData","name":"fileName","type":"file"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the custom cloud type cluster template","tags":["v1"]}},"/v1/clouds/cloudTypes/{cloudType}/content/templates/controlPlanePoolTemplate":{"delete":{"operationId":"V1CustomCloudTypeControlPlanePoolTemplateDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the custom cloud type controlPlane pool template","tags":["v1"]},"get":{"operationId":"V1CustomCloudTypeControlPlanePoolTemplateGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CustomCloudTypeContentResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the custom cloud type controlPlane pool template","tags":["v1"]},"parameters":[{"description":"Unique cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"consumes":["multipart/form-data"],"operationId":"V1CustomCloudTypeControlPlanePoolTemplateUpdate","parameters":[{"in":"formData","name":"fileName","type":"file"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the custom cloud type controlPlane pool template","tags":["v1"]}},"/v1/clouds/cloudTypes/{cloudType}/content/templates/workerPoolTemplate":{"delete":{"operationId":"V1CustomCloudTypeWorkerPoolTemplateDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the custom cloud type worker pool template","tags":["v1"]},"get":{"operationId":"V1CustomCloudTypeWorkerPoolTemplateGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CustomCloudTypeContentResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the custom cloud type worker pool template","tags":["v1"]},"parameters":[{"description":"Unique cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"consumes":["multipart/form-data"],"operationId":"V1CustomCloudTypeWorkerPoolTemplateUpdate","parameters":[{"in":"formData","name":"fileName","type":"file"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the custom cloud type worker pool template","tags":["v1"]}},"/v1/clouds/cloudTypes/{cloudType}/logo":{"get":{"operationId":"V1CustomCloudTypeLogoGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"Download the logo","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the custom cloud type logo","tags":["v1"]},"parameters":[{"description":"Unique cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"consumes":["multipart/form-data"],"operationId":"V1CustomCloudTypeLogoUpdate","parameters":[{"in":"formData","name":"fileName","type":"file"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the custom cloud type logo","tags":["v1"]}},"/v1/clouds/cloudTypes/{cloudType}/meta":{"get":{"operationId":"V1CustomCloudTypeMetaGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CustomCloudMetaEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the custom cloud type meta","tags":["v1"]},"parameters":[{"description":"Unique cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"put":{"operationId":"V1CustomCloudTypeMetaUpdate","parameters":[{"description":"Request payload for custom cloud meta entity","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1CustomCloudRequestEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the custom cloud type meta","tags":["v1"]}},"/v1/clouds/coxedge/account/validate":{"post":{"operationId":"V1CoxEdgeAccountValidate","parameters":[{"description":"Request payload to validate CoxEdge cloud account","in":"body","name":"account","required":true,"schema":{"$ref":"#/definitions/v1CoxEdgeCloudAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate the specified CoxEdge account credentials","tags":["v1"]}},"/v1/clouds/coxedge/default/baseurls":{"get":{"operationId":"V1CoxEdgeBaseUrls","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CoxEdgeBaseUrls"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of default base urls","tags":["v1"]}},"/v1/clouds/coxedge/environments":{"get":{"operationId":"V1CoxEdgeEnvironmentsGet","parameters":[{"description":"Uid for the specific CoxEdge cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"OrganizationId for the specific CoxEdge account","in":"query","name":"organizationId","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"List of CoxEdge environments","schema":{"$ref":"#/definitions/v1CoxEdgeEnvironments"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of environments for the specified account","tags":["v1"]},"post":{"operationId":"V1CoxEdgeEnvironments","parameters":[{"description":"Request payload to get CoxEdge environments","in":"body","name":"spec","required":true,"schema":{"$ref":"#/definitions/v1CoxEdgeEnvironmentsRequest"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"List of CoxEdge environments","schema":{"$ref":"#/definitions/v1CoxEdgeEnvironments"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of environments for baseUrl and apiKey","tags":["v1"]}},"/v1/clouds/coxedge/organizations":{"get":{"operationId":"V1CoxEdgeOrganizationsGet","parameters":[{"description":"Uid for the specific CoxEdge cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"List of CoxEdge organizations","schema":{"$ref":"#/definitions/v1CoxEdgeOrganizations"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of organizations for the specified account","tags":["v1"]},"post":{"operationId":"V1CoxEdgeOrganizations","parameters":[{"description":"Request payload to get CoxEdge organizations","in":"body","name":"spec","required":true,"schema":{"$ref":"#/definitions/v1CoxEdgeCredentials"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"List of CoxEdge organizations","schema":{"$ref":"#/definitions/v1CoxEdgeOrganizations"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of organizations for baseUrl and apiKey","tags":["v1"]}},"/v1/clouds/coxedge/regions":{"get":{"operationId":"V1CoxEdgeRegions","parameters":[{"description":"Uid for the specific AWS cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"CoxEdge organization id","in":"query","name":"organizationId","type":"string"},{"description":"CoxEdge service name","in":"query","name":"service","type":"string"},{"description":"CoxEdge environment name","in":"query","name":"environment","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CoxEdgeRegions"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of CoxEdge regions for the specified account","tags":["v1"]}},"/v1/clouds/coxedge/regions/{region}/instancetypes":{"get":{"operationId":"V1CoxEdgeInstanceTypes","parameters":[{"description":"Region for which CoxEdge instances are listed","in":"path","name":"region","required":true,"type":"string"},{"description":"Filter for instances having cpu greater than or equal","format":"double","in":"query","name":"cpuGtEq","type":"number"},{"description":"Filter for instances having memory greater than or equal","format":"double","in":"query","name":"memoryGtEq","type":"number"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CoxEdgeInstanceTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of CoxEdge instance types","tags":["v1"]}},"/v1/clouds/coxedge/services":{"get":{"operationId":"V1CoxEdgeServicesGet","parameters":[{"description":"Uid for the specific CoxEdge cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"OrganizationId for the specific CoxEdge account","in":"query","name":"organizationId","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"List of CoxEdge services","schema":{"$ref":"#/definitions/v1CoxEdgeServices"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of services for the specified account","tags":["v1"]},"post":{"operationId":"V1CoxEdgeServices","parameters":[{"description":"Request payload to get CoxEdge services","in":"body","name":"spec","required":true,"schema":{"$ref":"#/definitions/v1CoxEdgeCredentials"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CoxEdgeServices"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of services for baseUrl and apiKey","tags":["v1"]}},"/v1/clouds/eks/properties/validate":{"post":{"operationId":"V1EksPropertiesValidate","parameters":[{"description":"Request payload for EKS properties validate spec","in":"body","name":"properties","required":true,"schema":{"$ref":"#/definitions/V1EksPropertiesValidateSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate EKS properties","tags":["v1"]}},"/v1/clouds/gcp/account/validate":{"post":{"operationId":"V1GcpAccountValidate","parameters":[{"description":"Uid for the specific GCP cloud account","in":"body","name":"gcpCloudAccount","required":true,"schema":{"$ref":"#/definitions/v1GcpCloudAccountValidateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate the specified GCP account credentials","tags":["v1"]}},"/v1/clouds/gcp/azs/validate":{"post":{"operationId":"V1GcpAzValidate","parameters":[{"description":"Uid for the specific GCP cloud account","in":"body","name":"entity","required":true,"schema":{"$ref":"#/definitions/v1AzValidateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate the specified GCP az","tags":["v1"]}},"/v1/clouds/gcp/bucketname/validate":{"post":{"operationId":"V1GcpBucketNameValidate","parameters":[{"description":"Request payload for GCP account name validate","in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1GcpAccountNameValidateSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate the specified GCP bucket name credentials","tags":["v1"]}},"/v1/clouds/gcp/image/container/validate":{"get":{"operationId":"V1GcpContainerImageValidate","parameters":[{"description":"image path in the container","in":"query","name":"imagePath","required":true,"type":"string"},{"description":"tag in the GCP container","in":"query","name":"tag","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates the image with tag","tags":["v1"]}},"/v1/clouds/gcp/images/{imageName}/url":{"get":{"operationId":"V1GcpImageUrl","parameters":[{"description":"imageName for which GCP image url is requested","in":"path","name":"imageName","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1GcpImageUrlEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the Gcp image url for the specified image location","tags":["v1"]}},"/v1/clouds/gcp/projects":{"get":{"operationId":"V1GcpProjects","parameters":[{"description":"Uid for the specific GCP cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1GcpProjects"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of GCP projects for the specified account","tags":["v1"]}},"/v1/clouds/gcp/projects/{project}/regions":{"get":{"operationId":"V1GcpRegions","parameters":[{"description":"Uid for the specific GCP cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Project Name for which GCP zones are requested","in":"path","name":"project","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1GcpRegions"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of GCP regions","tags":["v1"]}},"/v1/clouds/gcp/projects/{project}/regions/{region}/networks":{"get":{"operationId":"V1GcpNetworks","parameters":[{"description":"Uid for the specific GCP cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Region for which GCP networks are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Project Name for which GCP networks are requested","in":"path","name":"project","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1GcpNetworks"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of GCP networks for the specified account","tags":["v1"]}},"/v1/clouds/gcp/projects/{project}/regions/{region}/zones":{"get":{"operationId":"V1GcpZones","parameters":[{"description":"Uid for the specific GCP cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Region for which GCP zones are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Project Name for which GCP zones are requested","in":"path","name":"project","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1GcpZones"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of GCP zones for the specified account and region","tags":["v1"]}},"/v1/clouds/gcp/projects/{project}/validate":{"post":{"operationId":"V1GcpProjectValidate","parameters":[{"description":"GCP project uid","in":"path","name":"project","required":true,"type":"string"},{"description":"Uid for the specific GCP cloud account","in":"body","name":"cloudAccountUid","required":true,"schema":{"$ref":"#/definitions/v1CloudAccountUidEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate the specified GCP project","tags":["v1"]}},"/v1/clouds/gcp/projects/{project}/zones":{"get":{"operationId":"V1GcpAvailabilityZones","parameters":[{"description":"Uid for the specific GCP cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Project Name for which GCP zones are requested","in":"path","name":"project","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1GcpZones"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of GCP zones for the specified account","tags":["v1"]}},"/v1/clouds/gcp/properties/validate":{"post":{"operationId":"V1GcpPropertiesValidate","parameters":[{"description":"Request payload for GCP properties validate spec","in":"body","name":"properties","required":true,"schema":{"$ref":"#/definitions/V1GcpPropertiesValidateSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate GCP properties","tags":["v1"]}},"/v1/clouds/gcp/regions/{region}/instancetypes":{"get":{"operationId":"V1GcpInstanceTypes","parameters":[{"description":"Region for which GCP instance types are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Filter for instances having cpu greater than or equal","format":"double","in":"query","name":"cpuGtEq","type":"number"},{"description":"Filter for instances having memory greater than or equal","format":"double","in":"query","name":"memoryGtEq","type":"number"},{"description":"Filter for instances having gpu greater than or equal","format":"double","in":"query","name":"gpuGtEq","type":"number"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1GcpInstanceTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of GCP instance types","tags":["v1"]}},"/v1/clouds/gcp/regions/{region}/storagetypes":{"get":{"operationId":"V1GcpStorageTypes","parameters":[{"description":"Region for which GCP storage types are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1GcpStorageTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Gcp storage types","tags":["v1"]}},"/v1/clouds/maas/account/validate":{"post":{"description":"Returns no contents if account is valid else error.","operationId":"V1MaasAccountValidate","parameters":[{"description":"Request payload for Maas cloud account","in":"body","name":"account","required":true,"schema":{"$ref":"#/definitions/v1MaasCloudAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Check if Maas account is valid","tags":["v1"]}},"/v1/clouds/maas/azs":{"get":{"operationId":"V1MaasZonesGet","parameters":[{"description":"Uid for the specific Maas cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1MaasZones"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Maas zones for a particular account uid","tags":["v1"]}},"/v1/clouds/maas/domains":{"get":{"operationId":"V1MaasDomainsGet","parameters":[{"description":"Uid for the specific Maas cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1MaasDomains"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Maas domains","tags":["v1"]}},"/v1/clouds/maas/resourcePools":{"get":{"operationId":"V1MaasPoolsGet","parameters":[{"description":"Uid for the specific Maas cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1MaasPools"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Maas pools for a particular account uid","tags":["v1"]}},"/v1/clouds/maas/subnets":{"get":{"operationId":"V1MaasSubnetsGet","parameters":[{"description":"Uid for the specific Maas cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1MaasSubnets"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Maas subnets for a particular account uid","tags":["v1"]}},"/v1/clouds/maas/tags":{"get":{"operationId":"V1MaasTagsGet","parameters":[{"description":"Uid for the specific Maas cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1MaasTags"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Maas tags for a particular account uid","tags":["v1"]}},"/v1/clouds/openstack/account/validate":{"post":{"description":"Returns no contents if account is valid else error.","operationId":"V1OpenStackAccountValidate","parameters":[{"description":"Request payload for OpenStack cloud account","in":"body","name":"openstackCloudAccount","required":true,"schema":{"$ref":"#/definitions/v1OpenStackCloudAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Check if OpenStack account is valid","tags":["v1"]}},"/v1/clouds/openstack/azs":{"get":{"operationId":"V1OpenStackAzsGet","parameters":[{"description":"Uid for the specific OpenStack cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"project for which OpenStack azs are requested","in":"query","name":"project","type":"string"},{"description":"region for which OpenStack azs are requested","in":"query","name":"region","type":"string"},{"description":"domain for which OpenStack azs are requested","in":"query","name":"domain","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackAzs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of OpenStack azs for a particular account uid","tags":["v1"]}},"/v1/clouds/openstack/flavors":{"get":{"operationId":"V1OpenStackFlavorsGet","parameters":[{"description":"Uid for the specific OpenStack cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"project for which OpenStack flavors are requested","in":"query","name":"project","type":"string"},{"description":"region for which OpenStack flavors are requested","in":"query","name":"region","type":"string"},{"description":"domain for which OpenStack flavors are requested","in":"query","name":"domain","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackFlavors"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the OpenStack flavors","tags":["v1"]}},"/v1/clouds/openstack/keypairs":{"get":{"operationId":"V1OpenStackKeypairsGet","parameters":[{"description":"Uid for the specific OpenStack cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"project for which OpenStack keypairs are requested","in":"query","name":"project","type":"string"},{"description":"region for which OpenStack keypairs are requested","in":"query","name":"region","type":"string"},{"description":"domain for which OpenStack keypairs are requested","in":"query","name":"domain","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackKeypairs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the OpenStack keypair","tags":["v1"]}},"/v1/clouds/openstack/networks":{"get":{"operationId":"V1OpenStackNetworksGet","parameters":[{"description":"Uid for the specific OpenStack cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"project for which OpenStack networks are requested","in":"query","name":"project","type":"string"},{"description":"region for which OpenStack networks are requested","in":"query","name":"region","type":"string"},{"description":"domain for which OpenStack networks are requested","in":"query","name":"domain","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackNetworks"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the OpenStack networks","tags":["v1"]}},"/v1/clouds/openstack/projects":{"get":{"operationId":"V1OpenStackProjectsGet","parameters":[{"description":"Uid for the specific OpenStack cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackProjects"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the OpenStack projects","tags":["v1"]}},"/v1/clouds/openstack/regions":{"get":{"operationId":"V1OpenStackRegionsGet","parameters":[{"description":"Uid for the specific OpenStack cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OpenStackRegions"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the OpenStack regions","tags":["v1"]}},"/v1/clouds/tencent/account/validate":{"post":{"operationId":"V1TencentAccountValidate","parameters":[{"description":"Request payload to validate tencent cloud account","in":"body","name":"account","required":true,"schema":{"$ref":"#/definitions/v1TencentCloudAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate the specified Tencent account credentials","tags":["v1"]}},"/v1/clouds/tencent/regions":{"get":{"operationId":"V1TencentRegions","parameters":[{"description":"Uid for the specific Tencent cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TencentRegions"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Tencent regions for the specified account","tags":["v1"]}},"/v1/clouds/tencent/regions/{region}/instancetypes":{"get":{"operationId":"V1TencentInstanceTypes","parameters":[{"description":"Region for which tencent instances are listed","in":"path","name":"region","required":true,"type":"string"},{"description":"Filter for instances having cpu greater than or equal","format":"double","in":"query","name":"cpuGtEq","type":"number"},{"description":"Filter for instances having memory greater than or equal","format":"double","in":"query","name":"memoryGtEq","type":"number"},{"description":"Filter for instances having gpu greater than or equal","format":"double","in":"query","name":"gpuGtEq","type":"number"},{"description":"Uid for the specific tencent cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TencentInstanceTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Tencent instance types","tags":["v1"]}},"/v1/clouds/tencent/regions/{region}/keypairs":{"get":{"operationId":"V1TencentKeypairs","parameters":[{"description":"Region for which keypairs are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific Tencent cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TencentKeypairs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of keypairs for the specified account","tags":["v1"]}},"/v1/clouds/tencent/regions/{region}/securitygroups":{"get":{"operationId":"V1TencentSecurityGroups","parameters":[{"description":"Region for which security groups are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific Tencent cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TencentSecurityGroups"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of secutity groups for the specified account","tags":["v1"]}},"/v1/clouds/tencent/regions/{region}/storagetypes":{"get":{"operationId":"V1TencentStorageTypes","parameters":[{"description":"Region for which tencent storages are listed","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific tencent cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Zone for which tencent storages are listed","in":"query","name":"zone","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TencentStorageTypes"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Tencent storage types","tags":["v1"]}},"/v1/clouds/tencent/regions/{region}/vpcs":{"get":{"operationId":"V1TencentVpcs","parameters":[{"description":"Region for which VPCs are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific Tencent cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TencentVpcs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of VPCs for the specified account","tags":["v1"]}},"/v1/clouds/tencent/regions/{region}/zones":{"get":{"operationId":"V1TencentZones","parameters":[{"description":"Region for which zones are requested","in":"path","name":"region","required":true,"type":"string"},{"description":"Uid for the specific Tencent cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TencentAvailabilityZones"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Tencent availability zones for the specified region","tags":["v1"]}},"/v1/clouds/vsphere/account/validate":{"post":{"description":"Returns no contents if account is valid else error.","operationId":"V1VsphereAccountValidate","parameters":[{"description":"Request payload for VSphere cloud account","in":"body","name":"vsphereCloudAccount","required":true,"schema":{"$ref":"#/definitions/v1VsphereCloudAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Check if Vsphere account is valid","tags":["v1"]}},"/v1/clouds/vsphere/datacenters":{"get":{"operationId":"V1VsphereDatacenters","parameters":[{"description":"Uid for the specific OpenStack cloud account","in":"query","name":"cloudAccountUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VsphereDatacenters"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the vsphere data centers","tags":["v1"]}},"/v1/clouds/vsphere/datacenters/{uid}/computeclusters/{computecluster}":{"get":{"operationId":"V1VsphereComputeClusterResources","parameters":[{"description":"Uid for the specific VSphere cloud account","in":"query","name":"cloudAccountUid","required":true,"type":"string"},{"description":"computecluster for which resources is requested","in":"path","name":"computecluster","required":true,"type":"string"},{"description":"VSphere datacenter uid for which resources is requested","in":"path","name":"uid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VsphereComputeClusterResources"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the resources for vsphere compute cluster","tags":["v1"]}},"/v1/clouds/vsphere/env":{"get":{"operationId":"V1VsphereEnv","parameters":[{"description":"Request payload for VSphere cloud account","in":"body","name":"vsphereCloudAccount","required":true,"schema":{"$ref":"#/definitions/v1VsphereCloudAccount"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VsphereEnv"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves vsphere env","tags":["v1"]}},"/v1/clouds/{cloudType}/instance/spotprice":{"get":{"operationId":"V1CloudInstanceSpotPriceGet","parameters":[{"description":"Cloud type [aws/azure/gcp/tencent]","in":"path","name":"cloudType","required":true,"type":"string"},{"description":"Instance type for a specific cloud type","in":"query","name":"instanceType","required":true,"type":"string"},{"description":"Availability zone for a specific cloud type","in":"query","name":"zone","required":true,"type":"string"},{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","format":"date-time","in":"query","name":"timestamp","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CloudSpotPrice"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves the cloud instance spot price based on zone and timestamp for a specific cloud","tags":["v1"]}},"/v1/clouds/{cloud}/compute/{type}/rate":{"get":{"operationId":"V1CloudComputeRate","parameters":[{"description":"cloud for which compute rate is requested","in":"path","name":"cloud","required":true,"type":"string"},{"description":"instance type for which compute rate is requested","in":"path","name":"type","required":true,"type":"string"},{"description":"region for which compute rate is requested","in":"query","name":"region","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CloudCost"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the cloud compute rate","tags":["v1"]}},"/v1/clouds/{cloud}/storage/{type}/rate":{"get":{"operationId":"V1CloudStorageRate","parameters":[{"description":"cloud for which compute rate is requested","in":"path","name":"cloud","required":true,"type":"string"},{"description":"storage type for which compute rate is requested","in":"path","name":"type","required":true,"type":"string"},{"description":"region for which compute rate is requested","in":"query","name":"region","required":true,"type":"string"},{"description":"maxDiskType for which compute rate is requested","in":"query","name":"maxDiskType","type":"integer"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1CloudCost"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the cloud storage rate","tags":["v1"]}},"/v1/clustergroups":{"post":{"operationId":"v1ClusterGroupsCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterGroupEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create cluster groups","tags":["v1"]}},"/v1/clustergroups/developerCredit/usage/{scope}":{"get":{"operationId":"v1ClusterGroupsDeveloperCreditUsageGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster group developer credit usage","schema":{"$ref":"#/definitions/v1ClusterGroupsDeveloperCreditUsage"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get cluster group developer credit usage by scope","tags":["v1"]},"parameters":[{"in":"path","name":"scope","required":true,"type":"string"}]},"/v1/clustergroups/hostCluster":{"get":{"operationId":"v1ClusterGroupsHostClusterSummary","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster groups of host cluster type summary","schema":{"$ref":"#/definitions/v1ClusterGroupsHostClusterSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cluster groups host cluster summary","tags":["v1"]}},"/v1/clustergroups/hostCluster/metadata":{"get":{"operationId":"v1ClusterGroupsHostClusterMetadata","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster groups host cluster metadata items","schema":{"$ref":"#/definitions/v1ClusterGroupsHostClusterMetadata"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cluster groups host cluster metadata","tags":["v1"]}},"/v1/clustergroups/validate/name":{"get":{"operationId":"v1ClusterGroupsValidateName","parameters":[{"in":"query","name":"name","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates the cluster groups name","tags":["v1"]}},"/v1/clustergroups/{uid}":{"delete":{"operationId":"v1ClusterGroupsUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified cluster group","tags":["v1"]},"get":{"operationId":"v1ClusterGroupsUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterGroup"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster groups","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/clustergroups/{uid}/hostCluster":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ClusterGroupsUidHostClusterUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterGroupHostClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates cluster reference and host cluster config","tags":["v1"]}},"/v1/clustergroups/{uid}/meta":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ClusterGroupsUidMetaUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ObjectMeta"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster groups meta","tags":["v1"]}},"/v1/clustergroups/{uid}/packs/resolvedValues":{"get":{"operationId":"v1ClusterGroupsUidPacksResolvedValuesGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroClusterProfilesResolvedValues"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified clustergroup's profile packs resolved values","tags":["v1"]},"parameters":[{"description":"Cluster group uid","in":"path","name":"uid","required":true,"type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterProfilesParamReferenceEntity"}}]},"/v1/clustergroups/{uid}/profiles":{"get":{"operationId":"v1ClusterGroupsUidProfilesGet","parameters":[{"description":"includes pack meta such as schema, presets","in":"query","name":"includePackMeta","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroClusterProfileList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the associated profiles of a specified cluster group","tags":["v1"]},"parameters":[{"description":"ClusterGroup uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ClusterGroupsUidProfilesUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterProfiles"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster groups profiles","tags":["v1"]}},"/v1/clusterprofiles":{"post":{"operationId":"v1ClusterProfilesCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterProfileEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a cluster profile","tags":["v1"]}},"/v1/clusterprofiles/bulk":{"delete":{"operationId":"v1ClusterProfilesBulkDelete","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1BulkDeleteRequest"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1BulkDeleteResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes list of cluster profiles","tags":["v1"]}},"/v1/clusterprofiles/import":{"post":{"operationId":"v1ClusterProfilesImport","parameters":[{"description":"If true then cluster profile will be published post successful import","in":"query","name":"publish","type":"boolean"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterProfileImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports a cluster profile","tags":["v1"]}},"/v1/clusterprofiles/import/file":{"post":{"consumes":["multipart/form-data"],"operationId":"v1ClusterProfilesImportFile","parameters":[{"description":"If true then cluster profile will be published post successful import","in":"query","name":"publish","type":"boolean"},{"description":"Cluster profile import file","in":"formData","name":"importFile","type":"file"},{"default":"json","description":"Cluster profile import file format [\"yaml\", \"json\"]","enum":["yaml","json"],"in":"query","name":"format","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports a cluster profile via file","tags":["v1"]}},"/v1/clusterprofiles/import/validate":{"post":{"operationId":"v1ClusterProfilesImportValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterProfileImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster profile import validated response","schema":{"$ref":"#/definitions/v1ClusterProfileImportEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates cluster profile import","tags":["v1"]}},"/v1/clusterprofiles/macros":{"get":{"operationId":"v1MacrosList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Macros"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of macros","tags":["v1"]}},"/v1/clusterprofiles/validate/name":{"get":{"description":"Validates the cluster profile name and version","operationId":"v1ClusterProfilesValidateNameVersion","parameters":[{"description":"Cluster profile name","in":"query","name":"name","type":"string"},{"description":"Cluster profile version","in":"query","name":"version","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates the cluster profile metadata","tags":["v1"]}},"/v1/clusterprofiles/validate/packs":{"post":{"operationId":"v1ClusterProfilesValidatePacks","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterProfileTemplateDraft"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster profile packs validation response","schema":{"$ref":"#/definitions/v1ClusterProfileValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates cluster profile packs","tags":["v1"]}},"/v1/clusterprofiles/{uid}":{"delete":{"operationId":"v1ClusterProfilesDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified cluster profile","tags":["v1"]},"get":{"operationId":"v1ClusterProfilesGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterProfile"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns a specified cluster profile","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Comma seperated pack meta such as schema, presets","in":"query","name":"includePackMeta","type":"string"}],"put":{"operationId":"v1ClusterProfilesUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterProfileUpdateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster profile","tags":["v1"]}},"/v1/clusterprofiles/{uid}/clone":{"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1ClusterProfilesUidClone","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterProfileCloneEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a clone of the specified cluster profile","tags":["v1"]}},"/v1/clusterprofiles/{uid}/clone/validate":{"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"}],"post":{"description":"Validates the cloned cluster profile name, version and target project uid","operationId":"v1ClusterProfilesUidCloneValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterProfileCloneMetaInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates the cluster profile clone","tags":["v1"]}},"/v1/clusterprofiles/{uid}/export":{"get":{"operationId":"V1ClusterProfilesUidExport","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"Exports cluster profile as a file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Export the specified cluster profile","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"default":"json","description":"Cluster profile export file format [ \"yaml\", \"json\" ]","enum":["yaml","json"],"in":"query","name":"format","type":"string"}]},"/v1/clusterprofiles/{uid}/export/terraform":{"get":{"operationId":"V1ClusterProfilesUidExportTerraform","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"Downloads cluster profile export file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Downloads the specified cluster profile","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"default":"yaml","description":"Cluster profile export file format [ \"yaml\", \"json\" ]","enum":["yaml","json"],"in":"query","name":"format","type":"string"}]},"/v1/clusterprofiles/{uid}/metadata":{"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1ClusterProfilesUidMetadataUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ProfileMetaEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster profile metadata","tags":["v1"]}},"/v1/clusterprofiles/{uid}/packRefs":{"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Cluster profile notification uid","in":"query","name":"notify","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterProfileNotificationUpdateEntity"}}],"patch":{"operationId":"v1ClusterProfilesPacksRefUpdate","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates cluster profile packs ref","tags":["v1"]}},"/v1/clusterprofiles/{uid}/packs":{"get":{"operationId":"v1ClusterProfilesUidPacksGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterProfilePacksEntities"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster profile packs","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Comma seperated pack meta such as schema, presets","in":"query","name":"includePackMeta","type":"string"}],"post":{"operationId":"v1ClusterProfilesUidPacksAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1PackInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds a new pack to the specified cluster profile and returns the created pack uid","tags":["v1"]}},"/v1/clusterprofiles/{uid}/packs/manifests":{"get":{"operationId":"v1ClusterProfilesUidPacksManifestsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterProfilePacksManifests"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster profile pack manifests","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Comma seperated pack meta such as schema, presets","in":"query","name":"includePackMeta","type":"string"}]},"/v1/clusterprofiles/{uid}/packs/resolvedValues":{"get":{"operationId":"v1ClusterProfilesUidPacksResolvedValuesGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1PackResolvedValues"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster profile packs resolved values","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1PackParamsEntity"}}]},"/v1/clusterprofiles/{uid}/packs/{packName}":{"delete":{"operationId":"v1ClusterProfilesUidPacksNameDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified pack information in the cluster profile","tags":["v1"]},"get":{"operationId":"V1ClusterProfilesUidPacksNameGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1PackRefSummaryResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster profile pack","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Cluster profile pack name","in":"path","name":"packName","required":true,"type":"string"}],"put":{"operationId":"v1ClusterProfilesUidPacksNameUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1PackUpdateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified pack information in the cluster profile","tags":["v1"]}},"/v1/clusterprofiles/{uid}/packs/{packName}/config":{"get":{"operationId":"v1ClusterProfilesUidPacksConfigGet","parameters":[{"description":"cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Cluster profile pack name","in":"path","name":"packName","required":true,"type":"string"},{"description":"Cluster profile pack uid","in":"query","name":"packUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster profile pack configurations","schema":{"$ref":"#/definitions/v1ClusterProfilePackConfigList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster profile pack configuration","tags":["v1"]}},"/v1/clusterprofiles/{uid}/packs/{packName}/manifests":{"get":{"operationId":"v1ClusterProfilesUidPacksUidManifests","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ManifestEntities"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the associated manifests for the specified profile's pack","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Cluster profile pack name","in":"path","name":"packName","required":true,"type":"string"}],"post":{"operationId":"v1ClusterProfilesUidPacksNameManifestsAdd","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ManifestInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Adds manifest to the profiles packs and returns the added manifests uid","tags":["v1"]}},"/v1/clusterprofiles/{uid}/packs/{packName}/manifests/{manifestUid}":{"delete":{"operationId":"v1ClusterProfilesUidPacksNameManifestsUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified cluster profile pack manifest","tags":["v1"]},"get":{"operationId":"v1ClusterProfilesUidPacksNameManifestsUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ManifestEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster profile pack manifest","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Cluster profile pack name","in":"path","name":"packName","required":true,"type":"string"},{"description":"Cluster profile pack manifest uid","in":"path","name":"manifestUid","required":true,"type":"string"}],"put":{"operationId":"v1ClusterProfilesUidPacksNameManifestsUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ManifestInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified manifest of the profile's pack","tags":["v1"]}},"/v1/clusterprofiles/{uid}/publish":{"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"description":"Publish the draft cluster profile with next revision, the current draft cluster profile will be marked to published\nand the draft cluster profile will be set to null in the cluster profile template.\n","operationId":"v1ClusterProfilesPublish","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Cluster profile published successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Publishes the specified cluster profile","tags":["v1"]}},"/v1/clusterprofiles/{uid}/spc/download":{"get":{"operationId":"v1ClusterProfilesUidSpcDownload","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"Download cluster profile archive file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Downloads the specified cluster profile","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/clusterprofiles/{uid}/validate/packs":{"post":{"operationId":"v1ClusterProfilesUidValidatePacks","parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterProfileTemplateDraft"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster profile packs validation response","schema":{"$ref":"#/definitions/v1ClusterProfileValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates specified cluster profile packs","tags":["v1"]}},"/v1/clusterprofiles/{uid}/variables":{"delete":{"operationId":"V1ClusterProfilesUidVariablesDelete","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VariableNames"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified cluster profile variables","tags":["v1"]},"get":{"operationId":"V1ClusterProfilesUidVariablesGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Variables"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieve a list of variables defined for the cluster profile","tags":["v1"]},"parameters":[{"description":"Cluster profile uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"V1ClusterProfilesUidVariablesPatch","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Variables"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update specific variables defined for a cluster profile","tags":["v1"]},"put":{"operationId":"V1ClusterProfilesUidVariablesPut","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Variables"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the variables defined for a cluster profile","tags":["v1"]}},"/v1/dashboard/appDeployments":{"post":{"operationId":"v1DashboardAppDeployments","parameters":[{"description":"limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","maximum":20,"name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppDeploymentsFilterSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of application deployment summary items","schema":{"$ref":"#/definitions/v1AppDeploymentsSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of application deployments filter summary Supported filter fields - [\"appDeploymentName\", \"clusterUid\", \"tags\"] Supported sort fields - [\"appDeploymentName\", \"creationTimestamp\", \"lastModifiedTimestamp\"]","tags":["v1"]}},"/v1/dashboard/appProfiles":{"post":{"operationId":"v1DashboardAppProfiles","parameters":[{"description":"limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","maximum":20,"name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AppProfilesFilterSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of application profiles summary items","schema":{"$ref":"#/definitions/v1AppProfilesSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of application profiles filter summary Supported filter fields - [\"profileName\", \"tags\"] Supported sort fields - [\"profileName\", \"creationTimestamp\", \"lastModifiedTimestamp\"]","tags":["v1"]}},"/v1/dashboard/appProfiles/metadata":{"get":{"operationId":"v1DashboardAppProfilesMetadata","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of application profile summary items","schema":{"$ref":"#/definitions/v1AppProfilesMetadata"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of application profile metadata","tags":["v1"]}},"/v1/dashboard/appliances/metadata":{"post":{"operationId":"v1EdgeHostsMetadata","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeHostsMetadataFilter"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of edgehost summary items","schema":{"$ref":"#/definitions/v1EdgeHostsMetadataSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of edgehosts summary","tags":["v1"]}},"/v1/dashboard/cloudaccounts/metadata":{"get":{"operationId":"v1DashboardCloudAccountsMetadata","parameters":[{"in":"query","name":"environment","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cloud accounts summary items","schema":{"$ref":"#/definitions/v1CloudAccountsMetadata"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cloud accounts metadata","tags":["v1"]}},"/v1/dashboard/clustergroups/{uid}/hostClusters":{"post":{"operationId":"v1ClusterGroupUidHostClustersSummary","parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SearchFilterSummarySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster summary items","schema":{"$ref":"#/definitions/v1SpectroClustersSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cluster summary for a given cluster group","tags":["v1"]}},"/v1/dashboard/clustergroups/{uid}/virtualClusters":{"post":{"operationId":"v1ClusterGroupUidVirtualClustersSummary","parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SearchFilterSummarySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster summary items","schema":{"$ref":"#/definitions/v1SpectroClustersSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cluster summary for a given cluster group","tags":["v1"]}},"/v1/dashboard/clusterprofiles":{"post":{"operationId":"v1ClusterProfilesFilterSummary","parameters":[{"description":"limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","maximum":20,"name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterProfilesFilterSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster profiles summary items","schema":{"$ref":"#/definitions/v1ClusterProfilesSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cluster profiles filter summary Supported filter fields - [\"profileName\", \"tags\", \"profileType\", \"environment\"] Supported sort fields - [\"profileName\", \"environment\", \"profileType\", \"creationTimestamp\", \"lastModifiedTimestamp\"]","tags":["v1"]}},"/v1/dashboard/clusterprofiles/metadata":{"get":{"operationId":"v1ClusterProfilesMetadata","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster summary items","schema":{"$ref":"#/definitions/v1ClusterProfilesMetadata"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cluster profiles metadata","tags":["v1"]}},"/v1/dashboard/clusterprofiles/{uid}":{"get":{"operationId":"v1ClusterProfilesUidSummary","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster profile summary response","schema":{"$ref":"#/definitions/v1ClusterProfileSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a specified cluster profile summary","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/dashboard/edgehosts/search":{"post":{"operationId":"v1DashboardEdgehostsSearch","parameters":[{"description":"limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","maximum":20,"name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SearchFilterSummarySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of edgehost summary items","schema":{"$ref":"#/definitions/v1EdgeHostsSearchSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Edgehosts summary with provided search filter. Supported fields as per schema /v1/dashboard/edgehosts/search/schema","tags":["v1"]}},"/v1/dashboard/edgehosts/search/schema":{"get":{"operationId":"v1DashboardEdgehostsSearchSchemaGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of schema items","schema":{"$ref":"#/definitions/v1SearchFilterSchemaSpec"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a schema for the Edgehost search filter","tags":["v1"]}},"/v1/dashboard/pcgs/search":{"post":{"operationId":"v1DashboardPcgsSearchSummary","parameters":[{"description":"limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","maximum":20,"name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SearchFilterSummarySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster summary items","schema":{"$ref":"#/definitions/v1PcgsSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of PCG summary with provided search filter. Supported fields as per schema /v1/dashboard/pcgs/search/schema","tags":["v1"]}},"/v1/dashboard/pcgs/search/schema":{"get":{"operationId":"v1DashboardPcgSearchSchemaGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of schema items","schema":{"$ref":"#/definitions/v1SearchFilterSchemaSpec"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a schema for the PCG search filter","tags":["v1"]}},"/v1/dashboard/projects":{"post":{"operationId":"v1ProjectsFilterSummary","parameters":[{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ProjectsFilterSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of project filter summary items","schema":{"$ref":"#/definitions/v1ProjectsSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"tags":["v1"]}},"/v1/dashboard/projects/metadata":{"get":{"operationId":"v1ProjectsMetadata","parameters":[{"description":"Name of the project","in":"query","name":"name","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of project metadata items","schema":{"$ref":"#/definitions/v1ProjectsMetadata"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of projects metadata","tags":["v1"]}},"/v1/dashboard/spectroclusters/cost":{"post":{"operationId":"v1DashboardSpectroClustersCostSummary","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterCloudCostSummarySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of resources cloud cost summary items","schema":{"$ref":"#/definitions/v1ResourcesCloudCostSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves spectro clusters cloud cost summary information","tags":["v1"]}},"/v1/dashboard/spectroclusters/filters/workspace":{"get":{"operationId":"v1SpectroClustersFiltersWorkspace","parameters":[{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster summary items","schema":{"$ref":"#/definitions/v1SpectroClustersSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of running, non rbac configured clusters in a workspace","tags":["v1"]}},"/v1/dashboard/spectroclusters/metadata":{"get":{"operationId":"v1SpectroClustersMetadataGet","parameters":[{"enum":["hostclusters","strictHostclusters"],"in":"query","name":"quickFilter","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster summary items","schema":{"$ref":"#/definitions/v1SpectroClustersMetadata"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cluster summary metadata","tags":["v1"]},"post":{"operationId":"v1SpectroClustersMetadata","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterMetadataSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster summary items","schema":{"$ref":"#/definitions/v1SpectroClustersMetadata"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cluster summary","tags":["v1"]}},"/v1/dashboard/spectroclusters/metadata/search":{"post":{"operationId":"v1SpectroClustersMetadataSearch","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SearchFilterSummarySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster summary meta items","schema":{"$ref":"#/definitions/v1SpectroClustersMetadataSearch"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cluster metadata with provided search filter spec Supported sort fields - [\"environment\", \"clusterName\", \"clusterState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]","tags":["v1"]}},"/v1/dashboard/spectroclusters/metadata/search/schema":{"get":{"operationId":"v1SpectroClustersMetadataSearchSchema","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster meta schema items","schema":{"$ref":"#/definitions/v1SearchFilterSchemaSpec"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a schema for the cluster metadata search filter","tags":["v1"]}},"/v1/dashboard/spectroclusters/repaveStatus":{"get":{"operationId":"v1DashboardSpectroClustersRepaveList","parameters":[{"description":"limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","maximum":20,"name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"default":"Pending","enum":["Pending","Approved","Reverted"],"in":"query","name":"repaveState","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster summary items","schema":{"$ref":"#/definitions/v1SpectroClustersSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of clusters with the desired repave state","tags":["v1"]}},"/v1/dashboard/spectroclusters/resources/consumption":{"post":{"operationId":"v1SpectroClustersResourcesConsumption","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ResourceConsumptionSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of resource consumption data items","schema":{"$ref":"#/definitions/v1ResourcesConsumption"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves spectro clusters resource consumption","tags":["v1"]}},"/v1/dashboard/spectroclusters/resources/cost":{"post":{"operationId":"v1SpectroClustersResourcesCostSummary","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ResourceCostSummarySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of resources cost summary items","schema":{"$ref":"#/definitions/v1ResourcesCostSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves spectro clusters resources cost summary information","tags":["v1"]}},"/v1/dashboard/spectroclusters/resources/usage":{"post":{"operationId":"v1SpectroClustersResourcesUsageSummary","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ResourceUsageSummarySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of resources usage summary items","schema":{"$ref":"#/definitions/v1ResourcesUsageSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves spectro clusters resources usage summary information","tags":["v1"]}},"/v1/dashboard/spectroclusters/search":{"post":{"operationId":"v1SpectroClustersSearchFilterSummary","parameters":[{"description":"limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","maximum":20,"name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SearchFilterSummarySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster summary items","schema":{"$ref":"#/definitions/v1SpectroClustersSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of cluster summary with provided search filter spec Supported sort fields - [\"environment\", \"clusterName\", \"memoryUsage\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]","tags":["v1"]}},"/v1/dashboard/spectroclusters/search/export":{"get":{"operationId":"v1DashboardClustersSearchSummaryExportGet","parameters":[{"in":"query","name":"encodedFilter","type":"string"},{"default":"csv","enum":["csv"],"in":"query","name":"format","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"OK","headers":{"Content-Disposition":{"type":"string"},"Content-Type":{"type":"string"}},"schema":{"type":"file"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Export and download the list of cluster summary with matching search filter and download as a file(csv)","tags":["v1"]},"post":{"operationId":"v1DashboardClustersSearchSummaryExport","parameters":[{"default":"csv","enum":["csv"],"in":"query","name":"format","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SearchFilterSummarySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Export the list of cluster summary with matching search filter and download as a file(csv) Supported sort fields - [\"environment\", \"clusterName\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]","tags":["v1"]}},"/v1/dashboard/spectroclusters/search/input":{"get":{"operationId":"v1DashboardSpectroClustersSearchInput","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster search filter input items","schema":{"$ref":"#/definitions/v1ClusterSearchInputSpec"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a supported input values for the cluster search filter","tags":["v1"]}},"/v1/dashboard/spectroclusters/search/schema":{"get":{"operationId":"v1SpectroClustersSearchSchema","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster filter schema items","schema":{"$ref":"#/definitions/v1SearchFilterSchemaSpec"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a schema for the cluster search filter","tags":["v1"]}},"/v1/dashboard/spectroclusters/vms":{"get":{"operationId":"V1DashboardVMEnabledClustersList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of schema items","schema":{"$ref":"#/definitions/v1VMClusters"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Virtual machine enabled clusters","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}":{"get":{"operationId":"v1SpectroClustersSummaryUid","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An spectro cluster summary","schema":{"$ref":"#/definitions/v1SpectroClusterUidSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster summary","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/dashboard/spectroclusters/{uid}/cost":{"get":{"operationId":"v1SpectroClustersUidCostSummary","parameters":[{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","format":"date-time","in":"query","name":"startTime","type":"string"},{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","format":"date-time","in":"query","name":"endTime","type":"string"},{"description":"period in minutes, group the data point by the specified period","format":"int32","in":"query","minimum":60,"name":"period","type":"integer"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An spectro cluster cost summary","schema":{"$ref":"#/definitions/v1SpectroClusterCostSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves the specified cluster cost summary","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/dashboard/spectroclusters/{uid}/overview":{"get":{"operationId":"v1SpectroClustersSummaryUidOverview","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An spectro cluster summary overview","schema":{"$ref":"#/definitions/v1SpectroClusterUidSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster summary overview","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/dashboard/spectroclusters/{uid}/resources/consumption":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1SpectroClustersUidResourcesConsumption","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ResourceConsumptionSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of resource consumption data items","schema":{"$ref":"#/definitions/v1ResourcesConsumption"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified spectro cluster resource consumption","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}/workloads":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardSpectroClustersUidWorkloads","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster workloads","schema":{"$ref":"#/definitions/v1ClusterWorkload"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified cluster workloads","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}/workloads/clusterrolebinding":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardSpectroClustersUidWorkloadsClusterRoleBinding","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster workload clusterrolebindings","schema":{"$ref":"#/definitions/v1ClusterWorkloadRoleBindings"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified cluster workload clusterrolebindings","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}/workloads/cronjob":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardSpectroClustersUidWorkloadsCronJob","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster workload cronjobs","schema":{"$ref":"#/definitions/v1ClusterWorkloadCronJobs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified cluster workload cronjobs","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}/workloads/daemonset":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardSpectroClustersUidWorkloadsDaemonSet","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster workload daemonsets","schema":{"$ref":"#/definitions/v1ClusterWorkloadDaemonSets"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified cluster workload daemonsets","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}/workloads/deployment":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardSpectroClustersUidWorkloadsDeployment","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster workload deployments","schema":{"$ref":"#/definitions/v1ClusterWorkloadDeployments"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified cluster workload deployments","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}/workloads/job":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardSpectroClustersUidWorkloadsJob","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster workload jobs","schema":{"$ref":"#/definitions/v1ClusterWorkloadJobs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified cluster workload jobs","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}/workloads/namespace":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardSpectroClustersUidWorkloadsNamespace","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster workload namespaces","schema":{"$ref":"#/definitions/v1ClusterWorkloadNamespaces"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified cluster workload namespaces","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}/workloads/pod":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardSpectroClustersUidWorkloadsPod","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster workload pods","schema":{"$ref":"#/definitions/v1ClusterWorkloadPods"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified cluster workload pods","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}/workloads/rolebinding":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardSpectroClustersUidWorkloadsRoleBinding","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster workload rolebindings","schema":{"$ref":"#/definitions/v1ClusterWorkloadRoleBindings"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified cluster workload rolebindings","tags":["v1"]}},"/v1/dashboard/spectroclusters/{uid}/workloads/statefulset":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardSpectroClustersUidWorkloadsStatefulSet","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster workload statefulsets","schema":{"$ref":"#/definitions/v1ClusterWorkloadStatefulSets"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified cluster workload statefulsets","tags":["v1"]}},"/v1/dashboard/workspaces":{"get":{"operationId":"v1DashboardWorkspacesList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of workspace","schema":{"$ref":"#/definitions/v1DashboardWorkspaces"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of workspace","tags":["v1"]}},"/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/clusterrolebinding":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardWorkspacesUidSpectroClustersWorkloadsClusterRoleBinding","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of clusters workload clusterrolebindings","schema":{"$ref":"#/definitions/v1WorkspaceClustersWorkloadRoleBindings"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified workspace clusters workload clusterrolebindings","tags":["v1"]}},"/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/cronjob":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardWorkspacesUidSpectroClustersWorkloadsCronJob","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of clusters workload cronjobs","schema":{"$ref":"#/definitions/v1WorkspaceClustersWorkloadCronJobs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified workspace clusters workload cronjobs","tags":["v1"]}},"/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/daemonset":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardWorkspacesUidSpectroClustersWorkloadsDaemonSet","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of clusters workload daemonsets","schema":{"$ref":"#/definitions/v1WorkspaceClustersWorkloadDaemonSets"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified workspace clusters workload daemonsets","tags":["v1"]}},"/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/deployment":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardWorkspacesUidSpectroClustersWorkloadsDeployment","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of clusters workload deployments","schema":{"$ref":"#/definitions/v1WorkspaceClustersWorkloadDeployments"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified workspace clusters workload deployments","tags":["v1"]}},"/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/job":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardWorkspacesUidSpectroClustersWorkloadsJob","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of clusters workload jobs","schema":{"$ref":"#/definitions/v1WorkspaceClustersWorkloadJobs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified workspace clusters workload jobs","tags":["v1"]}},"/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/namespace":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardWorkspacesUidSpectroClustersWorkloadsNamespace","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of clusters workload namespaces","schema":{"$ref":"#/definitions/v1WorkspaceClustersWorkloadNamespaces"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified workspace clusters workload namespaces","tags":["v1"]}},"/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/pod":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardWorkspacesUidSpectroClustersWorkloadsPod","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of clusters workload pods","schema":{"$ref":"#/definitions/v1WorkspaceClustersWorkloadPods"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified workspace clusters workload pods","tags":["v1"]}},"/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/rolebinding":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardWorkspacesUidSpectroClustersWorkloadsRoleBinding","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of clusters workload rolebindings","schema":{"$ref":"#/definitions/v1WorkspaceClustersWorkloadRoleBindings"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified workspace clusters workload rolebindings","tags":["v1"]}},"/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/statefulset":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1DashboardWorkspacesUidSpectroClustersWorkloadsStatefulSet","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceWorkloadsSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of clusters workload statefulsets","schema":{"$ref":"#/definitions/v1WorkspaceClustersWorkloadStatefulSets"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves specified workspace clusters workload statefulsets","tags":["v1"]}},"/v1/datasinks/cloudwatch":{"post":{"description":"Sync data to cloud watch","operationId":"V1DataSinksCloudWatchSink","parameters":[{"description":"Request payload for cloud watch config","in":"body","name":"dataSinkCloudWatchConfig","required":true,"schema":{"$ref":"#/definitions/v1.DataSinkCloudWatchConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"sync data to cloud watch","tags":["v1"]}},"/v1/edgehosts":{"post":{"operationId":"v1EdgeHostDevicesCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeHostDeviceEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create the edge host device","tags":["v1"]}},"/v1/edgehosts/metadata":{"get":{"operationId":"v1EdgeHostsMetadataQuickFilterGet","parameters":[{"enum":["libvirt","edge-native","vsphere"],"in":"query","name":"type","type":"string"},{"enum":["unusedEdgeHosts"],"in":"query","name":"quickFilter","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of edge host metadata","schema":{"$ref":"#/definitions/v1EdgeHostsMeta"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of edge hosts metadata matching the filter condition","tags":["v1"]}},"/v1/edgehosts/register":{"post":{"operationId":"v1EdgeHostDevicesRegister","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeHostDevice"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1EdgeHostDevice"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Registers the edge host device","tags":["v1"]}},"/v1/edgehosts/tokens":{"get":{"operationId":"v1EdgeTokensList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of edge tokens","schema":{"$ref":"#/definitions/v1EdgeTokens"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of edge tokens","tags":["v1"]},"post":{"operationId":"v1EdgeTokensCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeTokenEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create the edge token","tags":["v1"]}},"/v1/edgehosts/tokens/{uid}":{"delete":{"operationId":"v1EdgeTokensUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified edge token","tags":["v1"]},"get":{"operationId":"v1EdgeTokensUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1EdgeToken"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified edge token","tags":["v1"]},"parameters":[{"description":"Edge token uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1EdgeTokensUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeTokenUpdate"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified edge token","tags":["v1"]}},"/v1/edgehosts/tokens/{uid}/state":{"parameters":[{"description":"Edge token uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1EdgeTokensUidState","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeTokenActiveState"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Revoke or re-activate the edge token access","tags":["v1"]}},"/v1/edgehosts/{uid}":{"delete":{"operationId":"v1EdgeHostDevicesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified edge host device","tags":["v1"]},"get":{"operationId":"v1EdgeHostDevicesUidGet","parameters":[{"default":false,"description":"resolve pack values if set to true","in":"query","name":"resolvePackValues","type":"boolean"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1EdgeHostDevice"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified edge host device","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1EdgeHostDevicesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeHostDevice"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified edge host device","tags":["v1"]}},"/v1/edgehosts/{uid}/cluster/associate":{"delete":{"operationId":"v1EdgeHostDevicesUidClusterDeassociate","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deassociate the clusters to the edge host","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1EdgeHostDevicesUidClusterAssociate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeHostClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Associate the clusters to the edge host","tags":["v1"]}},"/v1/edgehosts/{uid}/health":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1EdgeHostDevicesHealthUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeHostHealth"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the edge host health","tags":["v1"]}},"/v1/edgehosts/{uid}/hostCheckSum":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1EdgeHostDeviceHostCheckSumUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeHostDeviceHostCheckSum"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the specified edge host device host check sum","tags":["v1"]}},"/v1/edgehosts/{uid}/hostPairingKey":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1EdgeHostDeviceHostPairingKeyUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeHostDeviceHostPairingKey"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the specified edge host device host pairing key","tags":["v1"]}},"/v1/edgehosts/{uid}/meta":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1EdgeHostDevicesUidMetaUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeHostDeviceMetaUpdateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified edge host device meta","tags":["v1"]}},"/v1/edgehosts/{uid}/pack/manifests/{manifestUid}":{"get":{"operationId":"v1EdgeHostDevicesUidPackManifestsUidGet","parameters":[{"description":"edge host uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"manifest uid which is part of the pack ref","in":"path","name":"manifestUid","required":true,"type":"string"},{"default":false,"description":"resolve pack manifest values if set to true","in":"query","name":"resolveManifestValues","type":"boolean"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Pack manifest content","schema":{"$ref":"#/definitions/v1Manifest"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified edge host's manifest","tags":["v1"]}},"/v1/edgehosts/{uid}/packs/status":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1EdgeHostDevicesUidPacksStatusPatch","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterPacksStatusEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Patch update specified edge host's packs status","tags":["v1"]}},"/v1/edgehosts/{uid}/profiles":{"get":{"operationId":"v1EdgeHostDevicesUidProfilesGet","parameters":[{"description":"includes pack meta such as schema, presets","in":"query","name":"includePackMeta","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroClusterProfileList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the associated profiles of a specified edge host device","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1EdgeHostDevicesUidProfilesUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterProfiles"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Associate cluster profiles to the specified edge host device","tags":["v1"]}},"/v1/edgehosts/{uid}/reset":{"parameters":[{"description":"Edge host uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"V1EdgeHostsUidReset","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Reset the cluster through edge host","tags":["v1"]}},"/v1/edgehosts/{uid}/spc/download":{"get":{"operationId":"v1EdgeHostDevicesUidSpcDownload","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download spc archive file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Download the specified edge host device spc","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/edgehosts/{uid}/vsphere/properties":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1EdgeHostDevicesUidVspherePropertiesUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EdgeHostVsphereCloudProperties"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified edge host device vsphere properties","tags":["v1"]}},"/v1/events/components":{"get":{"description":"Returns a paginated list of component events based on request parameters","operationId":"v1EventsComponentsList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of component events items","schema":{"$ref":"#/definitions/v1Events"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns a paginated list of component events based on request parameters","tags":["v1"]},"post":{"description":"Creates a component event","operationId":"v1EventsComponentsCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Event"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a component event","tags":["v1"]}},"/v1/events/components/bulk":{"post":{"description":"Creates the component events in bulk","operationId":"v1EventsComponentsCreateBulk","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1BulkEvents"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","schema":{"$ref":"#/definitions/v1Uids"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates the component events in bulk","tags":["v1"]}},"/v1/events/components/{objectKind}/{objectUid}":{"delete":{"operationId":"v1EventsComponentsObjTypeUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete all the components events for the specified related object","tags":["v1"]},"get":{"description":"Returns a list of components events for the specified related object","operationId":"v1EventsComponentsObjTypeUidList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of component event items","schema":{"$ref":"#/definitions/v1Events"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns a list of components events for the specified related object","tags":["v1"]},"parameters":[{"description":"Describes the related object uid for which events has to be fetched","enum":["spectrocluster","edgehost"],"in":"path","name":"objectKind","required":true,"type":"string"},{"description":"Describes the related object kind for which events has to be fetched","in":"path","name":"objectUid","required":true,"type":"string"}]},"/v1/filters":{"get":{"operationId":"v1FiltersList","parameters":[{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of filters","schema":{"$ref":"#/definitions/v1FiltersSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns a list of Filters","tags":["v1"]}},"/v1/filters/metadata":{"get":{"operationId":"v1FiltersMetadata","parameters":[{"description":"filterType can be - [tag, meta, resource]","in":"query","name":"filterType","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of filters","schema":{"$ref":"#/definitions/v1FiltersMetadata"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns a list of Filters metadata","tags":["v1"]}},"/v1/filters/tag":{"post":{"operationId":"v1TagFiltersCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TagFilter"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a Tag filter","tags":["v1"]}},"/v1/filters/tag/{uid}":{"delete":{"operationId":"v1TagFilterUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the specified Filter object","tags":["v1"]},"get":{"operationId":"v1TagFilterUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"A Filter object","schema":{"$ref":"#/definitions/v1TagFilterSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Filter object","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1TagFilterUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TagFilter"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates a Tag filter","tags":["v1"]}},"/v1/metrics/{resourceKind}/values":{"get":{"description":"Returns all the metrics for a given resource kind","operationId":"v1MetricsList","parameters":[{"enum":["pod","namespace","spectrocluster","machine","project"],"in":"path","name":"resourceKind","required":true,"type":"string"},{"default":"all","in":"query","name":"metricKind","type":"string"},{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","format":"date-time","in":"query","name":"startTime","type":"string"},{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","format":"date-time","in":"query","name":"endTime","type":"string"},{"default":1,"format":"int32","in":"query","name":"period","type":"integer"},{"default":false,"description":"includeMasterMachines in boolean, group the data point by including master nodes if set to true","in":"query","name":"includeMasterMachines","type":"boolean"},{"default":false,"description":"if true then api returns only aggregation values, else api returns all data points by default","in":"query","name":"discrete","type":"boolean"},{"in":"query","name":"spectroClusterUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of metric items","schema":{"$ref":"#/definitions/v1MetricTimeSeriesList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves the list of metrics for a specified resource kind","tags":["v1"]}},"/v1/metrics/{resourceKind}/{resourceUid}/values":{"delete":{"operationId":"v1MetricsUidDelete","parameters":[{"enum":["pod","namespace","spectrocluster","machine","project"],"in":"path","name":"resourceKind","required":true,"type":"string"},{"in":"path","name":"resourceUid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the metrics of the specified resource","tags":["v1"]},"get":{"operationId":"v1MetricsUidList","parameters":[{"enum":["pod","namespace","spectrocluster","machine","project"],"in":"path","name":"resourceKind","required":true,"type":"string"},{"in":"path","name":"resourceUid","required":true,"type":"string"},{"default":"all","description":"multiple metric kinds can be provided with comma separated","in":"query","name":"metricKind","type":"string"},{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","format":"date-time","in":"query","name":"startTime","type":"string"},{"description":"Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.","format":"date-time","in":"query","name":"endTime","type":"string"},{"default":1,"description":"period in minutes, group the data point by the specified period","format":"int32","in":"query","name":"period","type":"integer"},{"default":false,"description":"includeMasterMachines in boolean, group the data point by including master nodes if set to true","in":"query","name":"includeMasterMachines","type":"boolean"},{"default":false,"description":"if true then api returns only aggregation values, else api returns all data points by default","in":"query","name":"discrete","type":"boolean"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of metric items","schema":{"$ref":"#/definitions/v1MetricTimeSeries"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the metrics for a specified resource uid","tags":["v1"]}},"/v1/notifications/":{"get":{"description":"Returns a paginated list of notifications based on request parameters","operationId":"v1NotificationsList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"}],"responses":{"200":{"description":"An array of notification items","schema":{"$ref":"#/definitions/v1Notifications"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns a paginated list of notifications based on request parameters","tags":["v1"]}},"/v1/notifications/events":{"post":{"description":"Creates a notification event","operationId":"v1NotificationsEventCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1NotificationEvent"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a notification event","tags":["v1"]}},"/v1/notifications/{objectKind}/{objectUid}":{"get":{"description":"Returns a list of notifications for the specified related object","operationId":"v1NotificationsObjTypeUidList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"}],"responses":{"200":{"description":"An array of component event items","schema":{"$ref":"#/definitions/v1Notifications"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns a list of notifications for the specified related object","tags":["v1"]},"parameters":[{"description":"Describes the related object kind for which notifications have to be fetched","enum":["spectrocluster","clusterprofile","appdeployment"],"in":"path","name":"objectKind","required":true,"type":"string"},{"description":"Describes the related object uid for which notifications have to be fetched","in":"path","name":"objectUid","required":true,"type":"string"},{"description":"Describes a way to fetch \"done\" notifications","in":"query","name":"isDone","type":"string"}]},"/v1/notifications/{uid}/ack":{"parameters":[{"description":"Describes acknowledging notification uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"description":"Updates the specified notification for the acknowledgment","operationId":"v1NotificationsUidAck","responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified notification for the acknowledgment","tags":["v1"]}},"/v1/notifications/{uid}/done":{"parameters":[{"description":"Describes notification uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"description":"Updates the specified notification action as done","operationId":"v1NotificationsUidDone","responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified notification action as done","tags":["v1"]}},"/v1/overlords":{"get":{"operationId":"v1OverlordsList","parameters":[{"in":"query","name":"name","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1Overlords"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of overlords owned by the tenant","tags":["v1"]}},"/v1/overlords/maas/manifest":{"get":{"operationId":"V1OverlordsMaasManifest","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OverlordManifest"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the manifests required for the private gateway installation","tags":["v1"]},"parameters":[{"in":"query","name":"pairingCode","required":true,"type":"string"}]},"/v1/overlords/maas/{uid}/account":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1OverlordsUidMaasAccountCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordMaasAccountCreate"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"create the maas cloudaccount for the private gateway","tags":["v1"]},"put":{"operationId":"v1OverlordsUidMaasAccountUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordMaasAccountEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"update the maas cloudaccount for the private gateway","tags":["v1"]}},"/v1/overlords/maas/{uid}/account/validate":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1OverlordsUidMaasAccountValidate","parameters":[{"in":"body","name":"body","schema":{"properties":{"account":{"$ref":"#/definitions/v1MaasCloudAccount"}}}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"validate the maas cloudaccount for the private gateway","tags":["v1"]}},"/v1/overlords/maas/{uid}/cloudconfig":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"V1OverlordsUidMaasCloudConfigCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordMaasCloudConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"create the maas cloud config for the private gateway","tags":["v1"]},"put":{"operationId":"V1OverlordsUidMaasCloudConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordMaasCloudConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"update the maas cloud config for the private gateway","tags":["v1"]}},"/v1/overlords/maas/{uid}/clusterprofile":{"get":{"operationId":"v1OverlordsUidMaasClusterProfile","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterProfile"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified maas private gateway cluster profile","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/overlords/migrate":{"post":{"operationId":"V1OverlordsMigrate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordMigrateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"migrate all the clusters from source overlord to target overlord","tags":["v1"]}},"/v1/overlords/openstack/manifest":{"get":{"operationId":"v1OverlordsOpenStackManifest","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OverlordManifest"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the manifests required for the private gateway installation","tags":["v1"]},"parameters":[{"in":"query","name":"pairingCode","required":true,"type":"string"}]},"/v1/overlords/openstack/{uid}/account":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1OverlordsUidOpenStackAccountCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordOpenStackAccountCreate"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"create the OpenStack cloudaccount for the private gateway","tags":["v1"]},"put":{"operationId":"v1OverlordsUidOpenStackAccountUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordOpenStackAccountEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"update the OpenStack cloudaccount for the private gateway","tags":["v1"]}},"/v1/overlords/openstack/{uid}/account/validate":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1OverlordsUidOpenStackAccountValidate","parameters":[{"in":"body","name":"body","schema":{"properties":{"account":{"$ref":"#/definitions/v1OpenStackCloudAccount"}}}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"validate the OpenStack cloudaccount for the private gateway","tags":["v1"]}},"/v1/overlords/openstack/{uid}/cloudconfig":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1OverlordsUidOpenStackCloudConfigCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordOpenStackCloudConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"create the OpenStack cloud config for the private gateway","tags":["v1"]},"put":{"operationId":"v1OverlordsUidOpenStackCloudConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordOpenStackCloudConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"update the OpenStack cloud config for the private gateway","tags":["v1"]}},"/v1/overlords/openstack/{uid}/clusterprofile":{"get":{"operationId":"v1OverlordsUidOpenStackClusterProfile","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterProfile"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified OpenStack private gateway cluster profile","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/overlords/pairing/code":{"get":{"operationId":"v1OverlordsPairingCode","parameters":[{"enum":["vsphere","openstack","maas"],"in":"query","name":"cloudType","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1PairingCode"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the pairing code for the private gateway","tags":["v1"]}},"/v1/overlords/vsphere/manifest":{"get":{"operationId":"v1OverlordsVsphereManifest","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OverlordManifest"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the manifests required for the private gateway installation","tags":["v1"]},"parameters":[{"in":"query","name":"pairingCode","required":true,"type":"string"}]},"/v1/overlords/vsphere/ova":{"get":{"operationId":"v1OverlordsVsphereOvaGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OverloadVsphereOva"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns overlord's ova information","tags":["v1"]}},"/v1/overlords/vsphere/{uid}/account":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1OverlordsUidVsphereAccountCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordVsphereAccountCreate"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"create the vSphere cloudaccount for the private gateway","tags":["v1"]},"put":{"operationId":"v1OverlordsUidVsphereAccountUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordVsphereAccountEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"update the vSphere cloudaccount for the private gateway","tags":["v1"]}},"/v1/overlords/vsphere/{uid}/account/validate":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1OverlordsUidVsphereAccountValidate","parameters":[{"in":"body","name":"body","schema":{"properties":{"account":{"$ref":"#/definitions/v1VsphereCloudAccount"}}}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"validate the vSphere cloudaccount for the private gateway","tags":["v1"]}},"/v1/overlords/vsphere/{uid}/cloudconfig":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1OverlordsUidVsphereCloudConfigCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordVsphereCloudConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"create the vSphere cloud config for the private gateway","tags":["v1"]},"put":{"operationId":"v1OverlordsUidVsphereCloudConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OverlordVsphereCloudConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"update the vSphere cloud config for the private gateway","tags":["v1"]}},"/v1/overlords/vsphere/{uid}/clusterprofile":{"get":{"operationId":"v1OverlordsUidVsphereClusterProfile","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterProfile"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified vsphere private gateway cluster profile","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/overlords/vsphere/{uid}/pools":{"get":{"operationId":"v1OverlordsUidPoolsList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1IpPools"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of IP Pools for the specified private gateway","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1OverlordsUidPoolCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1IpPoolInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an IP pool defintion for the sepcified private gateway","tags":["v1"]}},"/v1/overlords/vsphere/{uid}/pools/{poolUid}":{"delete":{"operationId":"v1OverlordsUidPoolDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the private gateways's specified IP Pool data","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"poolUid","required":true,"type":"string"}],"put":{"operationId":"v1OverlordsUidPoolUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1IpPoolInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the private gateways's specified IP Pool data","tags":["v1"]}},"/v1/overlords/vsphere/{uid}/properties/computecluster/resources":{"get":{"operationId":"v1OverlordsUidVsphereComputeclusterRes","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VsphereComputeClusterResources"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves the vSphere computecluster resources for the specified private gateway's account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"query","name":"datacenter","required":true,"type":"string"},{"in":"query","name":"computecluster","required":true,"type":"string"}]},"/v1/overlords/vsphere/{uid}/properties/datacenters":{"get":{"operationId":"v1OverlordsUidVsphereDatacenters","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VsphereDatacenters"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves the vSphere datacenters \u0026 datacluster for the specified private gateway's account","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/overlords/{uid}":{"delete":{"operationId":"v1OverlordsUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1DeletedMsg"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"delete the private gateway","tags":["v1"]},"get":{"operationId":"v1OverlordsUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1Overlord"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified private gateway's for the given uid","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/overlords/{uid}/metadata":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1OverlordsUidMetadataUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ObjectMetaInputEntitySchema"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"update the private gateway's metadata","tags":["v1"]}},"/v1/overlords/{uid}/reset":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1OverlordsUidReset","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1UpdatedMsg"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"reset the private gateway by disaaociating the private gateway's resources","tags":["v1"]}},"/v1/packs":{"delete":{"operationId":"v1PacksSummaryDelete","parameters":[{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1DeleteMeta"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the packs","tags":["v1"]},"get":{"operationId":"v1PacksSummaryList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of pack summary items","schema":{"$ref":"#/definitions/v1PackSummaries"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of packs","tags":["v1"]}},"/v1/packs/search":{"post":{"operationId":"v1PacksSearch","parameters":[{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1PacksFilterSpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of pack summary items","schema":{"$ref":"#/definitions/v1PackMetadataList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of packs based on filter","tags":["v1"]}},"/v1/packs/{packName}/registries/{registryUid}":{"get":{"operationId":"v1PacksNameRegistryUidList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1PackTagEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of packs","tags":["v1"]},"parameters":[{"description":"Pack registry uid","in":"path","name":"registryUid","required":true,"type":"string"},{"description":"Pack name","in":"path","name":"packName","required":true,"type":"string"},{"default":"all","description":"Pack cloud type","in":"query","name":"cloudType","type":"string"},{"description":"Pack layer","in":"query","name":"layer","type":"string"},{"description":"Comma seperated pack states. Example values are \"deprecated\" \"deprecated,disabled\". If states is not specified or empty then by default API will return all packs except \"disabled\" packs","in":"query","name":"states","type":"string"}]},"/v1/packs/{packUid}/logo":{"get":{"operationId":"v1PacksPackUidLogo","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["image/png","image/gif","image/jpeg"],"responses":{"200":{"description":"OK","headers":{"Cache-Control":{"description":"Cache control directive for the response","type":"string"},"Expires":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the logo for a specified pack","tags":["v1"]},"parameters":[{"description":"Pack uid","in":"path","name":"packUid","required":true,"type":"string"}]},"/v1/packs/{uid}":{"get":{"operationId":"v1PacksUid","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"A pack for the specified uid","schema":{"$ref":"#/definitions/v1PackTagEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified pack","tags":["v1"]},"parameters":[{"description":"Pack uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/packs/{uid}/readme":{"get":{"operationId":"v1PacksUidReadme","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Readme describes the documentation of the specified pack","schema":{"$ref":"#/definitions/v1PackReadme"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the readme of a specified pack","tags":["v1"]},"parameters":[{"description":"Pack uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/pcg/selfHosted":{"post":{"operationId":"v1PcgSelfHosted","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1PcgSelfHostedParams"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1PcgServiceKubectlCommands"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the private gateway manifest link","tags":["v1"]}},"/v1/pcg/{uid}/register":{"post":{"operationId":"v1PcgUidRegister","parameters":[{"in":"body","name":"pairingCode","schema":{"$ref":"#/definitions/v1PairingCode"}},{"in":"path","name":"uid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Registers the pcg","tags":["v1"]}},"/v1/pcg/{uid}/services/ally/manifest":{"get":{"operationId":"v1PcgUidAllyManifestGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the pcg ally manifest","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/pcg/{uid}/services/jet/manifest":{"get":{"operationId":"v1PcgUidJetManifestGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the pcg jet manifest","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/permissions":{"get":{"operationId":"v1PermissionsList","parameters":[{"enum":["system","tenant","project","resource"],"in":"query","name":"scope","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of permissions","schema":{"$ref":"#/definitions/v1Permissions"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of permissions","tags":["v1"]}},"/v1/projects":{"get":{"description":"Deprecated: Use POST /v1/dashboard/projects","operationId":"v1ProjectsList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of projects","schema":{"$ref":"#/definitions/v1Projects"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of projects","tags":["v1"]},"post":{"operationId":"v1ProjectsCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ProjectEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a project","tags":["v1"]}},"/v1/projects/alerts":{"get":{"operationId":"v1ProjectsAlerts","responses":{"200":{"description":"An array of alert components","schema":{"$ref":"#/definitions/v1ProjectAlertComponents"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of supported alerts for a project","tags":["v1"]}},"/v1/projects/{uid}":{"delete":{"operationId":"v1ProjectsUidDelete","parameters":[{"in":"query","name":"cleanupProjectResources","type":"boolean"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ProjectCleanup"}}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified project","tags":["v1"]},"get":{"operationId":"v1ProjectsUidGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Project"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified project","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ProjectsUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ProjectEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified project","tags":["v1"]}},"/v1/projects/{uid}/alerts/{component}":{"delete":{"operationId":"v1ProjectsUidAlertDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified alert to the specified project","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"component","required":true,"type":"string"}],"post":{"operationId":"v1ProjectsUidAlertCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Channel"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create the specified alert to the specified project","tags":["v1"]},"put":{"operationId":"v1ProjectsUidAlertUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AlertEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Upsert the specified alert to the specified project","tags":["v1"]}},"/v1/projects/{uid}/alerts/{component}/{alertUid}":{"delete":{"operationId":"v1ProjectsUidAlertsUidDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified alert of the specified project","tags":["v1"]},"get":{"operationId":"v1ProjectsUidAlertsUidGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Channel"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the specified alert of the specified project","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"component","required":true,"type":"string"},{"in":"path","name":"alertUid","required":true,"type":"string"}],"put":{"operationId":"v1ProjectsUidAlertsUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Channel"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the specified alert of the specified project","tags":["v1"]}},"/v1/projects/{uid}/macros":{"delete":{"operationId":"v1ProjectsUidMacrosDeleteByMacroName","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the macros for the specified project by macro name","tags":["v1"]},"get":{"operationId":"v1ProjectsUidMacrosList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Macros"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"List the macros of the specified project","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1ProjectsUidMacrosUpdateByMacroName","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the macros for the specified project by macro name","tags":["v1"]},"post":{"operationId":"v1ProjectsUidMacrosCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create or add new macros for the specified project","tags":["v1"]},"put":{"operationId":"v1ProjectsUidMacrosUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the macros of the specified project","tags":["v1"]}},"/v1/projects/{uid}/meta":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ProjectsUidMetaUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ObjectMeta"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the metadata of the specified project","tags":["v1"]}},"/v1/projects/{uid}/preferences/clusterSettings":{"get":{"operationId":"v1ProjectClusterSettingsGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1ProjectClusterSettings"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get project cluster settings","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/projects/{uid}/preferences/clusterSettings/nodesAutoRemediationSetting":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ProjectClustersNodesAutoRemediationSettingUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1NodesAutoRemediationSettings"}}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update project clusters nodes auto remediation setting","tags":["v1"]}},"/v1/projects/{uid}/teams":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ProjectsUidTeamsUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ProjectTeamsEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the teams association to the specified project","tags":["v1"]}},"/v1/projects/{uid}/users":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ProjectsUidUsersUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ProjectUsersEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the users association to the specified project","tags":["v1"]}},"/v1/projects/{uid}/validate":{"delete":{"operationId":"v1ProjectsUidValidate","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1ProjectActiveResources"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validate and returns active resource of project before delete","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/registries/helm":{"get":{"operationId":"v1RegistriesHelmList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of registry items","schema":{"$ref":"#/definitions/v1HelmRegistries"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Helm registries","tags":["v1"]},"parameters":[{"default":"all","enum":["system","tenant","all"],"in":"query","name":"scope","type":"string"}],"post":{"operationId":"v1RegistriesHelmCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1HelmRegistryEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a helm registry","tags":["v1"]}},"/v1/registries/helm/summary":{"get":{"operationId":"v1RegistriesHelmSummaryList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of registry items","schema":{"$ref":"#/definitions/v1HelmRegistriesSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of helm registries as summary","tags":["v1"]},"parameters":[{"default":"all","enum":["system","tenant","all"],"in":"query","name":"scope","type":"string"}]},"/v1/registries/helm/validate":{"post":{"description":"Returns no contents if helm registry is valid else error.","operationId":"V1RegistriesHelmValidate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1HelmRegistrySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Check if helm registry is valid","tags":["v1"]}},"/v1/registries/helm/{uid}":{"delete":{"operationId":"v1RegistriesHelmUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified helm registry","tags":["v1"]},"get":{"operationId":"v1RegistriesHelmUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1HelmRegistry"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Helm registry","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1RegistriesHelmUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1HelmRegistry"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified helm registry","tags":["v1"]}},"/v1/registries/helm/{uid}/sync":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"default":false,"in":"query","name":"forceSync","type":"boolean"}],"post":{"description":"Sync all the helm charts from the registry","operationId":"v1RegistriesHelmUidSync","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"202":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Sync Helm registry","tags":["v1"]}},"/v1/registries/helm/{uid}/sync/status":{"get":{"description":"Get the sync status for the specified helm registry","operationId":"v1RegistriesHelmUidSyncStatus","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Helm registry sync status","schema":{"$ref":"#/definitions/v1RegistrySyncStatus"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get helm registry sync status","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/registries/metadata":{"get":{"operationId":"v1RegistriesMetadata","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of registry metadata items","schema":{"$ref":"#/definitions/v1RegistriesMetadata"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of registries metadata","tags":["v1"]},"parameters":[{"default":"all","enum":["system","tenant","all"],"in":"query","name":"scope","type":"string"}]},"/v1/registries/oci/basic":{"post":{"operationId":"v1BasicOciRegistriesCreate","parameters":[{"default":false,"in":"query","name":"skipPackSync","type":"boolean"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1BasicOciRegistry"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a basic oci registry","tags":["v1"]}},"/v1/registries/oci/basic/validate":{"post":{"description":"Returns no contents if oci registry is valid else error.","operationId":"v1BasicOciRegistriesValidate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1BasicOciRegistrySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Check if oci registry is valid","tags":["v1"]}},"/v1/registries/oci/ecr":{"post":{"operationId":"v1EcrRegistriesCreate","parameters":[{"default":false,"in":"query","name":"skipPackSync","type":"boolean"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EcrRegistry"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a ecr registry","tags":["v1"]}},"/v1/registries/oci/ecr/validate":{"post":{"description":"Returns no contents if ecr registry is valid else error.","operationId":"v1EcrRegistriesValidate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1EcrRegistrySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Check if ecr registry is valid","tags":["v1"]}},"/v1/registries/oci/image":{"get":{"operationId":"v1OciImageRegistryGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1OciImageRegistry"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a image registry","tags":["v1"]}},"/v1/registries/oci/summary":{"get":{"operationId":"v1OciRegistriesSummary","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of oci registry items","schema":{"$ref":"#/definitions/v1OciRegistries"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a oci registries summary","tags":["v1"]}},"/v1/registries/oci/{uid}":{"get":{"operationId":"v1OciRegistriesGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1OciRegistryEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the information of specified oci registry","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"query","name":"clusterUid","type":"string"}]},"/v1/registries/oci/{uid}/basic":{"delete":{"operationId":"v1BasicOciRegistriesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified basic oci registry","tags":["v1"]},"get":{"operationId":"v1BasicOciRegistriesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1BasicOciRegistry"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the basic oci registry","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1BasicOciRegistriesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1BasicOciRegistry"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified basic oci registry","tags":["v1"]}},"/v1/registries/oci/{uid}/basic/sync":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"default":false,"in":"query","name":"forceSync","type":"boolean"}],"post":{"description":"Sync all the content from the oci registry","operationId":"v1BasicOciRegistriesUidSync","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"202":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Sync oci registry","tags":["v1"]}},"/v1/registries/oci/{uid}/basic/sync/status":{"get":{"description":"Get sync status for the oci specified registry","operationId":"v1BasicOciRegistriesUidSyncStatus","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Oci registry sync status","schema":{"$ref":"#/definitions/v1RegistrySyncStatus"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get oci registry sync status","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/registries/oci/{uid}/ecr":{"delete":{"operationId":"v1EcrRegistriesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified ecr registry","tags":["v1"]},"get":{"operationId":"v1EcrRegistriesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1EcrRegistry"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified ecr registry","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1EcrRegistriesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1EcrRegistry"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified ecr registry","tags":["v1"]}},"/v1/registries/oci/{uid}/ecr/sync":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"default":false,"in":"query","name":"forceSync","type":"boolean"}],"post":{"description":"Sync all the content from the ecr registry","operationId":"v1EcrRegistriesUidSync","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"202":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Sync ecr registry","tags":["v1"]}},"/v1/registries/oci/{uid}/ecr/sync/status":{"get":{"description":"Get sync status for the ecr specified registry","operationId":"v1EcrRegistriesUidSyncStatus","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Ecr registry sync status","schema":{"$ref":"#/definitions/v1RegistrySyncStatus"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get ecr registry sync status","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/registries/pack":{"get":{"operationId":"v1RegistriesPackList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of registry items","schema":{"$ref":"#/definitions/v1PackRegistries"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of Pack registries","tags":["v1"]},"parameters":[{"default":"all","enum":["system","tenant","all"],"in":"query","name":"scope","type":"string"}],"post":{"operationId":"v1RegistriesPackCreate","parameters":[{"default":false,"in":"query","name":"skipPackSync","type":"boolean"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1PackRegistry"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a pack registry","tags":["v1"]}},"/v1/registries/pack/summary":{"get":{"operationId":"v1RegistriesPackSummaryList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of registry items","schema":{"$ref":"#/definitions/v1PackRegistriesSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of pack registries as summary","tags":["v1"]},"parameters":[{"default":"all","enum":["system","tenant","all"],"in":"query","name":"scope","type":"string"}]},"/v1/registries/pack/validate":{"post":{"description":"Returns no contents if pack registry is valid else error.","operationId":"V1RegistriesPackValidate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1PackRegistrySpec"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Check if pack registry is valid","tags":["v1"]}},"/v1/registries/pack/{uid}":{"delete":{"operationId":"v1RegistriesPackUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified pack registry","tags":["v1"]},"get":{"operationId":"v1RegistriesPackUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1PackRegistry"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Pack registry","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1RegistriesPackUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1PackRegistry"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified pack registry","tags":["v1"]}},"/v1/registries/pack/{uid}/sync":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"default":false,"in":"query","name":"forceSync","type":"boolean"}],"post":{"description":"Sync all the packs from the registry","operationId":"v1RegistriesPackUidSync","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"202":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Sync Pack registry","tags":["v1"]}},"/v1/registries/pack/{uid}/sync/status":{"get":{"description":"Get sync status for the pack specified registry","operationId":"v1RegistriesPackUidSyncStatus","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Pack registry sync status","schema":{"$ref":"#/definitions/v1RegistrySyncStatus"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get pack registry sync status","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/registries/{registryName}/config":{"get":{"operationId":"v1RegistriesNameConfigGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1RegistryConfigEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified system scope registry configuration","tags":["v1"]},"parameters":[{"in":"path","name":"registryName","required":true,"type":"string"}]},"/v1/registries/{uid}":{"delete":{"operationId":"v1RegistriesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified registry","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/roles":{"get":{"operationId":"v1RolesList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Roles"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of roles","tags":["v1"]},"post":{"operationId":"v1RolesCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Role"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a role with specified permissions","tags":["v1"]}},"/v1/roles/{uid}":{"delete":{"operationId":"v1RolesUidDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified role","tags":["v1"]},"get":{"operationId":"v1RolesUidGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Role"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified role","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1RolesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Role"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified role","tags":["v1"]}},"/v1/roles/{uid}/clone":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1RolesClone","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1RoleClone"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Clone the role","tags":["v1"]}},"/v1/services/{serviceName}/version":{"get":{"operationId":"v1ServiceVersionGet","parameters":[{"description":"service name","enum":["ally","jet","palette","ambit","ally-lite","palette-lite","crony","tick","edge","lodge","level","edgeconfig","firth","stylus"],"in":"path","name":"serviceName","required":true,"type":"string"},{"description":"spectro cluster uid","in":"query","name":"clusterUid","type":"string"},{"description":"edge host uid","in":"query","name":"edgeHostUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ServiceVersion"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns a latest version for a given service name","tags":["v1"]}},"/v1/services/{serviceName}/versions/{version}/manifest":{"get":{"operationId":"v1ServiceManifestGet","parameters":[{"description":"service name","enum":["ally","jet","palette","ambit","ally-lite","palette-lite","crony","tick","edge","lodge","level","edgeconfig","firth","stylus"],"in":"path","name":"serviceName","required":true,"type":"string"},{"description":"service version","in":"path","name":"version","required":true,"type":"string"},{"description":"action type","enum":["apply","delete","resources"],"in":"query","name":"action","required":true,"type":"string"},{"description":"resource file name","in":"query","name":"resourceFilename","type":"string"},{"description":"spectro cluster uid","in":"query","name":"clusterUid","type":"string"},{"description":"edge host uid","in":"query","name":"edgeHostUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ServiceManifest"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns a service manifest for a given service name and version","tags":["v1"]}},"/v1/spectroclusters/agents/{messageKey}/notify":{"post":{"operationId":"V1SpectroClustersAgentsNotify","parameters":[{"in":"path","name":"messageKey","required":true,"type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClustersAgentsNotifyEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"tags":["v1"]}},"/v1/spectroclusters/aks":{"post":{"operationId":"v1SpectroClustersAksCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAzureClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an AKS cluster","tags":["v1"]}},"/v1/spectroclusters/aks/rate":{"post":{"operationId":"v1SpectroClustersAksRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAzureClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Aks Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get AKS cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/aks/validate":{"post":{"operationId":"v1SpectroClustersAksValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAzureClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Aks Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates AKS cluster create operation","tags":["v1"]}},"/v1/spectroclusters/aws":{"post":{"operationId":"v1SpectroClustersAwsCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAwsClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an AWS cluster","tags":["v1"]}},"/v1/spectroclusters/aws/import":{"post":{"operationId":"v1SpectroClustersAwsImport","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAwsClusterImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports an AWS cluster","tags":["v1"]}},"/v1/spectroclusters/aws/rate":{"post":{"operationId":"v1SpectroClustersAwsRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAwsClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Aws Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get AWS cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/aws/validate":{"post":{"operationId":"v1SpectroClustersAwsValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAwsClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Aws Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates AWS cluster create operation","tags":["v1"]}},"/v1/spectroclusters/azure":{"post":{"operationId":"v1SpectroClustersAzureCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAzureClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an Azure cluster","tags":["v1"]}},"/v1/spectroclusters/azure/import":{"post":{"operationId":"v1SpectroClustersAzureImport","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAzureClusterImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports an Azure cluster","tags":["v1"]}},"/v1/spectroclusters/azure/rate":{"post":{"operationId":"v1SpectroClustersAzureRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAzureClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Azure Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get Azure cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/azure/validate":{"post":{"operationId":"v1SpectroClustersAzureValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroAzureClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Azure Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates Azure cluster create operation","tags":["v1"]}},"/v1/spectroclusters/cloudTypes/{cloudType}":{"parameters":[{"description":"Cluster's cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"post":{"operationId":"v1SpectroClustersCustomCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroCustomClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a Custom cluster","tags":["v1"]}},"/v1/spectroclusters/cloudTypes/{cloudType}/validate":{"parameters":[{"description":"Cluster's cloud type","in":"path","name":"cloudType","required":true,"type":"string"}],"post":{"operationId":"v1SpectroClustersCustomValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroCustomClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Custom Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates Custom cluster create operation","tags":["v1"]}},"/v1/spectroclusters/config/edgeInstaller":{"get":{"operationId":"v1SpectroClustersConfigEdgeInstaller","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1ClusterEdgeInstallerConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Cluster configuration for the edge installer","tags":["v1"]}},"/v1/spectroclusters/coxedge":{"post":{"operationId":"v1SpectroClustersCoxEdgeCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroCoxEdgeClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a CoxEdge cluster","tags":["v1"]}},"/v1/spectroclusters/coxedge/rate":{"post":{"operationId":"v1SpectroClustersCoxEdgeRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroCoxEdgeClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Azure Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get Cox Edge cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/coxedge/validate":{"post":{"operationId":"v1SpectroClustersCoxEdgeValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroCoxEdgeClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Azure Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates Cox Edge cluster create operation","tags":["v1"]}},"/v1/spectroclusters/edge":{"post":{"operationId":"v1SpectroClustersEdgeCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEdgeClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a Edge cluster","tags":["v1"]}},"/v1/spectroclusters/edge-native":{"post":{"operationId":"v1SpectroClustersEdgeNativeCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEdgeNativeClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an EdgeNative cluster","tags":["v1"]}},"/v1/spectroclusters/edge-native/import":{"post":{"operationId":"v1SpectroClustersEdgeNativeImport","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEdgeNativeClusterImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports an EdgeNative cluster","tags":["v1"]}},"/v1/spectroclusters/edge-native/rate":{"post":{"operationId":"v1SpectroClustersEdgeNativeRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEdgeNativeClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"EdgeNative Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get edge-native cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/edge-native/validate":{"post":{"operationId":"v1SpectroClustersEdgeNativeValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEdgeNativeClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"EdgeNative Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates edge-native cluster create operation","tags":["v1"]}},"/v1/spectroclusters/edge/import":{"post":{"operationId":"v1SpectroClustersEdgeImport","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEdgeClusterImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports an Edge cluster","tags":["v1"]}},"/v1/spectroclusters/edge/rate":{"post":{"operationId":"v1SpectroClustersEdgeRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEdgeClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Edge Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get edge cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/edge/validate":{"post":{"operationId":"v1SpectroClustersEdgeValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEdgeClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"edge Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates edge cluster create operation","tags":["v1"]}},"/v1/spectroclusters/eks":{"post":{"operationId":"v1SpectroClustersEksCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEksClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an EKS cluster","tags":["v1"]}},"/v1/spectroclusters/eks/rate":{"post":{"operationId":"v1SpectroClustersEksRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEksClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Eks Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get EKS cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/eks/validate":{"post":{"operationId":"v1SpectroClustersEksValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroEksClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Eks Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates EKS cluster create operation","tags":["v1"]}},"/v1/spectroclusters/features/backup/locations/{uid}":{"get":{"operationId":"V1ClusterFeatureBackupLocationUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterRefs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the cluster object references based on locationUid","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"V1ClusterFeatureBackupLocationUidChange","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterBackupLocationType"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Change cluster backup location","tags":["v1"]}},"/v1/spectroclusters/features/logFetcher/{uid}/download":{"get":{"operationId":"v1ClusterFeatureLogFetcherLogDownload","parameters":[{"in":"query","name":"fileName","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"OK","headers":{"Content-Disposition":{"type":"string"},"Content-Type":{"type":"string"}},"schema":{"type":"file"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Download log fetcher logs for cluster by log fetcher uid","tags":["v1"]},"parameters":[{"description":"Cluster uid for which log is requested","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/features/logFetcher/{uid}/log":{"parameters":[{"description":"Cluster uid for which log is requested","in":"path","name":"uid","required":true,"type":"string"}],"post":{"consumes":["multipart/form-data"],"operationId":"v1ClusterFeatureLogFetcherLogUpdate","parameters":[{"description":"Log file by agent","in":"formData","name":"fileName","type":"file"},{"description":"Unique request Id","in":"query","name":"requestId","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update log fetcher logs by log fetcher uid","tags":["v1"]}},"/v1/spectroclusters/gcp":{"post":{"operationId":"v1SpectroClustersGcpCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroGcpClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a GCP cluster","tags":["v1"]}},"/v1/spectroclusters/gcp/import":{"post":{"operationId":"v1SpectroClustersGcpImport","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroGcpClusterImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports a GCP cluster","tags":["v1"]}},"/v1/spectroclusters/gcp/rate":{"post":{"operationId":"v1SpectroClustersGcpRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroGcpClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Gcp Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get GCP cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/gcp/validate":{"post":{"operationId":"v1SpectroClustersGcpValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroGcpClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Gcp Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates GCP cluster create operation","tags":["v1"]}},"/v1/spectroclusters/generic/import":{"post":{"description":"The machines information will be captured, whereas the cloud specific configuration info will not be retrieved","operationId":"v1SpectroClustersGenericImport","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroGenericClusterImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports a cluster of any cloud type in generic way","tags":["v1"]}},"/v1/spectroclusters/generic/rate":{"post":{"operationId":"v1SpectroClustersGenericRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroGenericClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Genric Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get generic cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/gke":{"post":{"operationId":"v1SpectroClustersGkeCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroGcpClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates an GKE cluster","tags":["v1"]}},"/v1/spectroclusters/gke/rate":{"post":{"operationId":"v1SpectroClustersGkeRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroGcpClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Gke Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get GKE cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/gke/validate":{"post":{"operationId":"v1SpectroClustersGkeValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroGcpClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Gke Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates GKE cluster create operation","tags":["v1"]}},"/v1/spectroclusters/libvirt":{"post":{"operationId":"v1SpectroClustersLibvirtCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroLibvirtClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a Libvirt cluster","tags":["v1"]}},"/v1/spectroclusters/libvirt/import":{"post":{"operationId":"v1SpectroClustersLibvirtImport","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroLibvirtClusterImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports a libvirt cluster","tags":["v1"]}},"/v1/spectroclusters/libvirt/rate":{"post":{"operationId":"v1SpectroClustersLibvirtRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroLibvirtClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Libvirt Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get libvirt cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/libvirt/validate":{"post":{"operationId":"v1SpectroClustersLibvirtValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroLibvirtClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Libvirt Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates libvirt cluster create operation","tags":["v1"]}},"/v1/spectroclusters/maas":{"post":{"operationId":"v1SpectroClustersMaasCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroMaasClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a MAAS cluster","tags":["v1"]}},"/v1/spectroclusters/maas/import":{"post":{"operationId":"v1SpectroClustersMaasImport","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroMaasClusterImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports a Maas cluster","tags":["v1"]}},"/v1/spectroclusters/maas/rate":{"post":{"operationId":"v1SpectroClustersMaasRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroMaasClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Maas Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get maas cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/maas/validate":{"post":{"operationId":"v1SpectroClustersMaasValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroMaasClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Maas Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates MAAS cluster create operation","tags":["v1"]}},"/v1/spectroclusters/openstack":{"post":{"operationId":"v1SpectroClustersOpenStackCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroOpenStackClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a OpenStack cluster","tags":["v1"]}},"/v1/spectroclusters/openstack/import":{"post":{"operationId":"v1SpectroClustersOpenStackImport","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroOpenStackClusterImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports an OpenStack cluster","tags":["v1"]}},"/v1/spectroclusters/openstack/rate":{"post":{"operationId":"v1SpectroClustersOpenStackRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroOpenStackClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Openstack Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get openstack cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/openstack/validate":{"post":{"operationId":"v1SpectroClustersOpenStackValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroOpenStackClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"vSphere Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates OpenStack cluster create operation","tags":["v1"]}},"/v1/spectroclusters/spc/download":{"post":{"operationId":"v1SpectroClustersSpcDownload","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterDefinitionEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"Cluster definition archive file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Downloads the cluster definition archive file","tags":["v1"]}},"/v1/spectroclusters/tke":{"post":{"operationId":"v1SpectroClustersTkeCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroTencentClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a Tke cluster","tags":["v1"]}},"/v1/spectroclusters/tke/rate":{"post":{"operationId":"v1SpectroClustersTkeRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroTencentClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Tke Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get TKE cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/tke/validate":{"post":{"operationId":"v1SpectroClustersTkeValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroTencentClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Tke Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates TKE cluster create operation","tags":["v1"]}},"/v1/spectroclusters/upgrade/settings":{"get":{"operationId":"v1SpectroClustersUpgradeSettingsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1ClusterUpgradeSettingsEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get cluster settings by context","tags":["v1"]}},"/v1/spectroclusters/validate/name":{"get":{"operationId":"v1SpectroClustersValidateName","parameters":[{"description":"Cluster name","in":"query","name":"name","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates the cluster name","tags":["v1"]}},"/v1/spectroclusters/validate/packs":{"post":{"operationId":"v1SpectroClustersValidatePacks","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterPacksEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster packs validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates spectro cluster packs","tags":["v1"]}},"/v1/spectroclusters/virtual":{"post":{"operationId":"v1SpectroClustersVirtualCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroVirtualClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a virtual cluster","tags":["v1"]}},"/v1/spectroclusters/virtual/packs/values":{"get":{"operationId":"v1VirtualClustersPacksValues","parameters":[{"default":"k3s","description":"Kubernetes distribution type","enum":["k3s","cncf_k8s"],"in":"query","name":"kubernetesDistroType","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Successful response","schema":{"$ref":"#/definitions/v1ClusterVirtualPacksValues"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the cluster pack values yaml","tags":["v1"]}},"/v1/spectroclusters/virtual/validate":{"post":{"operationId":"v1SpectroClustersVirtualValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroVirtualClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Virtual Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates virtual cluster create operation","tags":["v1"]}},"/v1/spectroclusters/vsphere":{"post":{"operationId":"v1SpectroClustersVsphereCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroVsphereClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a vSphere cluster","tags":["v1"]}},"/v1/spectroclusters/vsphere/import":{"post":{"operationId":"v1SpectroClustersVsphereImport","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroVsphereClusterImportEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Imports a vSphere cluster","tags":["v1"]}},"/v1/spectroclusters/vsphere/rate":{"post":{"operationId":"v1SpectroClustersVsphereRate","parameters":[{"default":"hourly","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroVsphereClusterRateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Vsphere Cluster estimated rate response","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get vSphere cluster estimated rate information","tags":["v1"]}},"/v1/spectroclusters/vsphere/validate":{"post":{"operationId":"v1SpectroClustersVsphereValidate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroVsphereClusterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"vSphere Cluster validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates vSphere cluster create operation","tags":["v1"]}},"/v1/spectroclusters/{uid}":{"delete":{"operationId":"v1SpectroClustersDelete","parameters":[{"description":"If set to true the cluster will be force deleted and user has to manually clean up the provisioned cloud resources","in":"query","name":"forceDelete","type":"boolean"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified cluster","tags":["v1"]},"get":{"operationId":"v1SpectroClustersGet","parameters":[{"description":"Comma separated tags like system,profile","in":"query","name":"includeTags","type":"string"},{"default":false,"description":"Resolve pack values if set to true","in":"query","name":"resolvePackValues","type":"boolean"},{"description":"Includes pack meta such as schema, presets","in":"query","name":"includePackMeta","type":"string"},{"description":"Filter cluster profile templates by profileType","in":"query","name":"profileType","type":"string"},{"default":false,"description":"Include non spectro labels in the cluster labels if set to true","in":"query","name":"includeNonSpectroLabels","type":"boolean"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroCluster"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/assets":{"get":{"operationId":"v1SpectroClustersUidAssetsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroClusterAssetEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the cluster asset doc","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1SpectroClustersUidAssets","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterAssetEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Associate the assets for the cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/assets/adminKubeconfig":{"get":{"operationId":"v1SpectroClustersUidAdminKubeConfig","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's kube config file","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/assets/frpKubeconfig":{"delete":{"operationId":"v1SpectroClustersUidFrpKubeConfigDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the cluster's frp kube config client data","tags":["v1"]},"get":{"operationId":"v1SpectroClustersUidFrpKubeConfigGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's frp kube config file","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUidFrpKubeConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterAssetFrpKubeConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster's frp kube config data","tags":["v1"]}},"/v1/spectroclusters/{uid}/assets/kubeconfig":{"get":{"operationId":"v1SpectroClustersUidKubeConfig","parameters":[{"default":true,"description":"FRP (reverse-proxy) based kube config will be returned if available","in":"query","name":"frp","type":"boolean"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's kube config file","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUidKubeConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterAssetKubeConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster's manifest data","tags":["v1"]}},"/v1/spectroclusters/{uid}/assets/kubeconfigclient":{"delete":{"operationId":"v1SpectroClustersUidKubeConfigClientDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the cluster's kube config client data","tags":["v1"]},"get":{"operationId":"v1SpectroClustersUidKubeConfigClientGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's kube config client file","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUidKubeConfigClientUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterAssetKubeConfigClient"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster's kube config client data","tags":["v1"]}},"/v1/spectroclusters/{uid}/assets/manifest":{"get":{"operationId":"v1SpectroClustersUidManifestGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's manifest data","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUidManifestUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterAssetManifest"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster's manifest data","tags":["v1"]}},"/v1/spectroclusters/{uid}/clusterConfig/clusterMetaAttribute":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersUidClusterMetaAttributeUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterMetaAttributeEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster meta attribute","tags":["v1"]}},"/v1/spectroclusters/{uid}/clusterConfig/controlPlaneHealthCheckTimeout":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"V1ControlPlaneHealthCheckTimeoutUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ControlPlaneHealthCheckTimeoutEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster controlPlane health check timeout","tags":["v1"]}},"/v1/spectroclusters/{uid}/clusterConfig/hostCluster":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"V1HostClusterConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1HostClusterConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster host config","tags":["v1"]}},"/v1/spectroclusters/{uid}/clusterConfig/lifecycleConfig":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersUidLifecycleConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1LifecycleConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster Life cycle configuration","tags":["v1"]}},"/v1/spectroclusters/{uid}/clusterConfig/osPatch":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersUidOsPatchUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1OsPatchEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster OS patch configuration","tags":["v1"]}},"/v1/spectroclusters/{uid}/config/namespaces":{"get":{"operationId":"v1SpectroClustersUidConfigNamespacesGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterNamespaceResources"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves namespaces for the specified cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUidConfigNamespacesUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterNamespaceResourcesUpdateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates namespaces for the specified cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/config/namespaces/{namespaceUid}":{"get":{"operationId":"v1SpectroClustersUidConfigNamespacesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster's namespace response","schema":{"$ref":"#/definitions/v1ClusterNamespaceResource"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves the specified namespace of the cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Cluster namespace uid","in":"path","name":"namespaceUid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUidConfigNamespacesUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterNamespaceResourceInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified namespace of the cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/config/rbacs":{"get":{"operationId":"v1SpectroClustersUidConfigRbacsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterRbacs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves RBAC information for the specified cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUidConfigRbacsUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterRbacResourcesUpdateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates RBAC information for the specified cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/config/rbacs/{rbacUid}":{"get":{"operationId":"v1SpectroClustersUidConfigRbacsUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster's RBAC response","schema":{"$ref":"#/definitions/v1ClusterRbac"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves the specified RBAC of the cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"RBAC resource uid","in":"path","name":"rbacUid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUidConfigRbacsUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterRbacInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified RBAC of the cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/download":{"get":{"operationId":"v1SpectroClustersUidDownload","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download cluster archive file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Download the specified cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/edge-native/edgeHosts":{"get":{"operationId":"v1EdgeNativeClustersHostsList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"List of edge host device","schema":{"$ref":"#/definitions/v1EdgeHostDevices"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of edge host of edge-native cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/edge/edgeHosts":{"get":{"operationId":"v1EdgeClustersHostsList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"List of edge host device","schema":{"$ref":"#/definitions/v1EdgeHostDevices"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of edge host of libvirt cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/features/backup":{"delete":{"operationId":"v1ClusterFeatureBackupScheduleReset","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Reset cluster backup schedule settings","tags":["v1"]},"get":{"operationId":"v1ClusterFeatureBackupGet","parameters":[{"in":"query","name":"backupRequestUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterBackup"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the cluster backup result","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1ClusterFeatureBackupCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterBackupConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create cluster backup settings","tags":["v1"]},"put":{"operationId":"v1ClusterFeatureBackupUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterBackupConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update cluster backup settings","tags":["v1"]}},"/v1/spectroclusters/{uid}/features/backup/onDemand":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1ClusterFeatureBackupOnDemandCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterBackupConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create on demand cluster backup","tags":["v1"]}},"/v1/spectroclusters/{uid}/features/backup/{backupName}/request/{requestUid}":{"delete":{"operationId":"v1ClusterFeatureBackupDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete cluster backup","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"backupName","required":true,"type":"string"},{"in":"path","name":"requestUid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/features/complianceScan":{"get":{"operationId":"v1ClusterFeatureComplianceScanGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterComplianceScan"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the compliance scan of cluster, if driverType is provided then specific status of driverType will be returned","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1ClusterFeatureComplianceScanCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterComplianceScheduleConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create cluster compliance scan","tags":["v1"]},"put":{"operationId":"v1ClusterFeatureComplianceScanUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterComplianceScheduleConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update cluster compliance scan settings","tags":["v1"]}},"/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers":{"get":{"operationId":"v1ClusterFeatureComplianceScanLogsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterComplianceScanLogs"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the compliance scan log by cluster uid and driver type","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/kubeBench":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ClusterFeatureScanKubeBenchLogUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1KubeBenchEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the KubeBench compliance scan log by uid","tags":["v1"]}},"/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/kubeHunter":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ClusterFeatureScanKubeHunterLogUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1KubeHunterEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the KubeHunter compliance scan log by uid","tags":["v1"]}},"/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/sonobuoy":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1ClusterFeatureScanSonobuoyLogUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SonobuoyEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the Sonobuoy compliance scan log by uid","tags":["v1"]}},"/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/syft":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1ClusterFeatureScanSyftLogUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SyftEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the Syft compliance scan log by uid","tags":["v1"]}},"/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}":{"delete":{"operationId":"v1ClusterFeatureComplianceScanLogDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the compliance scan log by uid","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"logUid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/kubeBench":{"get":{"operationId":"v1ClusterFeatureKubeBenchLogGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterScanLogKubeBench"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the KubeBench compliance scan log by uid","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"logUid","required":true,"type":"string"},{"in":"query","name":"reportId","type":"string"}]},"/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/kubeHunter":{"get":{"operationId":"v1ClusterFeatureKubeHunterLogGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterScanLogKubeHunter"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the KubeHunter compliance scan log by uid","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"logUid","required":true,"type":"string"},{"in":"query","name":"reportId","type":"string"}]},"/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/sonobuoy":{"get":{"operationId":"v1ClusterFeatureSonobuoyLogGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterScanLogSonobuoy"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the Sonobuoy compliance scan log by uid","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"logUid","required":true,"type":"string"},{"in":"query","name":"reportId","type":"string"}]},"/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/syft":{"get":{"operationId":"v1ClusterFeatureSyftLogGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterScanLogSyft"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the Syft compliance scan log by uid","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"logUid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/syft/sbom":{"get":{"operationId":"v1SyftScanLogImageSBOMGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the image sbom of syft scan log of cluster","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"logUid","required":true,"type":"string"},{"in":"query","name":"image","type":"string"}]},"/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/{driver}/download":{"get":{"operationId":"v1ClusterFeatureDriverLogDownload","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"OK","headers":{"Content-Disposition":{"type":"string"},"Content-Type":{"type":"string"}},"schema":{"type":"file"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Downloads the driver cluster logs","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"logUid","required":true,"type":"string"},{"enum":["kubeBench","kubeHunter","sonobuoy","syft"],"in":"path","name":"driver","required":true,"type":"string"},{"default":"pdf","in":"query","name":"fileFormat","type":"string"}]},"/v1/spectroclusters/{uid}/features/complianceScan/onDemand":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1ClusterFeatureComplianceScanOnDemandCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterComplianceOnDemandConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create on demand cluster compliance scan","tags":["v1"]}},"/v1/spectroclusters/{uid}/features/helmCharts":{"get":{"operationId":"v1ClusterFeatureHelmChartsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterHelmCharts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the installed helm charts of a specified cluster","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/features/logFetcher":{"get":{"operationId":"v1ClusterFeatureLogFetcherGet","parameters":[{"in":"query","name":"requestId","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterLogFetcher"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the log fetcher for cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid for which log is requested","in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1ClusterFeatureLogFetcherCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterLogFetcherRequest"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create the log fetcher for cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/features/manifests":{"get":{"operationId":"v1ClusterFeatureManifestsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterManifests"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the installed manifests of a specified cluster","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/features/restore":{"get":{"operationId":"v1ClusterFeatureRestoreGet","parameters":[{"in":"query","name":"restoreRequestUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterRestore"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the cluster restore of cluster","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/features/restore/onDemand":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1ClusterFeatureRestoreOnDemandCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterRestoreConfig"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create on demand cluster restore","tags":["v1"]}},"/v1/spectroclusters/{uid}/import/manifest":{"get":{"operationId":"v1SpectroClustersUidImportManifest","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"produces":["application/octet-stream"],"responses":{"200":{"description":"download file","headers":{"Content-Disposition":{"type":"string"}},"schema":{"format":"binary","type":"string"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's import manifest file","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/import/upgrade":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersUidImportUpgradePatch","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Upgrade the specified imported read only cluster with full permissions","tags":["v1"]}},"/v1/spectroclusters/{uid}/k8certificates":{"get":{"operationId":"v1SpectroClustersK8Certificate","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1MachineCertificates"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get K8Certificate for spectro cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/k8certificates/renew":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersCertificatesRenew","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Sets the cluster master nodes Kubernetes certificates for renewal","tags":["v1"]}},"/v1/spectroclusters/{uid}/kubectl/redirect":{"get":{"operationId":"V1SpectroClustersUidKubeCtlRedirect","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1SpectroClusterKubeCtlRedirect"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's kube config file","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/libvirt/edgeHosts":{"get":{"operationId":"v1LibvirtClustersHostsList","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"List of edge host devices","schema":{"$ref":"#/definitions/v1EdgeHostDevices"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of edge hosts of the libvirt cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/location":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUidLocationPut","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterLocationInputEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Associate the assets for the cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/metadata":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersUidMetadataUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ObjectMetaInputEntitySchema"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the specified spectro cluster metadata","tags":["v1"]}},"/v1/spectroclusters/{uid}/namespaces":{"get":{"operationId":"v1ClusterNamespacesGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterNamespaces"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns available namespaces for the cluster","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"default":false,"in":"query","name":"skipEmptyNamespaces","type":"boolean"}]},"/v1/spectroclusters/{uid}/oidc":{"get":{"operationId":"V1SpectroClustersUidOIDC","parameters":[{"description":"spc uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroClusterOidcSpec"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns k8s spectrocluster oidc","tags":["v1"]}},"/v1/spectroclusters/{uid}/oidc/dashboard/url":{"get":{"operationId":"V1SpectroClustersUidOIDCDashboardUrl","parameters":[{"description":"spc uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SectroClusterK8sDashboardUrl"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns k8s dashboard url","tags":["v1"]}},"/v1/spectroclusters/{uid}/pack/manifests/{manifestUid}":{"get":{"operationId":"v1SpectroClustersUidPackManifestsUidGet","parameters":[{"description":"cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"manifest uid which is part of the pack ref","in":"path","name":"manifestUid","required":true,"type":"string"},{"default":false,"description":"resolve pack manifest values if set to true","in":"query","name":"resolveManifestValues","type":"boolean"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Pack manifest content","schema":{"$ref":"#/definitions/v1Manifest"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's manifest","tags":["v1"]}},"/v1/spectroclusters/{uid}/pack/properties":{"get":{"operationId":"v1SpectroClustersUidPackProperties","parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Pack layer","in":"query","name":"layer","required":true,"type":"string"},{"description":"Pack values yaml field path","in":"query","name":"fieldPath","required":true,"type":"string"},{"description":"Pack name","in":"query","name":"name","type":"string"},{"default":true,"description":"Is the macros need to be resolved","in":"query","name":"resolveMacros","type":"boolean"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster's pack properties response","schema":{"$ref":"#/definitions/v1SpectroClusterPackProperties"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get specified cluster pack properties","tags":["v1"]}},"/v1/spectroclusters/{uid}/packRefs":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"query","name":"notify","type":"string"}],"patch":{"operationId":"v1SpectroClustersPacksRefUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterNotificationUpdateEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster's pack references","tags":["v1"]}},"/v1/spectroclusters/{uid}/packs/resolvedValues":{"get":{"operationId":"v1SpectroClustersUidPacksResolvedValuesGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroClusterProfilesResolvedValues"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's packs resolved values","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterProfilesParamReferenceEntity"}}]},"/v1/spectroclusters/{uid}/packs/status":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersUidPacksStatusPatch","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterPacksStatusEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Patch update specified cluster's packs status","tags":["v1"]}},"/v1/spectroclusters/{uid}/packs/{packName}/config":{"get":{"description":"Deprecated","operationId":"v1SpectroClustersUidPacksConfigGet","parameters":[{"description":"cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"pack name","in":"path","name":"packName","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster pack values","schema":{"$ref":"#/definitions/v1SpectroClusterPackConfigList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's pack configuration","tags":["v1"]}},"/v1/spectroclusters/{uid}/profile":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersPatchProfile","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Replaces the specified cluster profile for the cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/profileUpdates":{"get":{"operationId":"v1SpectroClustersGetProfileUpdates","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroClusterProfileUpdates"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the profile updates of a specified cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/profiles":{"delete":{"operationId":"v1SpectroClustersDeleteProfiles","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterProfilesDeleteEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Remove cluster profiles from the specified cluster","tags":["v1"]},"get":{"operationId":"v1SpectroClustersGetProfiles","parameters":[{"description":"includes pack meta such as schema, presets","in":"query","name":"includePackMeta","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroClusterProfileList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the associated profiles of a specified cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersPatchProfiles","parameters":[{"default":false,"description":"Resolve pending cluster notification if set to true","in":"query","name":"resolveNotification","type":"boolean"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterProfiles"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Patch cluster profiles to the specified cluster","tags":["v1"]},"put":{"operationId":"v1SpectroClustersUpdateProfiles","parameters":[{"default":false,"description":"Resolve pending cluster notification if set to true","in":"query","name":"resolveNotification","type":"boolean"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterProfiles"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Associate cluster profiles to the specified cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/profiles/packs/manifests":{"get":{"operationId":"v1SpectroClustersGetProfilesPacksManifests","parameters":[{"description":"Includes pack meta such as schema, presets","in":"query","name":"includePackMeta","type":"string"},{"default":false,"description":"Resolve pack macro variables if set to true","in":"query","name":"resolveMacros","type":"boolean"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroClusterProfilesPacksManifests"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the associated profile's pack manifests of a specified cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/profiles/{profileUid}/packs/{packName}/config":{"get":{"operationId":"v1SpectroClustersUidProfilesUidPacksConfigGet","parameters":[{"description":"cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"profile uid","in":"path","name":"profileUid","required":true,"type":"string"},{"description":"pack name","in":"path","name":"packName","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of cluster pack values","schema":{"$ref":"#/definitions/v1SpectroClusterPackConfigList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified cluster's profile pack configuration","tags":["v1"]}},"/v1/spectroclusters/{uid}/profiles/{profileUid}/packs/{packName}/manifests":{"get":{"operationId":"v1SpectroClustersProfilesUidPackManifestsGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1PackManifests"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the associated profiles pack manifests of the specified cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Cluster profile uid","in":"path","name":"profileUid","required":true,"type":"string"},{"description":"Name of the pack","in":"path","name":"packName","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersProfilesUidPackManifestsUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ManifestRefInputEntities"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates cluster profiles pack manifests to the specified cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/rate":{"get":{"operationId":"v1SpectroClustersUidRate","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1SpectroClusterRate"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the estimated rate of the specified cluster","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"default":"hourly","description":"Period type [hourly, monthly, yearly]","enum":["hourly","monthly","yearly"],"in":"query","name":"periodType","type":"string"}]},"/v1/spectroclusters/{uid}/repave/approve":{"patch":{"operationId":"v1SpectroClustersUidRepaveApproveUpdate","parameters":[{"description":"cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the spectrocluster repave approve update","tags":["v1"]}},"/v1/spectroclusters/{uid}/repave/status":{"get":{"operationId":"v1SpectroClustersUidRepaveGet","parameters":[{"description":"cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Returns cluster repave status","schema":{"$ref":"#/definitions/v1SpectroClusterRepave"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the spectrocluster repave","tags":["v1"]}},"/v1/spectroclusters/{uid}/reset":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"V1SpectroClustersUidReset","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"reset the cluster s by deleting machine pools and condtions","tags":["v1"]}},"/v1/spectroclusters/{uid}/status/condition":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUpdateStatusCondition","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterCondition"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster status condition","tags":["v1"]}},"/v1/spectroclusters/{uid}/status/conditions":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersUpdateStatusConditions","parameters":[{"in":"body","name":"body","schema":{"items":{"$ref":"#/definitions/v1ClusterCondition"},"type":"array"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster status conditions","tags":["v1"]}},"/v1/spectroclusters/{uid}/status/endpoints":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUpdateStatusEndpoints","parameters":[{"in":"body","name":"body","schema":{"items":{"$ref":"#/definitions/v1ApiEndpoint"},"type":"array"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster's service endpoints information","tags":["v1"]}},"/v1/spectroclusters/{uid}/status/imported":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersUpdateStatusImported","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster status as imported","tags":["v1"]}},"/v1/spectroclusters/{uid}/status/services":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUpdateStatusServices","parameters":[{"in":"body","name":"body","schema":{"items":{"$ref":"#/definitions/v1LoadBalancerService"},"type":"array"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified cluster's services information","tags":["v1"]}},"/v1/spectroclusters/{uid}/status/spcApply":{"get":{"operationId":"v1SpectroClustersUidStatusSpcApplyGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1SpcApply"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the SPC apply information for the agent","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1SpectroClustersUidStatusSpcApply","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"202":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Set the CanBeApplied to true on the spcApply status. CanBeApplied indicates the agent to orchestrate the spc changes","tags":["v1"]}},"/v1/spectroclusters/{uid}/status/spcApply/patchTime":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1SpectroClustersUidStatusSpcPatchTime","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpcPatchTimeEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the agent patch time for the SPC changes","tags":["v1"]}},"/v1/spectroclusters/{uid}/status/upgrades":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersUidUpgradesPut","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterUidUpgrades"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the cluster's upgrade status","tags":["v1"]}},"/v1/spectroclusters/{uid}/validate/packs":{"post":{"operationId":"v1SpectroClustersUidValidatePacks","parameters":[{"description":"cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterPacksEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster packs validation response","schema":{"$ref":"#/definitions/v1SpectroClusterValidatorResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates cluster packs","tags":["v1"]}},"/v1/spectroclusters/{uid}/validate/repave":{"post":{"operationId":"v1SpectroClustersUidValidateRepave","parameters":[{"description":"cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterPacksEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"Cluster repave validation response","schema":{"$ref":"#/definitions/v1SpectroClusterRepaveValidationResponse"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates if cluster gets repaved for the specified packs","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms":{"get":{"operationId":"v1SpectroClustersVMList","parameters":[{"collectionFormat":"csv","description":"Namespace names, comma separated value (ex: dev,test). If namespace is empty it returns the specific resource under all namespace","in":"query","items":{"type":"string"},"name":"namespace","type":"array"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ClusterVirtualMachineList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the list of virtual machines","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1SpectroClustersVMCreate","parameters":[{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"},{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterVirtualMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1ClusterVirtualMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create virtual machine","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/snapshot":{"get":{"operationId":"v1ClusterVMSnapshotsList","parameters":[{"collectionFormat":"csv","description":"vmName is comma separated value (ex: name1,name2).","in":"query","items":{"type":"string"},"name":"vmName","type":"array"},{"collectionFormat":"csv","description":"Namespace names, comma separated value (ex: dev,test). If namespace is empty it returns the specific resource under all namespace","in":"query","items":{"type":"string"},"name":"namespace","type":"array"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1VirtualMachineSnapshotList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the list of snapshots of given namespaces","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/spectroclusters/{uid}/vms/{vmName}":{"delete":{"operationId":"v1SpectroClustersVMDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the virtual machine","tags":["v1"]},"get":{"operationId":"v1SpectroClustersVMGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1ClusterVirtualMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get virtual machine","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersVMUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterVirtualMachine"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1ClusterVirtualMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified virtual machine of the cluster","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/addVolume":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersVMAddVolume","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VMAddVolumeEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Add volume to the virtual machine instance","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/clone":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"post":{"operationId":"v1SpectroClustersVMClone","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1SpectroClusterVMCloneEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1ClusterVirtualMachine"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Clone virtual machine","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/migrate":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersVMMigrate","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Migrate the virtual machine","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/pause":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersVMPause","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Pause the virtual machine instance","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/removeVolume":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersVMRemoveVolume","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VMRemoveVolumeEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Remove volume from the virtual machine instance","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/restart":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersVMRestart","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Restart the virtual machine","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/resume":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersVMResume","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Resume the virtual machine instance","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/snapshot":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name of virtual machine","in":"query","name":"namespace","required":true,"type":"string"}],"post":{"operationId":"v1VMSnapshotCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VirtualMachineSnapshot"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VirtualMachineSnapshot"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create snapshot of virtual machine","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/snapshot/{snapshotName}":{"delete":{"operationId":"v1VMSnapshotDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the snapshot of virtual machine","tags":["v1"]},"get":{"operationId":"v1VMSnapshotGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VirtualMachineSnapshot"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get virtual machine snapshot","tags":["v1"]},"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Snapshot name","in":"path","name":"snapshotName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"put":{"operationId":"v1VMSnapshotUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VirtualMachineSnapshot"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VirtualMachineSnapshot"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified snapshot of a virtual machine","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/start":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersVMStart","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Start the virtual machine","tags":["v1"]}},"/v1/spectroclusters/{uid}/vms/{vmName}/stop":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Virtual Machine name","in":"path","name":"vmName","required":true,"type":"string"},{"description":"Namespace name","in":"query","name":"namespace","required":true,"type":"string"}],"put":{"operationId":"v1SpectroClustersVMStop","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Stop the virtual machine","tags":["v1"]}},"/v1/spectroclusters/{uid}/workloads/sync":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"description":"Sync specified cluster workload","operationId":"v1SpectroClustersUidWorkloadsSync","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"202":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Sync specified cluster workload","tags":["v1"]}},"/v1/spectroclusters/{uid}/workloads/{workloadKind}/sync":{"parameters":[{"description":"Cluster uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Workload kind","enum":["namespace","pod","deployment","statefulset","daemonset","job","cronjob","rolebinding","clusterrolebinding"],"in":"path","name":"workloadKind","required":true,"type":"string"}],"post":{"operationId":"v1SpectroClustersUidWorkloadsKindSync","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"202":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Sync specified cluster workload","tags":["v1"]}},"/v1/system/config/reverseproxy":{"get":{"operationId":"V1SystemConfigReverseProxyGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1SystemReverseProxy"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"get the system config reverse proxy","tags":["v1","system","private","show-docs"]},"put":{"operationId":"V1SystemConfigReverseProxyUpdate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1SystemReverseProxy"}}],"responses":{"204":{"description":"(empty)","schema":{"$ref":"#/definitions/v1Updated"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"updates the system config reverse proxy","tags":["v1","system","private","show-docs"]}},"/v1/system/passwords/blocklist":{"delete":{"operationId":"V1PasswordsBlockListDelete","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/V1PasswordsBlockList"}}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete a list of block listed passwords","tags":["v1","system","show-docs"]},"patch":{"operationId":"V1PasswordsBlockListUpdate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/V1PasswordsBlockList"}}],"responses":{"204":{"description":"(empty)","schema":{"$ref":"#/definitions/v1Updated"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"List of block listed passwords","tags":["v1","system","show-docs"]}},"/v1/teams":{"get":{"operationId":"v1TeamsList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"An array of teams","schema":{"$ref":"#/definitions/v1Teams"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of teams","tags":["v1"]},"post":{"operationId":"v1TeamsCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Team"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a team with the specified users and roles","tags":["v1"]}},"/v1/teams/summary":{"get":{"description":"Deprecated, Use Post api - Returns a list of team summaries","operationId":"v1TeamsSummary","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TeamsSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of team summary","tags":["v1"]},"post":{"operationId":"v1TeamsSummaryGet","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TeamsSummarySpec"}}],"responses":{"200":{"description":"An array of teams summary items","schema":{"$ref":"#/definitions/v1TeamsSummaryList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of teams summary with provided filter spec","tags":["v1"]}},"/v1/teams/{uid}":{"delete":{"operationId":"v1TeamsUidDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified team","tags":["v1"]},"get":{"operationId":"v1TeamsUidGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Team"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the sepcified team","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1TeamsUidPatch","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1TeamPatch"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Patches the specified team","tags":["v1"]},"put":{"operationId":"v1TeamsUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Team"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the sepcified team","tags":["v1"]}},"/v1/teams/{uid}/projects":{"get":{"operationId":"v1TeamsProjectRoles","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ProjectRolesEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified team's project and roles data","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1TeamsProjectRolesPut","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ProjectRolesPatch"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the projects and roles for the specified team","tags":["v1"]}},"/v1/teams/{uid}/resourceRoles":{"get":{"description":"Returns resource roles for team","operationId":"v1TeamsUidResourceRoles","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ResourceRoles"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified individual and resource roles for a team","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"description":"Resource roles added to specific team","operationId":"v1TeamsUidResourceRolesCreate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ResourceRolesUpdateEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Add resource roles for team","tags":["v1"]}},"/v1/teams/{uid}/resourceRoles/{resourceRoleUid}":{"delete":{"operationId":"v1TeamsUidResourceRolesUidDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deleted the resource roles from team","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"resourceRoleUid","required":true,"type":"string"}],"patch":{"description":"Specific resource roles fo team is updated","operationId":"v1TeamsResourceRolesUidUpdate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ResourceRolesUpdateEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the resource roles for team","tags":["v1"]}},"/v1/teams/{uid}/roles":{"get":{"operationId":"V1TeamsUidTenantRolesGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TeamTenantRolesEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified team's tenant roles","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"V1TeamsUidTenantRolesUpdate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1TeamTenantRolesUpdate"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the tenant roles of the specified team","tags":["v1"]}},"/v1/tenants/{tenantUid}/address":{"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"patch":{"operationId":"v1PatchTenantAddress","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantAddressPatch"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update tenant address","tags":["v1"]}},"/v1/tenants/{tenantUid}/assets/certs":{"get":{"operationId":"V1TenantUIdAssetsCertsList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TenantAssetCerts"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"lists the certificates for the tenant","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"post":{"operationId":"V1TenantUidAssetsCertsCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantAssetCert"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"create the tenant certificate","tags":["v1"]}},"/v1/tenants/{tenantUid}/assets/certs/{certificateUid}":{"delete":{"operationId":"V1TenantUidAssetsCertsUidDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"deletes the tenant certificate","tags":["v1"]},"get":{"operationId":"V1TenantUidAssetsCertsUidGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TenantAssetCert"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the ca certificate for the tenant","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"},{"in":"path","name":"certificateUid","required":true,"type":"string"}],"put":{"operationId":"V1TenantUidAssetsCertsUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantAssetCert"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"updates the tenant certificate","tags":["v1"]}},"/v1/tenants/{tenantUid}/assets/dataSinks":{"delete":{"operationId":"V1TenantUidAssetsDataSinksDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"deletes the tenant data sink config","tags":["v1"]},"get":{"operationId":"V1TenantUidAssetsDataSinksGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1DataSinkConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns data sink config of tenant","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"post":{"operationId":"V1TenantUidAssetsDataSinksCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1DataSinkConfig"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"create data sink config","tags":["v1"]},"put":{"operationId":"V1TenantUidAssetsDataSinksUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1DataSinkConfig"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"updates the tenant data sink config","tags":["v1"]}},"/v1/tenants/{tenantUid}/authTokenSettings":{"get":{"operationId":"v1TenantUidAuthTokenSettingsGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AuthTokenSettings"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get tenant auth token settings","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"put":{"operationId":"v1TenantUidAuthTokenSettingsUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AuthTokenSettings"}}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update tenant auth token settings","tags":["v1"]}},"/v1/tenants/{tenantUid}/contract/accept":{"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"patch":{"operationId":"v1TenantsUidContractAccept","responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Tenant to accept the contract agreement","tags":["v1"]}},"/v1/tenants/{tenantUid}/creditAccount/aws":{"delete":{"operationId":"v1TenantsCreditAccountDelete","parameters":[{"default":false,"in":"query","name":"forceDelete","type":"boolean"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the aws credit account for tenants","tags":["v1"]},"get":{"operationId":"v1TenantsCreditAccountGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1AwsCreditAccountEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the credit accounts for the tenants with free tier access","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}]},"/v1/tenants/{tenantUid}/domains":{"get":{"operationId":"V1TenantUidDomainsGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TenantDomains"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"retrieves the domains for tenant","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"post":{"operationId":"V1TenantUidDomainsUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantDomains"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"creates or updates domains for tenant","tags":["v1"]}},"/v1/tenants/{tenantUid}/emailId":{"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"patch":{"operationId":"v1PatchTenantEmailId","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantEmailPatch"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update tenant emailId","tags":["v1"]}},"/v1/tenants/{tenantUid}/freemium":{"get":{"operationId":"v1TenantFreemiumGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TenantFreemium"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get tenant level freemium configuration","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"put":{"operationId":"v1TenantFreemiumUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantFreemium"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update tenant freemium configuration","tags":["v1"]}},"/v1/tenants/{tenantUid}/freemiumUsage":{"get":{"operationId":"v1TenantFreemiumUsageGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TenantFreemiumUsage"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get tenant freemium usage","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}]},"/v1/tenants/{tenantUid}/invoices/{invoiceUid}":{"get":{"operationId":"v1InvoicesUidGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1Invoice"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns a specified invoice","tags":["v1"]},"parameters":[{"description":"Specify the tenant uid","in":"path","name":"tenantUid","required":true,"type":"string"},{"description":"Specify the invoice uid","in":"path","name":"invoiceUid","required":true,"type":"string"}]},"/v1/tenants/{tenantUid}/invoices/{invoiceUid}/report/invoice/pdf":{"get":{"operationId":"V1InvoiceUidReportInvoicePdf","produces":["application/octet-stream"],"responses":{"200":{"description":"OK","headers":{"Content-Disposition":{"type":"string"},"Content-Type":{"type":"string"}},"schema":{"type":"file"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Downloads the specified invoice report","tags":["v1"]},"parameters":[{"description":"Specify the tenant uid","in":"path","name":"tenantUid","required":true,"type":"string"},{"description":"Specify the invoice uid","in":"path","name":"invoiceUid","required":true,"type":"string"}]},"/v1/tenants/{tenantUid}/invoices/{invoiceUid}/report/pdf":{"get":{"operationId":"V1InvoiceUidReportPdf","produces":["application/octet-stream"],"responses":{"200":{"description":"OK","headers":{"Content-Disposition":{"type":"string"},"Content-Type":{"type":"string"}},"schema":{"type":"file"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Downloads the specified monthly invoice report","tags":["v1"]},"parameters":[{"description":"Specify the tenant uid","in":"path","name":"tenantUid","required":true,"type":"string"},{"description":"Specify the invoice uid","in":"path","name":"invoiceUid","required":true,"type":"string"}]},"/v1/tenants/{tenantUid}/invoices/{invoiceUid}/report/usage/pdf":{"get":{"operationId":"V1InvoiceUidReportUsagePdf","produces":["application/octet-stream"],"responses":{"200":{"description":"OK","headers":{"Content-Disposition":{"type":"string"},"Content-Type":{"type":"string"}},"schema":{"type":"file"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Downloads the specified tenant usage","tags":["v1"]},"parameters":[{"description":"Specify the tenant uid","in":"path","name":"tenantUid","required":true,"type":"string"},{"description":"Specify the invoice uid","in":"path","name":"invoiceUid","required":true,"type":"string"}]},"/v1/tenants/{tenantUid}/loginBanner":{"get":{"operationId":"v1TenantUidLoginBannerGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1LoginBannerSettings"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get tenant login banner settings","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"put":{"operationId":"v1TenantUidLoginBannerUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1LoginBannerSettings"}}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update tenant login banner settings","tags":["v1"]}},"/v1/tenants/{tenantUid}/macros":{"delete":{"operationId":"v1TenantsUidMacrosDeleteByMacroName","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the macros for the specified tenant by given macro name","tags":["v1"]},"get":{"operationId":"v1TenantsUidMacrosList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Macros"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"List the macros of the specified tenant","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"patch":{"operationId":"v1TenantsUidMacrosUpdateByMacroName","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the macros for the specified tenant by given macro name","tags":["v1"]},"post":{"operationId":"v1TenantsUidMacrosCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create or add new macros for the specified tenant","tags":["v1"]},"put":{"operationId":"v1TenantsUidMacrosUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the macros of the specified tenant","tags":["v1"]}},"/v1/tenants/{tenantUid}/oidc/config":{"get":{"operationId":"V1TenantUidOidcConfigGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TenantOidcClientSpec"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the oidc Spec for tenant","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"post":{"operationId":"V1TenantUidOidcConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantOidcClientSpec"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Associates the oidc Spec for the tenant","tags":["v1"]}},"/v1/tenants/{tenantUid}/password/policy":{"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"post":{"operationId":"V1TenantUidPasswordPolicyUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantPasswordPolicyEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"creates or updates a password policy for tenant","tags":["v1"]}},"/v1/tenants/{tenantUid}/preferences/clusterGroup":{"get":{"operationId":"V1TenantPrefClusterGroupGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TenantEnableClusterGroup"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get is cluster group enabled for a specific tenant","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"put":{"operationId":"V1TenantPrefClusterGroupUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantEnableClusterGroup"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Enable or Disable cluster group for a specific tenant","tags":["v1"]}},"/v1/tenants/{tenantUid}/preferences/clusterSettings":{"get":{"operationId":"v1TenantClusterSettingsGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TenantClusterSettings"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get tenant cluster settings","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}]},"/v1/tenants/{tenantUid}/preferences/clusterSettings/nodesAutoRemediationSetting":{"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"put":{"operationId":"v1TenantClustersNodesAutoRemediationSettingUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1NodesAutoRemediationSettings"}}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update tenant clusters nodes auto remediation setting","tags":["v1"]}},"/v1/tenants/{tenantUid}/preferences/developerCredit":{"get":{"operationId":"V1TenantDeveloperCreditGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1DeveloperCredit"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get developer credit enabled for a specific tenant","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"put":{"operationId":"V1TenantDeveloperCreditUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1DeveloperCredit"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"update developer credit for a specific tenant","tags":["v1"]}},"/v1/tenants/{tenantUid}/preferences/fips":{"get":{"operationId":"v1TenantFipsSettingsGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1FipsSettings"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get tenant fips settings","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"put":{"operationId":"v1TenantFipsSettingsUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1FipsSettings"}}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update tenant fips setting","tags":["v1"]}},"/v1/tenants/{tenantUid}/rateConfig":{"get":{"operationId":"v1RateConfigGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1RateConfig"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get all rate config for public and private cloud","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"put":{"operationId":"v1RateConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1RateConfig"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"updates the rate config for public and private cloud","tags":["v1"]}},"/v1/tenants/{tenantUid}/resourceLimits":{"get":{"operationId":"v1TenantResourceLimitsGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1TenantResourceLimits"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get tenant level resource limits configuration","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"patch":{"operationId":"v1TenantResourceLimitsUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantResourceLimitsEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update tenant resource limits configuration","tags":["v1"]}},"/v1/tenants/{tenantUid}/saml/config":{"get":{"operationId":"V1TenantUidSamlConfigSpecGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TenantSamlSpec"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified service provider metadata and Saml Spec for tenant","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"post":{"operationId":"V1TenantUidSamlConfigUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantSamlRequestSpec"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Associates the specified federation metadata for the tenant","tags":["v1"]}},"/v1/tenants/{tenantUid}/sso/auth/providers":{"get":{"operationId":"V1TenantUidSsoAuthProvidersGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1TenantSsoAuthProvidersEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"get sso logins for the tenants","tags":["v1"]},"parameters":[{"in":"path","name":"tenantUid","required":true,"type":"string"}],"post":{"operationId":"V1TenantUidSsoAuthProvidersUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1TenantSsoAuthProvidersEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"enable sso logins for the tenants","tags":["v1"]}},"/v1/users":{"get":{"description":"Lists users the given user context","operationId":"v1UsersList","parameters":[{"description":"Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name","in":"query","name":"fields","type":"string"},{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"},{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Users"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Lists users","tags":["v1"]},"post":{"description":"A user is created for the given user context","operationId":"v1UsersCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create User","tags":["v1"]}},"/v1/users/assets/locations":{"get":{"operationId":"v1UsersAssetsLocationGet","parameters":[{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UserAssetsLocations"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified users location","tags":["v1"]}},"/v1/users/assets/locations/azure":{"post":{"operationId":"v1UsersAssetsLocationAzureCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserAssetsLocationAzure"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create a Azure location","tags":["v1"]}},"/v1/users/assets/locations/azure/{uid}":{"get":{"operationId":"v1UsersAssetsLocationAzureGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1UserAssetsLocationAzure"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified Azure location","tags":["v1"]},"parameters":[{"description":"Specify the Azure location uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1UsersAssetsLocationAzureUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserAssetsLocationAzure"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified Azure location","tags":["v1"]}},"/v1/users/assets/locations/gcp":{"post":{"operationId":"v1UsersAssetsLocationGcpCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserAssetsLocationGcp"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create a GCP location","tags":["v1"]}},"/v1/users/assets/locations/gcp/{uid}":{"get":{"operationId":"v1UsersAssetsLocationGcpGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1UserAssetsLocationGcp"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified GCP location","tags":["v1"]},"parameters":[{"description":"Specify the GCP location uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1UsersAssetsLocationGcpUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserAssetsLocationGcp"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified GCP location","tags":["v1"]}},"/v1/users/assets/locations/minio":{"post":{"operationId":"v1UsersAssetsLocationMinioCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserAssetsLocationS3"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create a MinIO location","tags":["v1"]}},"/v1/users/assets/locations/minio/{uid}":{"get":{"operationId":"v1UsersAssetsLocationMinioGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1UserAssetsLocationS3"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified MinIO location","tags":["v1"]},"parameters":[{"description":"Specify the MinIO location uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1UsersAssetsLocationMinioUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserAssetsLocationS3"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified MinIO location","tags":["v1"]}},"/v1/users/assets/locations/s3":{"post":{"operationId":"v1UsersAssetsLocationS3Create","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserAssetsLocationS3"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create a S3 location","tags":["v1"]}},"/v1/users/assets/locations/s3/{uid}":{"delete":{"operationId":"v1UsersAssetsLocationS3Delete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified S3 location","tags":["v1"]},"get":{"operationId":"v1UsersAssetsLocationS3Get","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1UserAssetsLocationS3"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified S3 location","tags":["v1"]},"parameters":[{"description":"Specify the S3 location uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1UsersAssetsLocationS3Update","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserAssetsLocationS3"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified S3 location","tags":["v1"]}},"/v1/users/assets/locations/{type}/{uid}/default":{"parameters":[{"description":"Specify the location uid","in":"path","name":"uid","required":true,"type":"string"},{"description":"Specify the location type [aws/azure/gcp/minio/s3]","in":"path","name":"type","required":true,"type":"string"}],"patch":{"operationId":"v1UsersAssetsLocationDefaultUpdate","responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the default backup location","tags":["v1"]}},"/v1/users/assets/locations/{uid}":{"delete":{"operationId":"v1UsersAssetsLocationDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified location","tags":["v1"]},"parameters":[{"description":"Specify the location uid","in":"path","name":"uid","required":true,"type":"string"}]},"/v1/users/assets/sshkeys":{"get":{"operationId":"v1UsersAssetsSshGet","parameters":[{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1UserAssetsSsh"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the SSH keys","tags":["v1"]},"post":{"operationId":"v1UserAssetsSshCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserAssetSshEntity"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Creates a SSH key","tags":["v1"]}},"/v1/users/assets/sshkeys/{uid}":{"delete":{"operationId":"v1UsersAssetSshDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified user ssh key","tags":["v1"]},"get":{"operationId":"v1UsersAssetSshGetUid","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1UserAssetSsh"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified user ssh key","tags":["v1"]},"parameters":[{"description":"Specify the SSH key uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1UsersAssetSshUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserAssetSsh"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified user ssh key","tags":["v1"]}},"/v1/users/assets/vsphere/dnsMapping":{"get":{"operationId":"v1VsphereMappingGet","parameters":[{"description":"Specify the vSphere gateway uid","in":"query","name":"gatewayUid","required":true,"type":"string"},{"description":"Specify the vSphere datacenter name","in":"query","name":"datacenter","required":true,"type":"string"},{"description":"Specify the vSphere network name","in":"query","name":"network","required":true,"type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VsphereDnsMapping"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified vSphere DNS mapping","tags":["v1"]}},"/v1/users/assets/vsphere/dnsMappings":{"get":{"operationId":"v1VsphereDnsMappingsGet","parameters":[{"description":"Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.","in":"query","name":"filters","type":"string"},{"description":"Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1","in":"query","name":"orderBy","type":"string"}],"responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VsphereDnsMappings"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified vSphere DNS mappings","tags":["v1"]},"post":{"operationId":"v1VsphereDnsMappingCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VsphereDnsMapping"}}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create a vSphere DNS mapping","tags":["v1"]}},"/v1/users/assets/vsphere/dnsMappings/{uid}":{"delete":{"operationId":"v1VsphereDnsMappingDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified vSphere DNS mapping","tags":["v1"]},"get":{"operationId":"v1VsphereDnsMappingGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1VsphereDnsMapping"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified vSphere DNS mapping","tags":["v1"]},"parameters":[{"description":"Specify the vSphere DNS mapping uid","in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1VsphereDnsMappingUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1VsphereDnsMapping"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified vSphere DNS mapping","tags":["v1"]}},"/v1/users/auth/tokens/revoke":{"post":{"operationId":"v1UsersAuthTokensRevoke","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1AuthTokenRevoke"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Revoke access of specific token(s)","tags":["v1"]}},"/v1/users/config/scar":{"get":{"operationId":"V1UsersConfigScarGet","responses":{"200":{"description":"(empty)","schema":{"$ref":"#/definitions/v1SystemScarSpec"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Get the system Spectro repository. Restricted to edge services","tags":["v1"]}},"/v1/users/kubectl/session/{sessionUid}":{"get":{"description":"gets users kubectl session","operationId":"V1UsersKubectlSessionUid","parameters":[{"in":"path","name":"sessionUid","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UserKubectlSession"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"gets users kubectl session","tags":["v1"]}},"/v1/users/me":{"get":{"description":"Returns a User with permissions with scopes","operationId":"v1UsersMeGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UserMe"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified User ACL information","tags":["v1","docs-hide"]}},"/v1/users/meta":{"get":{"operationId":"v1UsersMetadata","responses":{"200":{"description":"An array of users metadata items","schema":{"$ref":"#/definitions/v1UsersMetadata"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of users metadata","tags":["v1"]}},"/v1/users/password/change":{"patch":{"description":"User password change request via current password and emailId","operationId":"V1UsersPasswordChange","parameters":[{"in":"body","name":"body","required":true,"schema":{"properties":{"currentPassword":{"type":"string"},"emailId":{"type":"string"},"newPassword":{"type":"string"}},"required":["newPassword","emailId","currentPassword"],"type":"object"}}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"User password change request using the user emailId","tags":["v1"]}},"/v1/users/password/reset":{"patch":{"description":"User password request will be sent to the supplied emailId","operationId":"v1UsersEmailPasswordReset","parameters":[{"in":"body","name":"body","required":true,"schema":{"properties":{"emailId":{"type":"string"}},"required":["emailId"],"type":"object"}}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"User password reset request using the email id","tags":["v1"]}},"/v1/users/summary":{"get":{"description":"Deprecated, Use Post api - Returns a list of user summaries","operationId":"v1UsersSummary","parameters":[{"default":50,"description":"limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.","format":"int64","in":"query","name":"limit","type":"integer"},{"description":"offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.","format":"int64","in":"query","name":"offset","type":"integer"},{"description":"continue token to paginate the subsequent data items","in":"query","name":"continue","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UsersSummary"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified user summary list","tags":["v1"]},"post":{"operationId":"v1UsersSummaryGet","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UsersSummarySpec"}}],"responses":{"200":{"description":"An array of users summary items","schema":{"$ref":"#/definitions/v1UsersSummaryList"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Retrieves a list of users summary with provided filter spec","tags":["v1"]}},"/v1/users/system/macros":{"delete":{"operationId":"v1UsersSystemMacrosDeleteByMacroName","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete the macros for the system user by macro name","tags":["v1"]},"get":{"operationId":"v1UsersSystemMacrosList","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Macros"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"List the macros of the system","tags":["v1"]},"patch":{"operationId":"v1UsersSystemMacrosUpdateByMacroName","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the macros for the system user by macro name","tags":["v1"]},"post":{"operationId":"v1UsersSystemMacrosCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create or add new macros for the system user","tags":["v1"]},"put":{"operationId":"v1UsersSystemMacrosUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1Macros"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update the macros of the system","tags":["v1"]}},"/v1/users/{uid}":{"delete":{"description":"Deletes the specified User for given uid","operationId":"v1UsersUidDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified User","tags":["v1"]},"get":{"description":"Returns a User for the specified uid.","operationId":"v1UsersUidGet","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1User"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified User","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"description":"User is patched for the specified information","operationId":"v1UsersUidPatch","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1UserPatch"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Patches the specified User","tags":["v1"]},"put":{"description":"A user is created for the given user context","operationId":"v1UsersUidUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserUpdateEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update User","tags":["v1"]}},"/v1/users/{uid}/password/change":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"description":"User password change request via current password","operationId":"v1UsersUidPasswordChange","parameters":[{"in":"body","name":"body","required":true,"schema":{"properties":{"currentPassword":{"type":"string"},"newPassword":{"type":"string"}},"required":["newPassword"],"type":"object"}}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"User password change request using the user uid","tags":["v1"]}},"/v1/users/{uid}/password/reset":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"description":"User password reset request, will send the password reset option through the emailId","operationId":"v1UsersUidPasswordReset","responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"User password reset request using the user uid","tags":["v1"]}},"/v1/users/{uid}/projects":{"get":{"description":"Returns a User with projects and roles","operationId":"v1UsersProjectRoles","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ProjectRolesEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified User Projects and Roles information","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"description":"User is updated with projects and roles","operationId":"v1UsersProjectRolesPut","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ProjectRolesPatch"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the projects and roles for user","tags":["v1"]}},"/v1/users/{uid}/resourceRoles":{"get":{"description":"Returns resource roles for user","operationId":"v1UsersUidResourceRoles","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1ResourceRoles"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified individual and resource roles for a user","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"description":"Resource roles added to specific user","operationId":"v1UsersUidResourceRolesCreate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ResourceRolesUpdateEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Add resource roles for user","tags":["v1"]}},"/v1/users/{uid}/resourceRoles/{resourceRoleUid}":{"delete":{"operationId":"v1UsersUidResourceRolesUidDelete","responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deleted the resource roles from user","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"resourceRoleUid","required":true,"type":"string"}],"patch":{"description":"Specific resource roles fo user is updated","operationId":"v1UsersResourceRolesUidUpdate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1ResourceRolesUpdateEntity"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the resource roles for user","tags":["v1"]}},"/v1/users/{uid}/roles":{"get":{"description":"Returns roles clubbed from team","operationId":"v1UsersUidRoles","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1UserRolesEntity"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified individual and team roles for a user","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"description":"User is updated with roles","operationId":"v1UsersUidRolesUpdate","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1UserRoleUIDs"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the roles for user","tags":["v1"]}},"/v1/users/{uid}/status/loginMode":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"patch":{"operationId":"v1UsersStatusLoginMode","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1UserStatusLoginMode"}}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Users status login mode","tags":["v1"]}},"/v1/workspaces":{"post":{"operationId":"v1WorkspacesCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create workspace","tags":["v1"]}},"/v1/workspaces/teams/{teamUid}/roles":{"get":{"operationId":"v1TeamsWorkspaceGetRoles","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1WorkspaceScopeRoles"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified team's workspaces and roles data","tags":["v1"]},"parameters":[{"in":"path","name":"teamUid","required":true,"type":"string"}],"put":{"operationId":"v1TeamsWorkspaceRolesPut","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1WorkspacesRolesPatch"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the workspace roles for the specified team","tags":["v1"]}},"/v1/workspaces/users/{userUid}/roles":{"get":{"description":"Returns a User with workspaces and roles","operationId":"v1UsersWorkspaceGetRoles","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1WorkspaceScopeRoles"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified User workspaces and Roles information","tags":["v1"]},"parameters":[{"in":"path","name":"userUid","required":true,"type":"string"}],"put":{"description":"User is updated with workspace roles","operationId":"v1UsersWorkspaceRolesPut","parameters":[{"in":"body","name":"body","required":true,"schema":{"$ref":"#/definitions/v1WorkspacesRolesPatch"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the workspace roles for user","tags":["v1"]}},"/v1/workspaces/validate/name":{"get":{"operationId":"v1WorkspacesValidateName","parameters":[{"in":"query","name":"name","required":true,"type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"Ok response without content","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Validates the workspace name","tags":["v1"]}},"/v1/workspaces/{uid}":{"delete":{"operationId":"v1WorkspacesUidDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified workspace","tags":["v1"]},"get":{"operationId":"v1WorkspacesUidGet","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1Workspace"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the specified workspace","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/workspaces/{uid}/backup":{"delete":{"operationId":"v1WorkspaceOpsBackupDelete","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceBackupDeleteEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Delete workspace backup","tags":["v1"]},"get":{"operationId":"v1WorkspaceOpsBackupGet","parameters":[{"in":"query","name":"backupRequestUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1WorkspaceBackup"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the workspace backup result","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1WorkspaceOpsBackupCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceBackupConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create workspace backup settings","tags":["v1"]},"put":{"operationId":"v1WorkspaceOpsBackupUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceBackupConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Update workspace backup settings","tags":["v1"]}},"/v1/workspaces/{uid}/backup/onDemand":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1WorkspaceOpsBackupOnDemandCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceBackupConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create On demand Workspace Backup","tags":["v1"]}},"/v1/workspaces/{uid}/clusterNamespaces":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1WorkspacesUidClusterNamespacesUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceClusterNamespacesEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified workspace namespaces","tags":["v1"]}},"/v1/workspaces/{uid}/clusterRbacs":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1WorkspacesClusterRbacCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterRbac"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create cluster rbac in workspace","tags":["v1"]}},"/v1/workspaces/{uid}/clusterRbacs/{clusterRbacUid}":{"delete":{"operationId":"v1WorkspacesUidClusterRbacDelete","parameters":[{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was deleted successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Deletes the specified workspace cluster rbac","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"},{"in":"path","name":"clusterRbacUid","required":true,"type":"string"}],"put":{"operationId":"v1WorkspacesUidClusterRbacUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ClusterRbac"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified workspace cluster rbac","tags":["v1"]}},"/v1/workspaces/{uid}/meta":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"operationId":"v1WorkspacesUidMetaUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1ObjectMeta"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified workspace meta","tags":["v1"]}},"/v1/workspaces/{uid}/resourceAllocations":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"put":{"description":"Deprecated","operationId":"v1WorkspacesUidResourceAllocationsUpdate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceResourceAllocationsEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"204":{"description":"The resource was updated successfully"}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Updates the specified workspace resource allocations","tags":["v1"]}},"/v1/workspaces/{uid}/restore":{"get":{"operationId":"v1WorkspaceOpsRestoreGet","parameters":[{"in":"query","name":"restoreRequestUid","type":"string"},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/v1WorkspaceRestore"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Returns the workspace restore result","tags":["v1"]},"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}]},"/v1/workspaces/{uid}/restore/onDemand":{"parameters":[{"in":"path","name":"uid","required":true,"type":"string"}],"post":{"operationId":"v1WorkspaceOpsRestoreOnDemandCreate","parameters":[{"in":"body","name":"body","schema":{"$ref":"#/definitions/v1WorkspaceRestoreConfigEntity"}},{"description":"Scope the request to the specified project uid","in":"header","name":"ProjectUid","type":"string"}],"responses":{"201":{"description":"Created successfully","headers":{"AuditUid":{"description":"Audit uid for the request","type":"string"}},"schema":{"$ref":"#/definitions/v1Uid"}}},"security":[{"ApiKey":[]},{"Authorization":[]}],"summary":"Create On demand Workspace Restore","tags":["v1"]}}},"produces":["application/json"],"schemes":["http","https"],"securityDefinitions":{"ApiKey":{"description":"API key authorization where API key can be generated from Palette console under Profile \u003e My API Keys","in":"header","name":"ApiKey","type":"apiKey"},"Authorization":{"description":"JWT token authorization obtained using /v1/auth/authenticate api","in":"header","name":"Authorization","type":"apiKey"}},"swagger":"2.0"} \ No newline at end of file +{ + "consumes": [ + "application/json" + ], + "definitions": { + "URLEncodedBase64": { + "format": "url-encoded-base64", + "type": "string" + }, + "V1AwsAccountSts": { + "description": "AWS cloud account sts", + "properties": { + "accountId": { + "description": "A 12-digit number, such as 123456789012, that uniquely identifies an AWS account", + "type": "string" + }, + "externalId": { + "description": "It can be passed to the AssumeRole API of the STS. It can be used in the condition element in a role's trust policy, allowing the role to be assumed only when a certain value is present in the external ID", + "type": "string" + }, + "partition": { + "$ref": "#/definitions/v1AwsPartition" + } + }, + "type": "object" + }, + "V1AwsPropertiesValidateSpec": { + "description": "AWS properties validate spec", + "properties": { + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + } + }, + "type": "object" + }, + "V1EksPropertiesValidateSpec": { + "description": "Eks properties validate spec", + "properties": { + "cloudAccountUid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnets": { + "items": { + "type": "string" + }, + "type": "array" + }, + "vpcId": { + "type": "string" + } + }, + "type": "object" + }, + "V1GcpPropertiesValidateSpec": { + "description": "Gcp properties validate spec", + "properties": { + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "cloudAccountUid": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "region": { + "type": "string" + } + }, + "type": "object" + }, + "V1PasswordsBlockList": { + "description": "List of blocklisted passwords", + "properties": { + "spec": { + "$ref": "#/definitions/v1PasswordsBlockListEntity" + } + }, + "type": "object" + }, + "urlEncodedBase64": { + "format": "url-encoded-base64", + "type": "string" + }, + "v1.AzureAccountEntitySpec": { + "properties": { + "clientCloud": { + "default": "public", + "description": "Contains configuration for Azure cloud", + "enum": [ + "azure-china", + "azure-government", + "public" + ], + "type": "string" + }, + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + }, + "type": "object" + }, + "v1.CloudWatchConfig": { + "description": "Cloud watch config entity", + "properties": { + "credentials": { + "$ref": "#/definitions/v1AwsCloudAccount" + }, + "group": { + "description": "Name of the group", + "type": "string" + }, + "region": { + "description": "Name of the region", + "type": "string" + }, + "stream": { + "description": "Name of the stream", + "type": "string" + } + }, + "type": "object" + }, + "v1.DataSinkCloudWatchConfig": { + "description": "Data sink cloud watch config", + "properties": { + "payload": { + "$ref": "#/definitions/v1.DataSinkPayloads" + }, + "spec": { + "$ref": "#/definitions/v1.CloudWatchConfig" + } + }, + "type": "object" + }, + "v1.DataSinkPayload": { + "additionalProperties": { + "type": "object" + }, + "description": "Data sink payload entity", + "properties": { + "refUid": { + "description": "RefUid of the data sink payload", + "type": "string" + }, + "timestamp": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1.DataSinkPayloads": { + "description": "List of data sink payload entities", + "items": { + "$ref": "#/definitions/v1.DataSinkPayload" + }, + "type": "array", + "uniqueItems": true + }, + "v1.GcpAccountEntitySpec": { + "properties": { + "jsonCredentials": { + "type": "string" + }, + "jsonCredentialsFileUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1AADProfile": { + "description": "AADProfile - AAD integration is managed by AKS.", + "properties": { + "adminGroupObjectIDs": { + "description": "AdminGroupObjectIDs - AAD group object IDs that will have admin role of the cluster.", + "items": { + "type": "string" + }, + "type": "array" + }, + "managed": { + "description": "Managed - Whether to enable managed AAD.", + "type": "boolean", + "x-omitempty": false + } + }, + "required": [ + "managed", + "adminGroupObjectIDs" + ], + "type": "object" + }, + "v1APIEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "format": "int32", + "type": "integer" + } + }, + "required": [ + "host", + "port" + ], + "type": "object" + }, + "v1APIServerAccessProfile": { + "description": "APIServerAccessProfile - access profile for AKS API server.", + "properties": { + "authorizedIPRanges": { + "description": "AuthorizedIPRanges - Authorized IP Ranges to kubernetes API server.", + "items": { + "default": "", + "type": "string" + }, + "type": "array" + }, + "enablePrivateCluster": { + "description": "EnablePrivateCluster - Whether to create the cluster as a private cluster or not.", + "type": "boolean" + }, + "enablePrivateClusterPublicFQDN": { + "description": "EnablePrivateClusterPublicFQDN - Whether to create additional public FQDN for private cluster or not.", + "type": "boolean" + }, + "privateDNSZone": { + "description": "PrivateDNSZone - Private dns zone mode for private cluster.", + "type": "string" + } + }, + "type": "object" + }, + "v1AWSVolumeTypes": { + "description": "AWS Volume Types", + "properties": { + "volumeTypes": { + "items": { + "$ref": "#/definitions/v1AwsVolumeType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AclMeta": { + "description": "Resource access control information (Read-only response data)", + "properties": { + "ownerUid": { + "description": "User or service uid which created the resource", + "type": "string" + }, + "projectUid": { + "description": "Project's uid if the resource is under a project", + "type": "string" + }, + "tenantUid": { + "description": "Tenant's uid", + "type": "string" + } + }, + "type": "object" + }, + "v1ActiveTenantResources": { + "description": "Active resources of tenant", + "properties": { + "activeResources": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1Address": { + "description": "Tenant Address", + "properties": { + "addressLine1": { + "type": "string" + }, + "addressLine2": { + "type": "string" + }, + "city": { + "type": "string" + }, + "country": { + "type": "string" + }, + "pincode": { + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1Alert": { + "properties": { + "channels": { + "items": { + "$ref": "#/definitions/v1Channel" + }, + "type": "array" + }, + "component": { + "type": "string" + } + }, + "type": "object" + }, + "v1AlertEntity": { + "properties": { + "channels": { + "items": { + "$ref": "#/definitions/v1Channel" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AlertNotificationStatus": { + "properties": { + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "time": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1Alerts": { + "items": { + "$ref": "#/definitions/v1Alert" + }, + "type": "array" + }, + "v1ApiEndpoint": { + "description": "APIEndpoint represents a reachable Kubernetes API endpoint.", + "properties": { + "host": { + "description": "The hostname on which the API server is serving.", + "type": "string" + }, + "port": { + "description": "The port on which the API server is serving.", + "format": "int32", + "type": "integer" + } + }, + "required": [ + "host", + "port" + ], + "type": "object" + }, + "v1ApiKey": { + "description": "API key information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ApiKeySpec" + }, + "status": { + "$ref": "#/definitions/v1ApiKeyStatus" + } + }, + "type": "object" + }, + "v1ApiKeyActiveState": { + "properties": { + "isActive": { + "description": "API key active state", + "type": "boolean" + } + } + }, + "v1ApiKeyCreateResponse": { + "description": "Response of create API key", + "properties": { + "apiKey": { + "description": "Api key is used for authentication", + "type": "string" + }, + "uid": { + "description": "User uid", + "type": "string" + } + }, + "type": "object" + }, + "v1ApiKeyEntity": { + "description": "API key request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ApiKeySpecEntity" + } + }, + "type": "object" + }, + "v1ApiKeySpec": { + "description": "API key specification", + "properties": { + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "API key expiry date" + }, + "key": { + "description": "Deprecated: API key field will be no longer available", + "type": "string" + }, + "user": { + "$ref": "#/definitions/v1ApiKeyUser", + "description": "User to whom the API key is created" + } + }, + "type": "object" + }, + "v1ApiKeySpecEntity": { + "description": "API key specification", + "properties": { + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "API key expiry date" + }, + "userUid": { + "description": "User to whom the API key has to be created", + "type": "string" + } + }, + "type": "object" + }, + "v1ApiKeySpecUpdate": { + "description": "API key update request specification", + "properties": { + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "API key expiry date" + } + } + }, + "v1ApiKeyStatus": { + "description": "API key status", + "properties": { + "isActive": { + "description": "API key active state", + "type": "boolean" + } + }, + "type": "object" + }, + "v1ApiKeyUpdate": { + "description": "API key update request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ApiKeySpecUpdate" + } + }, + "type": "object" + }, + "v1ApiKeyUser": { + "description": "API key user information", + "properties": { + "firstName": { + "description": "First name of user", + "type": "string" + }, + "lastName": { + "description": "Last name of user", + "type": "string" + }, + "uid": { + "description": "User uid", + "type": "string" + } + }, + "type": "object" + }, + "v1ApiKeys": { + "properties": { + "items": { + "description": "List of API keys", + "items": { + "$ref": "#/definitions/v1ApiKey" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ApiProfiler": { + "properties": { + "api": { + "type": "string" + }, + "endTime": { + "format": "date-time", + "type": "string" + }, + "ops": { + "items": { + "type": "string" + }, + "type": "array" + }, + "requestUid": { + "type": "string" + }, + "startTime": { + "format": "date-time", + "type": "string" + }, + "timeTaken": { + "format": "int64", + "type": "integer" + } + }, + "type": "object" + }, + "v1AppDeployment": { + "description": "Application deployment response", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1AppDeploymentSpec" + }, + "status": { + "$ref": "#/definitions/v1AppDeploymentStatus" + } + }, + "type": "object" + }, + "v1AppDeploymentClusterGroupConfigEntity": { + "description": "Application deployment cluster group config", + "properties": { + "targetSpec": { + "$ref": "#/definitions/v1AppDeploymentClusterGroupTargetSpec" + } + }, + "type": "object" + }, + "v1AppDeploymentClusterGroupEntity": { + "description": "Application deployment cluster group request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1AppDeploymentClusterGroupSpec" + } + }, + "type": "object" + }, + "v1AppDeploymentClusterGroupSpec": { + "description": "Application deployment cluster group spec", + "properties": { + "config": { + "$ref": "#/definitions/v1AppDeploymentClusterGroupConfigEntity" + }, + "profile": { + "$ref": "#/definitions/v1AppDeploymentProfileEntity" + } + }, + "type": "object" + }, + "v1AppDeploymentClusterGroupTargetSpec": { + "description": "Application deployment cluster group target spec", + "properties": { + "clusterGroupUid": { + "description": "Application deployment cluster group uid", + "type": "string" + }, + "clusterLimits": { + "$ref": "#/definitions/v1AppDeploymentTargetClusterLimits" + }, + "clusterName": { + "description": "Application deployment virtual cluster name", + "type": "string" + } + }, + "required": [ + "clusterName", + "clusterGroupUid" + ], + "type": "object" + }, + "v1AppDeploymentClusterHealth": { + "description": "Application deployment cluster health status", + "properties": { + "state": { + "type": "string" + } + } + }, + "v1AppDeploymentClusterRef": { + "description": "Application deployment cluster reference", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "enum": [ + "virtual", + "host" + ], + "type": "string" + }, + "name": { + "description": "Application deployment cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment cluster uid", + "type": "string" + } + }, + "type": "object" + }, + "v1AppDeploymentClusterRefSummary": { + "description": "Application deployment cluster reference", + "properties": { + "deploymentClusterType": { + "description": "Application deployment source cluster type[ \"virtualCluster\", \"hostCluster\" ]", + "enum": [ + "virtual", + "host" + ], + "type": "string" + }, + "name": { + "description": "Application deployment source cluster name", + "type": "string" + }, + "uid": { + "description": "Application deployment source cluster uid", + "type": "string" + } + } + }, + "v1AppDeploymentClusterStatus": { + "description": "Application deployment cluster status", + "properties": { + "health": { + "$ref": "#/definitions/v1AppDeploymentClusterHealth" + }, + "state": { + "type": "string" + } + } + }, + "v1AppDeploymentConfig": { + "description": "Application deployment config response", + "properties": { + "target": { + "$ref": "#/definitions/v1AppDeploymentTargetConfig" + } + }, + "type": "object" + }, + "v1AppDeploymentConfigSummary": { + "description": "Application deployment config summary", + "properties": { + "target": { + "$ref": "#/definitions/v1AppDeploymentTargetConfigSummary" + } + } + }, + "v1AppDeploymentFilterSpec": { + "description": "Application deployment filter spec", + "properties": { + "appDeploymentName": { + "$ref": "#/definitions/v1FilterString" + }, + "clusterUids": { + "$ref": "#/definitions/v1FilterArray" + }, + "tags": { + "$ref": "#/definitions/v1FilterArray" + } + } + }, + "v1AppDeploymentNotifications": { + "description": "Application deployment notifications", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1AppDeploymentProfile": { + "description": "Application deployment profile", + "properties": { + "metadata": { + "$ref": "#/definitions/v1AppDeploymentProfileMeta" + }, + "template": { + "$ref": "#/definitions/v1AppProfileTemplate" + } + }, + "type": "object" + }, + "v1AppDeploymentProfileEntity": { + "description": "Application deployment profile request payload", + "properties": { + "appProfileUid": { + "description": "Application deployment profile uid", + "type": "string" + } + }, + "required": [ + "appProfileUid" + ], + "type": "object" + }, + "v1AppDeploymentProfileMeta": { + "description": "Application deployment profile metadata", + "properties": { + "name": { + "description": "Application deployment profile name", + "type": "string" + }, + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + }, + "type": "object" + }, + "v1AppDeploymentProfileMetadataSummary": { + "description": "Application deployment profile metadata summary", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1AppDeploymentProfileSpec": { + "description": "Application deployment profile spec", + "properties": { + "metadata": { + "$ref": "#/definitions/v1AppDeploymentProfileMeta" + }, + "template": { + "$ref": "#/definitions/v1AppProfileTemplateSpec" + } + }, + "type": "object" + }, + "v1AppDeploymentProfileSummary": { + "description": "Application deployment profile summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1AppDeploymentProfileMetadataSummary" + }, + "template": { + "$ref": "#/definitions/v1AppProfileTemplateSummary" + } + } + }, + "v1AppDeploymentProfileVersion": { + "description": "Application deployment profile version", + "properties": { + "uid": { + "description": "Application deployment profile uid", + "type": "string" + }, + "version": { + "description": "Application deployment profile version", + "type": "string" + } + }, + "type": "object" + }, + "v1AppDeploymentProfileVersions": { + "description": "Application deployment profile versions", + "properties": { + "availableVersions": { + "description": "Application deployment profile available versions", + "items": { + "$ref": "#/definitions/v1AppDeploymentProfileVersion" + }, + "type": "array" + }, + "latestVersions": { + "description": "Application deployment profile latest versions", + "items": { + "$ref": "#/definitions/v1AppDeploymentProfileVersion" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1AppDeploymentProfileMeta" + } + }, + "type": "object" + }, + "v1AppDeploymentSortFields": { + "enum": [ + "appDeploymentName", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "type": "string", + "x-nullable": true + }, + "v1AppDeploymentSortSpec": { + "properties": { + "field": { + "$ref": "#/definitions/v1AppDeploymentSortFields" + }, + "order": { + "$ref": "#/definitions/v1SortOrder" + } + } + }, + "v1AppDeploymentSpec": { + "description": "Application deployment spec", + "properties": { + "config": { + "$ref": "#/definitions/v1AppDeploymentConfig" + }, + "profile": { + "$ref": "#/definitions/v1AppDeploymentProfile" + } + }, + "type": "object" + }, + "v1AppDeploymentStatus": { + "description": "Application deployment status", + "properties": { + "appTiers": { + "description": "Application deployment tiers", + "items": { + "$ref": "#/definitions/v1ClusterPackStatus" + }, + "type": "array" + }, + "lifecycleStatus": { + "$ref": "#/definitions/v1LifecycleStatus" + }, + "state": { + "description": "Application deployment state [ \"Pending\", \"Deploying\", \"Deployed\", \"Updating\" ]", + "type": "string" + } + }, + "type": "object" + }, + "v1AppDeploymentStatusSummary": { + "description": "Application deployment status summary", + "properties": { + "cluster": { + "$ref": "#/definitions/v1AppDeploymentClusterStatus" + }, + "notifications": { + "$ref": "#/definitions/v1AppDeploymentNotifications" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1AppDeploymentSummary": { + "description": "Application deployment summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "description": "Application deployment spec summary", + "properties": { + "config": { + "$ref": "#/definitions/v1AppDeploymentConfigSummary" + }, + "profile": { + "$ref": "#/definitions/v1AppDeploymentProfileSummary" + } + }, + "type": "object" + }, + "status": { + "$ref": "#/definitions/v1AppDeploymentStatusSummary" + } + }, + "type": "object" + }, + "v1AppDeploymentTargetClusterLimits": { + "description": "Application deployment target cluster limits", + "properties": { + "cpu": { + "description": "CPU cores", + "format": "int32", + "type": "integer" + }, + "memoryMiB": { + "description": "Memory in MiB", + "format": "int32", + "type": "integer" + }, + "storageGiB": { + "description": "Storage in GiB", + "format": "int32", + "type": "integer" + } + } + }, + "v1AppDeploymentTargetConfig": { + "description": "Application deployment target config response", + "properties": { + "clusterRef": { + "$ref": "#/definitions/v1AppDeploymentClusterRef" + }, + "envRef": { + "$ref": "#/definitions/v1AppDeploymentTargetEnvironmentRef" + } + }, + "type": "object" + }, + "v1AppDeploymentTargetConfigSummary": { + "description": "Application deployment target config summary", + "properties": { + "clusterRef": { + "$ref": "#/definitions/v1AppDeploymentClusterRefSummary" + } + } + }, + "v1AppDeploymentTargetEnvironmentRef": { + "description": "Application deployment target environment reference", + "properties": { + "name": { + "description": "Application deployment target resource name", + "type": "string" + }, + "type": { + "description": "Application deployment target resource type [ \"nestedCluster\", \"clusterGroup\" ]", + "type": "string" + }, + "uid": { + "description": "Application deployment target resource uid", + "type": "string" + } + }, + "type": "object" + }, + "v1AppDeploymentVirtualClusterConfigEntity": { + "description": "Application deployment virtual cluster config", + "properties": { + "targetSpec": { + "$ref": "#/definitions/v1AppDeploymentVirtualClusterTargetSpec" + } + }, + "type": "object" + }, + "v1AppDeploymentVirtualClusterEntity": { + "description": "Application deployment virtual cluster request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1AppDeploymentVirtualClusterSpec" + } + }, + "type": "object" + }, + "v1AppDeploymentVirtualClusterSpec": { + "description": "Application deployment virtual cluster spec", + "properties": { + "config": { + "$ref": "#/definitions/v1AppDeploymentVirtualClusterConfigEntity" + }, + "profile": { + "$ref": "#/definitions/v1AppDeploymentProfileEntity" + } + }, + "type": "object" + }, + "v1AppDeploymentVirtualClusterTargetSpec": { + "description": "Application deployment virtual cluster target spec", + "properties": { + "clusterUid": { + "description": "Application deployment virtual cluster uid", + "type": "string" + } + }, + "required": [ + "clusterUid" + ], + "type": "object" + }, + "v1AppDeploymentsFilterSpec": { + "description": "Application deployment filter summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1AppDeploymentFilterSpec" + }, + "sort": { + "items": { + "$ref": "#/definitions/v1AppDeploymentSortSpec" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1AppDeploymentsSummary": { + "properties": { + "appDeployments": { + "items": { + "$ref": "#/definitions/v1AppDeploymentSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "type": "object" + }, + "v1AppFeatureFreemium": { + "description": "Freemium information", + "properties": { + "activeClustersLimit": { + "type": "integer", + "x-omitempty": false + }, + "isFreemium": { + "type": "boolean", + "x-omitempty": false + }, + "overageUsageLimit": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "totalUsageLimit": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + } + }, + "v1AppFeatures": { + "description": "System app features", + "properties": { + "developerCredit": { + "$ref": "#/definitions/v1DeveloperCredit" + }, + "freeCloudCredit": { + "type": "boolean", + "x-omitempty": false + }, + "freemium": { + "$ref": "#/definitions/v1AppFeatureFreemium" + } + } + }, + "v1AppProfile": { + "description": "Application profile response", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "parentUid": { + "description": "Application profile parent profile uid", + "type": "string" + }, + "template": { + "$ref": "#/definitions/v1AppProfileTemplate" + }, + "version": { + "description": "Application profile version", + "type": "string" + }, + "versions": { + "description": "Application profile versions list", + "items": { + "$ref": "#/definitions/v1AppProfileVersion" + }, + "type": "array" + } + }, + "type": "object" + }, + "status": { + "description": "Application profile status", + "properties": { + "inUseApps": { + "description": "Application profile apps array", + "items": { + "$ref": "#/definitions/v1ObjectResReference" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1AppProfileCloneEntity": { + "description": "Application profile clone request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1AppProfileCloneMetaInputEntity" + } + }, + "type": "object" + }, + "v1AppProfileCloneMetaInputEntity": { + "description": "Application profile clone metadata", + "properties": { + "name": { + "description": "Application profile name", + "type": "string" + }, + "target": { + "$ref": "#/definitions/v1AppProfileCloneTarget" + }, + "version": { + "description": "Application profile version", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1AppProfileCloneTarget": { + "description": "Application profile clone target", + "properties": { + "projectUid": { + "description": "Application profile clone target project uid", + "type": "string" + } + }, + "type": "object" + }, + "v1AppProfileEntity": { + "description": "Application profile request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "description": "Application profile spec", + "properties": { + "template": { + "$ref": "#/definitions/v1AppProfileTemplateEntity" + }, + "version": { + "description": "Application profile version", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1AppProfileFilterSpec": { + "description": "Application profile filter spec", + "properties": { + "profileName": { + "$ref": "#/definitions/v1FilterString" + }, + "tags": { + "$ref": "#/definitions/v1FilterArray" + }, + "version": { + "$ref": "#/definitions/v1FilterVersionString" + } + } + }, + "v1AppProfileMetaEntity": { + "description": "Application profile metadata request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1AppProfileMetaUpdateEntity" + }, + "version": { + "description": "Application profile version", + "type": "string" + } + }, + "required": [ + "metadata" + ], + "type": "object" + }, + "v1AppProfileMetaUpdateEntity": { + "description": "Application profile metadata update request payload", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Application profile annotations", + "type": "object" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Application profile labels", + "type": "object" + } + }, + "type": "object" + }, + "v1AppProfileMetadata": { + "description": "Application profile metadata summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "spec": { + "properties": { + "version": { + "type": "string" + } + } + } + }, + "type": "object" + }, + "v1AppProfileSortFields": { + "enum": [ + "profileName", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "type": "string", + "x-nullable": true + }, + "v1AppProfileSortSpec": { + "properties": { + "field": { + "$ref": "#/definitions/v1AppProfileSortFields" + }, + "order": { + "$ref": "#/definitions/v1SortOrder" + } + } + }, + "v1AppProfileSummary": { + "description": "Application profile summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "description": "Application profile spec summary", + "properties": { + "parentUid": { + "type": "string" + }, + "template": { + "$ref": "#/definitions/v1AppProfileTemplateSummary" + }, + "version": { + "type": "string" + }, + "versions": { + "description": "Application profile's list of all the versions", + "items": { + "$ref": "#/definitions/v1AppProfileVersion" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1AppProfileTemplate": { + "description": "Application profile template information", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "items": { + "$ref": "#/definitions/v1AppTierRef" + }, + "type": "array", + "uniqueItems": true + }, + "registryRefs": { + "description": "Application profile registries reference", + "items": { + "$ref": "#/definitions/v1ObjectReference" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AppProfileTemplateEntity": { + "description": "Application profile template spec", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "items": { + "$ref": "#/definitions/v1AppTierEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1AppProfileTemplateSpec": { + "description": "Application profile template specs", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "items": { + "$ref": "#/definitions/v1AppTier" + }, + "type": "array", + "uniqueItems": true + }, + "registryRefs": { + "description": "Application profile registries reference", + "items": { + "$ref": "#/definitions/v1ObjectReference" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AppProfileTemplateSummary": { + "description": "Application profile template summary", + "properties": { + "appTiers": { + "items": { + "$ref": "#/definitions/v1AppTierSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AppProfileTiers": { + "description": "Application profile tiers information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1AppProfileTiersSpec" + } + }, + "type": "object" + }, + "v1AppProfileTiersSpec": { + "description": "Application profile tiers information", + "properties": { + "appTiers": { + "description": "Application profile tiers", + "items": { + "$ref": "#/definitions/v1AppTier" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1AppProfileVersion": { + "description": "Application profile version", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1AppProfilesFilterSpec": { + "description": "Application profile filter summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1AppProfileFilterSpec" + }, + "sort": { + "items": { + "$ref": "#/definitions/v1AppProfileSortSpec" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1AppProfilesMetadata": { + "properties": { + "appProfiles": { + "items": { + "$ref": "#/definitions/v1AppProfileMetadata" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1AppProfilesSummary": { + "properties": { + "appProfiles": { + "items": { + "$ref": "#/definitions/v1AppProfileSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "type": "object" + }, + "v1AppTier": { + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1AppTierSpec" + } + } + }, + "v1AppTierEntity": { + "description": "Application tier request payload", + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "format": "int32", + "type": "integer" + }, + "manifests": { + "description": "Application tier manifests", + "items": { + "$ref": "#/definitions/v1ManifestInputEntity" + }, + "type": "array" + }, + "name": { + "description": "Application tier name", + "type": "string" + }, + "properties": { + "description": "Application tier properties", + "items": { + "$ref": "#/definitions/v1AppTierPropertyEntity" + }, + "type": "array" + }, + "registryUid": { + "description": "Application tier registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "$ref": "#/definitions/v1AppTierType" + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1AppTierManifests": { + "description": "Application tier manifests data", + "properties": { + "manifests": { + "description": "Application tier manifests array", + "items": { + "$ref": "#/definitions/v1Manifest" + }, + "type": "array" + } + } + }, + "v1AppTierPatchEntity": { + "description": "Application tier patch request payload", + "properties": { + "appTier": { + "$ref": "#/definitions/v1AppTierEntity" + }, + "replaceWithAppTier": { + "description": "Application tier UID to be replaced with new tier", + "type": "string" + } + } + }, + "v1AppTierProperty": { + "description": "Application tier property object", + "properties": { + "format": { + "description": "Application tier property format", + "type": "string" + }, + "name": { + "description": "Application tier property name", + "type": "string" + }, + "type": { + "description": "Application tier property data type", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + }, + "v1AppTierPropertyEntity": { + "description": "Application tier property object", + "properties": { + "name": { + "description": "Application tier property name", + "type": "string" + }, + "value": { + "description": "Application tier property value", + "type": "string" + } + } + }, + "v1AppTierRef": { + "description": "Application tier reference", + "properties": { + "name": { + "description": "Application tier name", + "type": "string" + }, + "type": { + "$ref": "#/definitions/v1AppTierType" + }, + "uid": { + "description": "Application tier uid to uniquely identify the tier", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + }, + "type": "object" + }, + "v1AppTierResolvedValues": { + "description": "Application tier resolved macro values", + "properties": { + "resolved": { + "additionalProperties": { + "type": "string" + }, + "description": "Application tier resolved macro values map", + "type": "object" + } + } + }, + "v1AppTierSourceSummary": { + "description": "Application profile's tier source information", + "properties": { + "addonSubType": { + "type": "string" + }, + "addonType": { + "type": "string" + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1AppTierSpec": { + "description": "Application tier specs", + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "format": "int32", + "type": "integer" + }, + "manifests": { + "description": "Application tier attached manifest content in yaml format", + "items": { + "$ref": "#/definitions/v1ObjectReference" + }, + "type": "array" + }, + "properties": { + "description": "Application tier properties", + "items": { + "$ref": "#/definitions/v1AppTierProperty" + }, + "type": "array" + }, + "registryUid": { + "description": "Registry uid", + "type": "string" + }, + "sourceAppTierUid": { + "description": "Application tier source pack uid", + "type": "string" + }, + "type": { + "$ref": "#/definitions/v1AppTierType", + "description": "Application tier type" + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + }, + "type": "object" + }, + "v1AppTierSummary": { + "description": "Application profile's tier summary", + "properties": { + "name": { + "type": "string" + }, + "source": { + "$ref": "#/definitions/v1AppTierSourceSummary" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1AppTierType": { + "default": "manifest", + "enum": [ + "manifest", + "helm", + "operator-instance", + "container" + ], + "type": "string" + }, + "v1AppTierUpdateEntity": { + "description": "Application tier update request payload", + "properties": { + "containerRegistryUid": { + "description": "Application tier container registry uid", + "type": "string" + }, + "installOrder": { + "description": "Application tier installation order", + "format": "int32", + "type": "integer" + }, + "manifests": { + "description": "Application tier manifests", + "items": { + "$ref": "#/definitions/v1ManifestRefUpdateEntity" + }, + "type": "array" + }, + "name": { + "description": "Application tier name", + "type": "string" + }, + "properties": { + "description": "Application tier properties", + "items": { + "$ref": "#/definitions/v1AppTierPropertyEntity" + }, + "type": "array" + }, + "values": { + "description": "Application tier configuration values in yaml format", + "type": "string" + }, + "version": { + "description": "Application tier version", + "type": "string" + } + }, + "type": "object" + }, + "v1AppVersion": { + "description": "spectro application management app version information", + "properties": { + "intermediateVersions": { + "items": { + "$ref": "#/definitions/v1ReleaseVersion" + }, + "type": "array", + "uniqueItems": true + }, + "latestVerson": { + "$ref": "#/definitions/v1ReleaseVersion" + } + } + }, + "v1ArchType": { + "default": "amd64", + "enum": [ + "amd64", + "arm64" + ], + "type": "string" + }, + "v1AsyncOperationIdEntity": { + "description": "Async operation id", + "properties": { + "operationId": { + "description": "OperationId for a particular sync operation id", + "type": "string" + } + }, + "type": "object" + }, + "v1AsyncResult": { + "properties": { + "data": { + "type": "object" + }, + "error": { + "type": "string" + }, + "isSuccess": { + "type": "boolean" + } + }, + "type": "object" + }, + "v1AsyncStatus": { + "properties": { + "endTime": { + "$ref": "#/definitions/v1Time" + }, + "result": { + "$ref": "#/definitions/v1AsyncResult", + "type": "object" + }, + "stage": { + "type": "string" + }, + "startTime": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1Audit": { + "description": "Audit response payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1AuditSpec" + } + }, + "type": "object" + }, + "v1AuditActor": { + "description": "Audit actor object", + "properties": { + "actorType": { + "enum": [ + "user", + "system", + "service" + ], + "type": "string" + }, + "project": { + "$ref": "#/definitions/v1ProjectMeta" + }, + "serviceName": { + "type": "string" + }, + "user": { + "$ref": "#/definitions/v1UserMeta" + } + } + }, + "v1AuditMsgUpdate": { + "description": "Audit user message update request payload", + "properties": { + "userMsg": { + "description": "User message", + "maxLength": 255, + "minLength": 3, + "type": "string" + } + }, + "type": "object" + }, + "v1AuditResourceReference": { + "description": "Audit resource reference object", + "properties": { + "kind": { + "description": "Audit resource type", + "type": "string" + }, + "label": { + "description": "Audit resource label", + "type": "string" + }, + "name": { + "description": "Audit resource name", + "type": "string" + }, + "uid": { + "description": "Audit resource uid", + "type": "string" + } + }, + "required": [ + "uid" + ], + "type": "object" + }, + "v1AuditSpec": { + "description": "Audit specifications", + "properties": { + "actionMsg": { + "description": "Audit action message", + "type": "string" + }, + "actionType": { + "enum": [ + "create", + "update", + "delete", + "publish", + "deploy" + ], + "type": "string" + }, + "actor": { + "$ref": "#/definitions/v1AuditActor" + }, + "contentMsg": { + "description": "Audit content message", + "type": "string" + }, + "resource": { + "$ref": "#/definitions/v1AuditResourceReference" + }, + "userMsg": { + "description": "Audit user message", + "type": "string" + } + } + }, + "v1AuditSysMsg": { + "description": "Audit system message", + "properties": { + "actionMsg": { + "description": "Audit resource action message", + "type": "string" + }, + "contentMsg": { + "description": "Audit resource content message", + "type": "string" + } + }, + "type": "object" + }, + "v1Audits": { + "properties": { + "items": { + "description": "List of audit message", + "items": { + "$ref": "#/definitions/v1Audit" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1AuthAllyTokenRequest": { + "properties": { + "edgeAuthToken": { + "type": "string" + }, + "edgeHostUid": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1AuthCertsGet": { + "description": "Auth certs get", + "properties": { + "caCert": { + "type": "string", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1AuthEdgeJetKeyRequest": { + "properties": { + "edgeAuthToken": { + "type": "string" + }, + "edgeHostUid": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + } + }, + "required": [ + "edgeAuthToken", + "edgeHostUid" + ], + "type": "object" + }, + "v1AuthJetKeyRequest": { + "properties": { + "allyAuthToken": { + "type": "string" + }, + "hostClusterUid": { + "type": "string" + } + }, + "required": [ + "allyAuthToken", + "hostClusterUid" + ], + "type": "object" + }, + "v1AuthLogin": { + "description": "Describes the credential details required for authentication", + "properties": { + "emailId": { + "description": "Describes the email id required for the user to authenticate", + "type": "string" + }, + "org": { + "description": "Describes the user's organization name to login", + "type": "string" + }, + "password": { + "description": "Describes the password required for the user to authenticate", + "format": "password", + "type": "string" + } + }, + "type": "object" + }, + "v1AuthLoginEntity": { + "description": "Auth login entity", + "properties": { + "authType": { + "enum": [ + "password", + "sso" + ], + "type": "string" + }, + "orgName": { + "type": "string" + }, + "redirectUrl": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1AuthLogins": { + "description": "Deprecated. Applicable auth logins with multiple orgs", + "properties": { + "appEnv": { + "type": "string" + }, + "authType": { + "description": "Deprecated.", + "enum": [ + "password", + "sso" + ], + "type": "string" + }, + "orgName": { + "description": "Deprecated.", + "type": "string" + }, + "orgs": { + "items": { + "$ref": "#/definitions/v1AuthLoginEntity" + }, + "type": "array" + }, + "redirectUrl": { + "description": "Deprecated.", + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1AuthMfaLoginFinishRequest": { + "properties": { + "_type": { + "type": "string" + }, + "authenticatorAttachment": { + "type": "string" + }, + "clientExtensionResults": { + "additionalProperties": { + "type": "object" + }, + "type": "object" + }, + "deviceName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "rawId": { + "$ref": "#/definitions/urlEncodedBase64" + }, + "response": { + "properties": { + "authenticatorData": { + "$ref": "#/definitions/urlEncodedBase64" + }, + "clientDataJSON": { + "$ref": "#/definitions/urlEncodedBase64" + }, + "signature": { + "$ref": "#/definitions/urlEncodedBase64" + }, + "userHandle": { + "$ref": "#/definitions/urlEncodedBase64" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1AuthServiceTokenRequest": { + "properties": { + "authKey": { + "type": "string" + }, + "edgeHostUid": { + "type": "string" + }, + "hostClusterUid": { + "type": "string" + }, + "isSystem": { + "type": "boolean" + }, + "jetUid": { + "type": "string" + }, + "overlordUid": { + "type": "string" + }, + "serviceVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1AuthServiceTokenResponse": { + "properties": { + "token": { + "type": "string" + } + }, + "type": "object" + }, + "v1AuthShellyLoginRequest": { + "properties": { + "secret": { + "type": "string" + } + }, + "type": "object" + }, + "v1AuthToken": { + "properties": { + "token": { + "type": "string" + } + }, + "type": "object" + }, + "v1AuthTokenRevoke": { + "properties": { + "tokens": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1AuthTokenSettings": { + "description": "System auth token settings", + "properties": { + "expiryTimeMinutes": { + "description": "Auth token expiry time in minutes", + "format": "int32", + "maximum": 1440, + "minimum": 15, + "type": "integer", + "x-omitempty": false + } + } + }, + "v1AwsAMI": { + "properties": { + "id": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1AwsAccount": { + "description": "Aws cloud account information", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1AwsCloudAccount" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1AwsAccounts": { + "description": "List of AWS accounts", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1AwsAccount" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1AwsAmiReference": { + "description": "AMI is the reference to the AMI from which to create the machine instance", + "properties": { + "eksOptimizedLookupType": { + "description": "EKSOptimizedLookupType If specified, will look up an EKS Optimized image in SSM Parameter store", + "enum": [ + "AmazonLinux", + "AmazonLinuxGPU" + ], + "type": "string" + }, + "id": { + "description": "ID of resource", + "type": "string" + } + }, + "type": "object" + }, + "v1AwsAvailabilityZone": { + "description": "Distinct locations within an AWS Region that are engineered to be isolated from failures in other Zones", + "properties": { + "name": { + "description": "AWS availability zone name", + "type": "string" + }, + "state": { + "description": "AWS availability zone state", + "type": "string" + }, + "zoneId": { + "description": "AWS availability zone id", + "type": "string" + } + }, + "type": "object" + }, + "v1AwsAvailabilityZones": { + "properties": { + "zones": { + "description": "List of AWS Zones", + "items": { + "$ref": "#/definitions/v1AwsAvailabilityZone" + }, + "type": "array" + } + }, + "required": [ + "zones" + ], + "type": "object" + }, + "v1AwsCloudAccount": { + "description": "AWS cloud account which includes access key and secret key in case of 'secret' credentials type. It includes policyARNS, ARN and externalId in case of sts. Partition is a group of AWS Region and Service objects", + "properties": { + "accessKey": { + "description": "AWS account access key", + "type": "string" + }, + "credentialType": { + "$ref": "#/definitions/v1AwsCloudAccountCredentialType" + }, + "partition": { + "default": "aws", + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "enum": [ + "aws", + "aws-us-gov" + ], + "type": "string" + }, + "policyARNs": { + "description": "List of policy ARNs required in case of credentialType sts.", + "items": { + "type": "string" + }, + "type": "array" + }, + "secretKey": { + "description": "AWS account secret key", + "type": "string" + }, + "sts": { + "$ref": "#/definitions/v1AwsStsCredentials", + "description": "AWS STS credentials in case of credentialType sts, will be empty in case of credential type secret" + } + }, + "type": "object" + }, + "v1AwsCloudAccountCredentialType": { + "default": "secret", + "description": "Allowed Values [secret, sts]. STS type will be used for role assumption for sts type, accessKey/secretKey contains the source account, Arn is the target account.", + "enum": [ + "secret", + "sts" + ], + "type": "string" + }, + "v1AwsCloudClusterConfigEntity": { + "description": "AWS cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1AwsClusterConfig" + } + }, + "type": "object" + }, + "v1AwsCloudConfig": { + "description": "AwsCloudConfig is the Schema for the awscloudconfigs API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1AwsCloudConfigSpec" + }, + "status": { + "$ref": "#/definitions/v1AwsCloudConfigStatus" + } + }, + "type": "object" + }, + "v1AwsCloudConfigSpec": { + "description": "AwsCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cloudAccountRef should point to the secret which contains AwsCloudAccount" + }, + "clusterConfig": { + "$ref": "#/definitions/v1AwsClusterConfig" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1AwsMachinePoolConfig" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AwsCloudConfigStatus": { + "description": "AwsCloudConfigStatus defines the observed state of AwsCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "images": { + "description": "Images array items should be 1-to-1 mapping to Spec.MachinePoolConfig", + "items": { + "$ref": "#/definitions/v1AwsAMI" + }, + "type": "array" + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "roleDigest": { + "additionalProperties": { + "type": "string" + }, + "description": "this map will be for ansible roles present in eack pack", + "type": "object" + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + }, + "type": "object" + }, + "v1AwsCloudCostSpec": { + "description": "Aws cloud account usage cost payload spec", + "properties": { + "accountId": { + "description": "AccountId of AWS cloud cost", + "type": "string" + }, + "credentials": { + "$ref": "#/definitions/v1AwsCloudAccount" + }, + "filter": { + "$ref": "#/definitions/v1AwsCloudCostSpecFilter" + } + }, + "required": [ + "credentials" + ], + "type": "object" + }, + "v1AwsCloudCostSpecFilter": { + "description": "Aws cloud account usage cost payload filter. startTime and endTime should be within 12 months range from now.", + "properties": { + "endTime": { + "$ref": "#/definitions/v1Time" + }, + "iamUserId": { + "description": "IAM UserId of AWS account", + "type": "string" + }, + "startTime": { + "$ref": "#/definitions/v1Time" + } + }, + "required": [ + "startTime" + ], + "type": "object" + }, + "v1AwsCloudCostSummary": { + "description": "AWS cloud account usage cost summary response data", + "properties": { + "cost": { + "$ref": "#/definitions/v1AwsCloudCostSummaryCloudCost" + } + }, + "type": "object" + }, + "v1AwsCloudCostSummaryCloudCost": { + "description": "AWS cloud account usage cost summary of monthlyCosts and totalCost", + "properties": { + "monthlyCosts": { + "description": "Monthly cost of AWS cost", + "items": { + "$ref": "#/definitions/v1AwsCloudCostSummaryMonthlyCost" + }, + "type": "array" + }, + "total": { + "description": "Total cost of AWS cost", + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1AwsCloudCostSummaryMonthlyCost": { + "properties": { + "amount": { + "description": "Amount for aws cloud cost", + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "timestamp": { + "description": "Time duration for aws cloud cost", + "type": "integer" + } + }, + "type": "object" + }, + "v1AwsClusterConfig": { + "description": "Cluster level configuration for aws cloud and applicable for all the machine pools", + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default capa seems to favour session manager against bastion node https://github.com/kubernetes-sigs/cluster-api-provider-aws/issues/947", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + }, + "required": [ + "region" + ], + "type": "object" + }, + "v1AwsCreditAccount": { + "properties": { + "creditLimitInDollars": { + "format": "float64", + "type": "number" + }, + "loginCredentials": { + "$ref": "#/definitions/v1AwsLoginCredentials" + }, + "userCloudAccount": { + "$ref": "#/definitions/v1AwsUserCloudAccount" + } + }, + "type": "object" + }, + "v1AwsCreditAccountEntity": { + "properties": { + "creditLimitInDollars": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "creditUsedInDollars": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "loginCredentials": { + "$ref": "#/definitions/v1AwsLoginCredentials" + }, + "userCloudAccount": { + "$ref": "#/definitions/v1AwsUserCloudAccount" + } + }, + "type": "object" + }, + "v1AwsFindImageRequest": { + "description": "AWS image name and credentials", + "properties": { + "amiName": { + "description": "AWS image ami name", + "type": "string" + }, + "awsAccount": { + "$ref": "#/definitions/v1AwsCloudAccount" + } + }, + "type": "object" + }, + "v1AwsIamPolicy": { + "description": "Aws policy", + "properties": { + "arn": { + "type": "string" + }, + "policyId": { + "type": "string" + }, + "policyName": { + "type": "string" + } + }, + "type": "object" + }, + "v1AwsImage": { + "description": "AWS image name and ami", + "properties": { + "id": { + "description": "AWS image id", + "type": "string" + }, + "name": { + "description": "AWS image name", + "type": "string" + }, + "owner": { + "description": "AWS image owner id", + "type": "string" + } + }, + "type": "object" + }, + "v1AwsInstanceTypes": { + "description": "List of AWS instance types", + "properties": { + "instanceTypes": { + "items": { + "$ref": "#/definitions/v1InstanceType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AwsKeyPairs": { + "description": "List of AWS keypairs", + "properties": { + "keyNames": { + "description": "Array of Aws Keypair names", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AwsKmsKey": { + "description": "AWS KMS Key - gives you centralized control over the cryptographic keys used to protect your data.", + "properties": { + "keyAlias": { + "description": "AWS KMS alias", + "type": "string" + }, + "keyArn": { + "description": "AWS KMS arn", + "type": "string" + }, + "keyId": { + "description": "AWS KMS keyid", + "type": "string" + } + }, + "required": [ + "keyId", + "keyArn" + ], + "type": "object" + }, + "v1AwsKmsKeyEntity": { + "description": "List of AWS Keys", + "properties": { + "awsAccountId": { + "description": "The twelve-digit account ID of the Amazon Web Services account that owns the KMS key", + "type": "string" + }, + "enabled": { + "description": "Specifies whether the KMS key is enabled.", + "type": "boolean" + }, + "keyId": { + "description": "The globally unique identifier for the KMS key", + "type": "string" + } + }, + "type": "object" + }, + "v1AwsKmsKeys": { + "description": "List of AWS Keys", + "properties": { + "kmsKeys": { + "items": { + "$ref": "#/definitions/v1AwsKmsKey" + }, + "type": "array" + } + }, + "required": [ + "kmsKeys" + ], + "type": "object" + }, + "v1AwsLaunchTemplate": { + "description": "AWSLaunchTemplate specifies the launch template to use to create the managed node group", + "properties": { + "additionalSecurityGroups": { + "description": "AdditionalSecurityGroups is an array of references to security groups that should be applied to the instances", + "items": { + "$ref": "#/definitions/v1AwsResourceReference" + }, + "type": "array", + "uniqueItems": true + }, + "ami": { + "$ref": "#/definitions/v1AwsAmiReference" + }, + "imageLookupBaseOS": { + "description": "ImageLookupBaseOS is the name of the base operating system to use for image lookup the AMI is not set", + "type": "string" + }, + "imageLookupFormat": { + "description": "ImageLookupFormat is the AMI naming format to look up the image", + "type": "string" + }, + "imageLookupOrg": { + "description": "ImageLookupOrg is the AWS Organization ID to use for image lookup if AMI is not set", + "type": "string" + }, + "rootVolume": { + "$ref": "#/definitions/v1AwsRootVolume" + } + }, + "type": "object" + }, + "v1AwsLoginCredentials": { + "properties": { + "iamUser": { + "type": "string" + }, + "password": { + "format": "password", + "type": "string" + } + }, + "type": "object" + }, + "v1AwsMachine": { + "description": "AWS cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1AwsMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + }, + "type": "object" + }, + "v1AwsMachinePoolCloudConfigEntity": { + "properties": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "items": { + "$ref": "#/definitions/v1AwsResourceReference" + }, + "type": "array" + }, + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "capacityType": { + "default": "on-demand", + "description": "EC2 instance capacity type", + "enum": [ + "on-demand", + "spot" + ], + "type": "string" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "format": "int64", + "maximum": 2000, + "minimum": 1, + "type": "integer" + }, + "spotMarketOptions": { + "$ref": "#/definitions/v1SpotMarketOptions", + "description": "SpotMarketOptions allows users to configure instances to be run using AWS Spot instances." + }, + "subnets": { + "items": { + "$ref": "#/definitions/v1AwsSubnetEntity" + }, + "type": "array" + } + }, + "required": [ + "instanceType" + ], + "type": "object" + }, + "v1AwsMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "additionalSecurityGroups": { + "description": "Additional Security groups", + "items": { + "$ref": "#/definitions/v1AwsResourceReference" + }, + "type": "array" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "items": { + "type": "string" + }, + "type": "array" + }, + "capacityType": { + "default": "on-demand", + "description": "EC2 instance capacity type", + "enum": [ + "on-demand", + "spot" + ], + "type": "string" + }, + "instanceConfig": { + "$ref": "#/definitions/v1InstanceConfig" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "format": "int64", + "type": "integer" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "spotMarketOptions": { + "$ref": "#/definitions/v1SpotMarketOptions", + "description": "SpotMarketOptions allows users to configure instances to be run using AWS Spot instances." + }, + "subnetIds": { + "additionalProperties": { + "type": "string" + }, + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + }, + "required": [ + "isControlPlane" + ], + "type": "object" + }, + "v1AwsMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1AwsMachinePoolCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + }, + "v1AwsMachineSpec": { + "description": "AWS cloud VM definition spec", + "properties": { + "additionalSecurityGroups": { + "description": "Additional Security groups", + "items": { + "$ref": "#/definitions/v1AwsResourceReference" + }, + "type": "array" + }, + "ami": { + "type": "string" + }, + "az": { + "type": "string" + }, + "dnsName": { + "type": "string" + }, + "iamProfile": { + "type": "string" + }, + "instanceType": { + "type": "string" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1AwsNic" + }, + "type": "array" + }, + "phase": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + } + }, + "required": [ + "instanceType", + "vpcId", + "ami" + ], + "type": "object" + }, + "v1AwsMachines": { + "description": "AWS machine list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1AwsMachine" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1AwsNic": { + "description": "AWS network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "publicIp": { + "type": "string" + } + }, + "type": "object" + }, + "v1AwsPartition": { + "default": "aws", + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "enum": [ + "aws", + "aws-us-gov" + ], + "type": "string" + }, + "v1AwsPolicies": { + "properties": { + "policies": { + "items": { + "$ref": "#/definitions/v1AwsIamPolicy" + }, + "type": "array" + } + }, + "required": [ + "policies" + ], + "type": "object" + }, + "v1AwsPolicyArnsSpec": { + "description": "Aws policy ARNs spec", + "properties": { + "account": { + "$ref": "#/definitions/v1AwsCloudAccount" + }, + "policyArns": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "policyArns", + "account" + ], + "type": "object" + }, + "v1AwsRegion": { + "description": "AWS region which represents separate geographic area.", + "properties": { + "endpoint": { + "description": "AWS offer a regional endpoint that can used to make requests", + "type": "string" + }, + "name": { + "description": "Name of the AWS region", + "type": "string" + }, + "optInStatus": { + "description": "Enable your account to operate in the particular regions", + "type": "string" + } + }, + "type": "object" + }, + "v1AwsRegions": { + "properties": { + "regions": { + "description": "List of AWS regions", + "items": { + "$ref": "#/definitions/v1AwsRegion" + }, + "type": "array" + } + }, + "required": [ + "regions" + ], + "type": "object" + }, + "v1AwsResourceFilter": { + "description": "Filter is a filter used to identify an AWS resource", + "properties": { + "name": { + "description": "Name of the filter. Filter names are case-sensitive", + "type": "string" + }, + "values": { + "description": "Values includes one or more filter values. Filter values are case-sensitive", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1AwsResourceReference": { + "description": "AWSResourceReference is a reference to a specific AWS resource by ID or filters", + "properties": { + "arn": { + "description": "ARN of resource", + "type": "string" + }, + "filters": { + "description": "Filters is a set of key/value pairs used to identify a resource", + "items": { + "$ref": "#/definitions/v1AwsResourceFilter" + }, + "type": "array", + "uniqueItems": true + }, + "id": { + "description": "ID of resource", + "type": "string" + } + }, + "type": "object" + }, + "v1AwsRootVolume": { + "description": "Volume encapsulates the configuration options for the storage device.", + "properties": { + "deviceName": { + "description": "Device name", + "type": "string" + }, + "encrypted": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "boolean" + }, + "encryptionKey": { + "description": "EncryptionKey is the KMS key to use to encrypt the volume. Can be either a KMS key ID or ARN", + "type": "string" + }, + "iops": { + "description": "IOPS is the number of IOPS requested for the disk. Not applicable to all types", + "format": "int64", + "type": "integer" + }, + "throughput": { + "description": "Throughput to provision in MiB/s supported for the volume type. Not applicable to all types.", + "format": "int64", + "type": "integer" + }, + "type": { + "description": "Type is the type of the volume (e.g. gp2, io1, etc...)", + "type": "string" + } + }, + "type": "object" + }, + "v1AwsS3BucketCredentials": { + "description": "AWS S3 Bucket credentials", + "properties": { + "bucket": { + "description": "Name of AWS S3 bucket", + "type": "string" + }, + "credentials": { + "$ref": "#/definitions/v1AwsCloudAccount" + }, + "folder": { + "description": "Name of the folder in the specified AWS S3 bucket.", + "type": "string" + }, + "region": { + "description": "Name of the available AWS region.", + "type": "string" + } + }, + "required": [ + "credentials", + "bucket", + "region" + ], + "type": "object" + }, + "v1AwsSecurityGroups": { + "properties": { + "groups": { + "items": { + "$ref": "#/definitions/v1AwsSecuritygroup" + }, + "type": "array" + } + }, + "required": [ + "groups" + ], + "type": "object" + }, + "v1AwsSecuritygroup": { + "description": "Aws security group", + "properties": { + "groupId": { + "type": "string" + }, + "groupName": { + "type": "string" + }, + "ownerId": { + "type": "string" + } + }, + "type": "object" + }, + "v1AwsStorageTypes": { + "properties": { + "storageTypes": { + "description": "List of AWS storage types", + "items": { + "$ref": "#/definitions/v1StorageType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AwsStsCredentials": { + "description": "Aws sts credentials", + "properties": { + "arn": { + "description": "Arn for the aws sts credentials in cloud account", + "type": "string" + }, + "externalId": { + "description": "ExternalId for the aws sts credentials in cloud account", + "type": "string" + } + }, + "type": "object" + }, + "v1AwsSubnet": { + "description": "A subnet is a range of IP addresses in a AWS VPC", + "properties": { + "az": { + "description": "Every subnet can only be associated with only one Availability Zone", + "type": "string" + }, + "isPrivate": { + "description": "Is this subnet private", + "type": "boolean" + }, + "mapPublicIpOnLaunch": { + "description": "Indicates whether instances launched in this subnet receive a public IPv4 address.", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Name of the subnet", + "type": "string" + }, + "subnetId": { + "description": "Id of the subnet", + "type": "string" + } + } + }, + "v1AwsSubnetEntity": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + }, + "v1AwsUserCloudAccount": { + "properties": { + "accountId": { + "type": "string" + }, + "cloudAccount": { + "$ref": "#/definitions/v1AwsCloudAccount" + } + } + }, + "v1AwsVolumeSize": { + "description": "AWS Volume Size entity", + "properties": { + "sizeGB": { + "description": "AWS volume size", + "type": "integer" + } + }, + "type": "object" + }, + "v1AwsVolumeType": { + "description": "AWS Volume Type entity", + "properties": { + "id": { + "description": "AWS volume type id", + "type": "string" + }, + "maxIops": { + "description": "Iops through put of volume type", + "type": "string" + }, + "maxThroughPut": { + "description": "Max through put of volume type", + "type": "string" + }, + "name": { + "description": "AWS Volume Type Name", + "type": "string" + } + }, + "type": "object" + }, + "v1AwsVpc": { + "description": "A virtual network dedicated to a AWS account", + "properties": { + "cidrBlock": { + "type": "string" + }, + "name": { + "description": "Name of the virtual network", + "type": "string" + }, + "subnets": { + "description": "List of subnets associated to a AWS VPC", + "items": { + "$ref": "#/definitions/v1AwsSubnet" + }, + "type": "array" + }, + "vpcId": { + "description": "Id of the virtual network", + "type": "string" + } + }, + "required": [ + "vpcId" + ], + "type": "object" + }, + "v1AwsVpcs": { + "description": "List of AWS VPCs", + "properties": { + "vpcs": { + "items": { + "$ref": "#/definitions/v1AwsVpc" + }, + "type": "array" + } + }, + "required": [ + "vpcs" + ], + "type": "object" + }, + "v1AzValidateEntity": { + "description": "Az validate entity", + "properties": { + "azs": { + "description": "Gcp Azs", + "items": { + "type": "string" + }, + "type": "array" + }, + "project": { + "description": "Gcp project", + "type": "string" + }, + "region": { + "description": "Gcp region", + "type": "string" + }, + "uid": { + "description": "Cloud account uid", + "type": "string" + } + }, + "type": "object" + }, + "v1AzureAccount": { + "description": "Azure account information", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1AzureCloudAccount" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1AzureAccounts": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1AzureAccount" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1AzureAvailabilityZone": { + "description": "Azure availability zone", + "properties": { + "name": { + "description": "Azure availability zone name", + "type": "string" + } + }, + "type": "object" + }, + "v1AzureCloudAccount": { + "properties": { + "azureEnvironment": { + "default": "AzurePublicCloud", + "description": "Contains configuration for Azure cloud", + "enum": [ + "AzureChinaCloud", + "AzurePublicCloud", + "AzureUSGovernment", + "AzureUSGovernmentCloud" + ], + "type": "string" + }, + "clientId": { + "description": "Client ID(Directory ID) is a unique identifier generated by Azure AD that is tied to an application", + "type": "string" + }, + "clientSecret": { + "description": "ClientSecret is the secret associated with Client", + "type": "string" + }, + "settings": { + "$ref": "#/definitions/v1CloudAccountSettings", + "description": "Palette internal cloud settings" + }, + "tenantId": { + "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "type": "string" + }, + "tenantName": { + "description": "Tenant ID is the ID for the Azure AD tenant that the user belongs to.", + "type": "string" + } + }, + "required": [ + "tenantId", + "clientId", + "clientSecret" + ], + "type": "object" + }, + "v1AzureCloudClusterConfigEntity": { + "description": "Azure cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1AzureClusterConfig" + } + }, + "type": "object" + }, + "v1AzureCloudConfig": { + "description": "AzureCloudConfig is the Schema for the azurecloudconfigs API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1AzureCloudConfigSpec" + }, + "status": { + "$ref": "#/definitions/v1AzureCloudConfigStatus" + } + }, + "type": "object" + }, + "v1AzureCloudConfigSpec": { + "description": "AzureCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cloudAccountRef should point to the secret which contains AzureCloudAccount" + }, + "clusterConfig": { + "$ref": "#/definitions/v1AzureClusterConfig" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1AzureMachinePoolConfig" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureCloudConfigStatus": { + "description": "AzureCloudConfigStatus defines the observed state of AzureCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "description": "spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`", + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "images": { + "$ref": "#/definitions/v1AzureImage", + "description": "Images array items should be 1-to-1 mapping to Spec.MachinePoolConfig" + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "roleDigest": { + "additionalProperties": { + "type": "string" + }, + "description": "this map will be for ansible roles present in eack pack", + "type": "object" + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + }, + "vhdImage": { + "$ref": "#/definitions/v1AzureVHDImage" + } + }, + "type": "object" + }, + "v1AzureClusterConfig": { + "description": "Cluster level configuration for Azure cloud and applicable for all the machine pools", + "properties": { + "aadProfile": { + "$ref": "#/definitions/v1AADProfile", + "description": "AadProfile is Azure Active Directory configuration to integrate with AKS for aad authentication." + }, + "apiServerAccessProfile": { + "$ref": "#/definitions/v1APIServerAccessProfile", + "description": "APIServerAccessProfile is the access profile for AKS API server." + }, + "containerName": { + "type": "string" + }, + "controlPlaneSubnet": { + "$ref": "#/definitions/v1Subnet", + "description": "Subnet for Kubernetes control-plane node" + }, + "enablePrivateCluster": { + "description": "Deprecated. use apiServerAccessProfile.enablePrivateCluster", + "type": "boolean" + }, + "infraLBConfig": { + "$ref": "#/definitions/v1InfraLBConfig", + "description": "APIServerLB is the configuration for the control-plane load balancer." + }, + "location": { + "description": "Location is the Azure datacenter location", + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sshKey": { + "type": "string" + }, + "storageAccountName": { + "type": "string" + }, + "subscriptionId": { + "description": "Subscription ID is unique identifier for the subscription used to access Azure services", + "type": "string" + }, + "vnetCidrBlock": { + "type": "string" + }, + "vnetName": { + "description": "VNETName is the virtual network in which the cluster is to be provisioned.", + "type": "string" + }, + "vnetResourceGroup": { + "type": "string" + }, + "workerSubnet": { + "$ref": "#/definitions/v1Subnet", + "description": "Subnet for Kubernetes worker node" + } + }, + "required": [ + "subscriptionId", + "location", + "sshKey" + ], + "type": "object" + }, + "v1AzureGroup": { + "description": "Azure group entity", + "properties": { + "id": { + "description": "Azure group id", + "type": "string" + }, + "name": { + "description": "Azure group name", + "type": "string" + } + }, + "type": "object" + }, + "v1AzureGroups": { + "description": "List of Azure groups", + "properties": { + "groups": { + "items": { + "$ref": "#/definitions/v1AzureGroup" + }, + "type": "array" + } + }, + "required": [ + "groups" + ], + "type": "object" + }, + "v1AzureImage": { + "description": "Refers to Azure Shared Gallery image", + "properties": { + "gallery": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "state": { + "type": "string" + }, + "subscriptionID": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1AzureInstanceTypes": { + "description": "List of Azure instance types", + "properties": { + "instanceTypes": { + "items": { + "$ref": "#/definitions/v1InstanceType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureMachine": { + "description": "Azure cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1AzureMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + }, + "type": "object" + }, + "v1AzureMachinePoolCloudConfigEntity": { + "properties": { + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean" + }, + "osDisk": { + "$ref": "#/definitions/v1AzureOSDisk" + } + }, + "type": "object" + }, + "v1AzureMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "instanceConfig": { + "$ref": "#/definitions/v1InstanceConfig" + }, + "instanceType": { + "description": "Instance type stands for VMSize in Azure", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "osDisk": { + "$ref": "#/definitions/v1AzureOSDisk" + }, + "osType": { + "$ref": "#/definitions/v1OsType", + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "spotVMOptions": { + "$ref": "#/definitions/v1SpotVMOptions", + "description": "SpotVMOptions allows the ability to specify the Machine should use a Spot VM" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + }, + "required": [ + "isControlPlane" + ], + "type": "object" + }, + "v1AzureMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1AzureMachinePoolCloudConfigEntity" + }, + "managedPoolConfig": { + "$ref": "#/definitions/v1AzureManagedMachinePoolConfig" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + }, + "v1AzureMachineSpec": { + "description": "Azure cloud VM definition spec", + "properties": { + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "allocatePublicIP": { + "type": "boolean" + }, + "availabilityZone": { + "$ref": "#/definitions/v1AzureMachineSpecAvailabilityZone" + }, + "image": { + "$ref": "#/definitions/v1AzureMachineSpecImage" + }, + "instanceType": { + "type": "string" + }, + "location": { + "type": "string" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1AzureNic" + }, + "type": "array" + }, + "osDisk": { + "$ref": "#/definitions/v1AzureOSDisk" + }, + "sshPublicKey": { + "type": "string" + } + }, + "required": [ + "instanceType", + "location", + "osDisk" + ], + "type": "object" + }, + "v1AzureMachineSpecAvailabilityZone": { + "description": "Azure Machine Spec Availability zone", + "properties": { + "enabled": { + "type": "boolean" + }, + "id": { + "type": "string" + } + }, + "type": "object" + }, + "v1AzureMachineSpecImage": { + "description": "Azure Machine Spec Image", + "properties": { + "gallery": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "offer": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "resourceGroup": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1AzureMachines": { + "description": "Azure machine list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1AzureMachine" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1AzureManagedMachinePoolConfig": { + "properties": { + "isSystemNodePool": { + "description": "whether this pool is for system node Pool", + "type": "boolean", + "x-omitempty": false + }, + "osType": { + "$ref": "#/definitions/v1OsType", + "type": "string" + } + }, + "type": "object" + }, + "v1AzureNic": { + "description": "AWS network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "publicIp": { + "type": "string" + } + }, + "type": "object" + }, + "v1AzureOSDisk": { + "properties": { + "diskSizeGB": { + "format": "int32", + "type": "integer" + }, + "managedDisk": { + "$ref": "#/definitions/v1ManagedDisk" + }, + "osType": { + "$ref": "#/definitions/v1OsType", + "type": "string" + } + }, + "type": "object" + }, + "v1AzurePrivateDnsZone": { + "description": "Azure Private DNS zone entity", + "properties": { + "id": { + "description": "Fully qualified resource Id for the resource", + "type": "string" + }, + "location": { + "description": "The Azure Region where the resource lives", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + } + }, + "type": "object" + }, + "v1AzurePrivateDnsZones": { + "description": "List of Azure storage accounts", + "properties": { + "privateDnsZones": { + "items": { + "$ref": "#/definitions/v1AzurePrivateDnsZone" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureRegion": { + "description": "Azure region entity", + "properties": { + "displayName": { + "description": "Azure region displayname", + "type": "string" + }, + "name": { + "description": "Azure region name", + "type": "string" + }, + "zones": { + "description": "List of zones associated to a particular Azure region", + "items": { + "$ref": "#/definitions/v1AzureAvailabilityZone" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureRegions": { + "description": "List of Azure regions", + "properties": { + "regions": { + "items": { + "$ref": "#/definitions/v1AzureRegion" + }, + "type": "array" + } + }, + "required": [ + "regions" + ], + "type": "object" + }, + "v1AzureResourceGroupList": { + "description": "List of Azure resource group", + "properties": { + "resourceGroupList": { + "items": { + "$ref": "#/definitions/v1ResourceGroup" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureStorageAccountEntity": { + "description": "Azure Storage Account Entity", + "properties": { + "storageAccountTypes": { + "items": { + "$ref": "#/definitions/v1StorageAccountEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureStorageAccounts": { + "description": "List of Azure storage accounts", + "properties": { + "accounts": { + "items": { + "$ref": "#/definitions/v1StorageAccount" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureStorageConfig": { + "description": "Azure storage config object", + "properties": { + "containerName": { + "description": "Azure container name", + "type": "string" + }, + "credentials": { + "$ref": "#/definitions/v1.AzureAccountEntitySpec", + "description": "Azure cloud account credentials" + }, + "resourceGroup": { + "description": "Azure resource group name, to which the storage account is mapped", + "type": "string" + }, + "sku": { + "description": "Azure sku", + "type": "string" + }, + "storageName": { + "description": "Azure storage name", + "type": "string" + } + }, + "required": [ + "resourceGroup", + "containerName", + "storageName", + "credentials" + ], + "type": "object" + }, + "v1AzureStorageContainers": { + "description": "List of Azure storage containers", + "properties": { + "containers": { + "items": { + "$ref": "#/definitions/v1StorageContainer" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureStorageTypes": { + "description": "List of Azure storage types", + "properties": { + "storageTypes": { + "items": { + "$ref": "#/definitions/v1StorageType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureSubscriptionList": { + "description": "List of Azure subscription", + "properties": { + "subscriptionList": { + "items": { + "$ref": "#/definitions/v1Subscription" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureVHDImage": { + "description": "Mold always create VHD image for custom image, and this can be use as golden images", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1AzureVhdUrlEntity": { + "description": "Azure vhd url entity", + "properties": { + "name": { + "description": "The name of the resource", + "type": "string" + }, + "url": { + "description": "The url of the Azure Vhd", + "type": "string" + } + }, + "type": "object" + }, + "v1AzureVirtualNetworkList": { + "description": "List of Azure virtual network", + "properties": { + "virtualNetworkList": { + "items": { + "$ref": "#/definitions/v1VirtualNetwork" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1AzureZoneEntity": { + "description": "List of Azure zone", + "properties": { + "zoneList": { + "items": { + "$ref": "#/definitions/v1ZoneEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1BackupLocationConfig": { + "description": "Backup location configuration", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1BackupRestoreStatusMeta": { + "description": "Backup restored status", + "properties": { + "backupName": { + "type": "string" + }, + "destinationClusterRef": { + "$ref": "#/definitions/v1ResourceReference" + }, + "restoreState": { + "type": "string" + } + } + }, + "v1BackupState": { + "description": "Backup state", + "properties": { + "backupTime": { + "$ref": "#/definitions/v1Time" + }, + "deleteState": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1BackupStatusConfig": { + "description": "Backup config", + "properties": { + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1BackupStatusMeta": { + "description": "Backup status meta", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "$ref": "#/definitions/v1BackupState" + }, + "backupedNamespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "expiryDate": { + "$ref": "#/definitions/v1Time" + } + } + }, + "v1BasicOciRegistry": { + "description": "Basic oci registry information", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1BasicOciRegistrySpec" + } + }, + "type": "object" + }, + "v1BasicOciRegistrySpec": { + "description": "Basic oci registry spec", + "properties": { + "auth": { + "$ref": "#/definitions/v1RegistryAuth" + }, + "baseContentPath": { + "description": "OCI registry content base path", + "type": "string" + }, + "basePath": { + "description": "OCI registry api base path", + "type": "string" + }, + "endpoint": { + "description": "OCI registry endpoint", + "type": "string" + }, + "providerType": { + "default": "helm", + "enum": [ + "helm", + "zarf", + "pack" + ], + "type": "string" + }, + "registryUid": { + "description": "Basic oci registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + }, + "required": [ + "endpoint", + "auth" + ], + "type": "object" + }, + "v1Billing": { + "description": "billing preference", + "properties": { + "billingDay": { + "type": "integer" + }, + "tierPricing": { + "$ref": "#/definitions/v1TierPrice" + } + } + }, + "v1BrokerLogin": { + "description": "Request for broker login request", + "properties": { + "subscriberSubjects": { + "description": "subjects that client need to subscribe", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1BrokerToken": { + "description": "Response for broker login request", + "properties": { + "maxAllowedClients": { + "description": "maximum number of clients that can subscribe to the subject", + "type": "integer" + }, + "msgCtxData": { + "additionalProperties": { + "type": "string" + }, + "description": "message context data can be used as contextual information for the message exchange" + }, + "publisherSubjects": { + "description": "subjects that client can publish", + "items": { + "type": "string" + }, + "type": "array" + }, + "subscriberSubjects": { + "description": "subjects that client has subscribed", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1BulkDeleteFailure": { + "properties": { + "errMsg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1BulkDeleteRequest": { + "properties": { + "uids": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "uids" + ] + }, + "v1BulkDeleteResponse": { + "properties": { + "deletedCount": { + "type": "integer", + "x-omitempty": false + }, + "failures": { + "items": { + "$ref": "#/definitions/v1BulkDeleteFailure" + }, + "type": "array", + "uniqueItems": true, + "x-omitempty": false + }, + "isSucceeded": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string", + "x-omitempty": false + } + } + }, + "v1BulkEvents": { + "description": "Describes a list component events' details", + "items": { + "$ref": "#/definitions/v1Event" + }, + "type": "array", + "uniqueItems": true + }, + "v1CPU": { + "properties": { + "cores": { + "description": "number of cpu cores", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1CPUPassthroughSpec": { + "properties": { + "cachePassthrough": { + "type": "boolean" + }, + "isEnabled": { + "description": "Enables the CPU Passthrough for the libvirt domain", + "type": "boolean" + } + }, + "type": "object" + }, + "v1Card": { + "description": "Card details object", + "properties": { + "brand": { + "description": "Card brand", + "type": "string" + }, + "country": { + "description": "Country name the card belongs", + "type": "string" + }, + "expYear": { + "description": "Expiry year of the card", + "format": "uint64", + "type": "number" + }, + "fingerPrint": { + "description": "Finger print", + "type": "string" + }, + "funding": { + "description": "Funding", + "type": "string" + }, + "last4": { + "description": "Last 4 digit of the card", + "type": "string" + } + } + }, + "v1Cert": { + "properties": { + "certificate": { + "type": "string", + "x-omitempty": false + }, + "isCA": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1Certificate": { + "description": "Certificate details", + "properties": { + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "Certificate expiry time" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1CertificateAuthority": { + "description": "Certificate Authority", + "properties": { + "certificates": { + "items": { + "$ref": "#/definitions/v1Certificate" + }, + "type": "array" + }, + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "Certificate expiry time" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1Channel": { + "properties": { + "alertAllUsers": { + "type": "boolean", + "x-omitempty": false + }, + "createdBy": { + "type": "string" + }, + "http": { + "properties": { + "body": { + "type": "string" + }, + "headers": { + "additionalProperties": { + "type": "string" + } + }, + "method": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "type": "object" + }, + "identifiers": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "status": { + "$ref": "#/definitions/v1AlertNotificationStatus" + }, + "type": { + "enum": [ + "email", + "app", + "http" + ], + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1CleanUpResource": { + "description": "Resources of tenant", + "properties": { + "activeResources": { + "$ref": "#/definitions/v1ActiveTenantResources" + }, + "tenantStatus": { + "$ref": "#/definitions/v1TenantCleanUpStatus" + } + }, + "type": "object" + }, + "v1CloudAccountMeta": { + "description": "Cloud account meta information", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1CloudAccountMetadata": { + "description": "Cloud account metadata summary", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + } + } + }, + "v1CloudAccountSettings": { + "description": "Cloud account settings", + "properties": { + "disablePropertiesRequest": { + "description": "Will disable certain properties request to cloud and the input is collected directly from the user", + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1CloudAccountStatus": { + "description": "Status of the account", + "properties": { + "state": { + "description": "Cloud account status", + "type": "string" + } + }, + "type": "object" + }, + "v1CloudAccountSummary": { + "description": "Cloud account summary", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "specSummary": { + "description": "Cloud account spec summary", + "properties": { + "accountId": { + "type": "string" + } + }, + "type": "object" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1CloudAccountUidEntity": { + "description": "Cloud account uid entity", + "properties": { + "uid": { + "description": "Cloud account uid", + "type": "string" + } + }, + "type": "object" + }, + "v1CloudAccountsMetadata": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1CloudAccountMetadata" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1CloudAccountsPatch": { + "items": { + "$ref": "#/definitions/v1HttpPatch" + }, + "type": "array" + }, + "v1CloudAccountsSummary": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1CloudAccountSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1CloudCategory": { + "default": "cloud", + "description": "Cloud category description", + "enum": [ + "datacenter", + "cloud", + "edge" + ], + "type": "string" + }, + "v1CloudConfigMeta": { + "properties": { + "cloudType": { + "type": "string" + }, + "machinePools": { + "description": "Machine pool meta information", + "items": { + "$ref": "#/definitions/v1MachinePoolMeta" + }, + "type": "array" + }, + "uid": { + "description": "Cluster's cloud config uid", + "type": "string" + } + }, + "type": "object" + }, + "v1CloudCost": { + "description": "Cloud cost information", + "properties": { + "compute": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "storage": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "total": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1CloudCostDataPoint": { + "description": "Cloud cost data point information", + "properties": { + "compute": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "storage": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "timestamp": { + "format": "int64", + "type": "number" + }, + "total": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1CloudInstanceRateConfig": { + "description": "Cloud instance rate config", + "properties": { + "computeRateProportion": { + "format": "float", + "type": "number" + }, + "memoryRateProportion": { + "format": "float", + "type": "number" + } + } + }, + "v1CloudMachineStatus": { + "description": "cloud machine status", + "properties": { + "health": { + "$ref": "#/definitions/v1MachineHealth" + }, + "instanceState": { + "enum": [ + "Pending", + "Provisioning", + "Provisioned", + "Running", + "Deleting", + "Deleted", + "Failed", + "Unknown" + ], + "type": "string" + }, + "maintenanceStatus": { + "$ref": "#/definitions/v1MachineMaintenanceStatus" + } + }, + "type": "object" + }, + "v1CloudRate": { + "description": "Cloud estimated rate information", + "properties": { + "compute": { + "$ref": "#/definitions/v1ComputeRate" + }, + "storage": { + "items": { + "$ref": "#/definitions/v1StorageRate" + }, + "type": "array" + }, + "total": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1CloudResourceMetadata": { + "description": "Cloud resource metadata", + "properties": { + "instanceTypes": { + "additionalProperties": { + "$ref": "#/definitions/v1InstanceType" + }, + "type": "object" + }, + "storageTypes": { + "additionalProperties": { + "$ref": "#/definitions/v1StorageType" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1CloudSpotPrice": { + "description": "Spot price entity of a particular cloud type", + "properties": { + "spotPrice": { + "description": "Spot price of a resource for a particular cloud", + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1CloudWatch": { + "properties": { + "credentials": { + "$ref": "#/definitions/v1AwsCloudAccount" + }, + "group": { + "type": "string" + }, + "region": { + "type": "string" + }, + "stream": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterBackup": { + "description": "Cluster Backup", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterBackupSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterBackupStatus" + } + } + }, + "v1ClusterBackupConfig": { + "description": "Cluster backup config", + "properties": { + "backupLocationName": { + "type": "string" + }, + "backupLocationUid": { + "type": "string" + }, + "backupName": { + "type": "string" + }, + "backupPrefix": { + "type": "string" + }, + "durationInHours": { + "format": "int64", + "type": "number" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "locationType": { + "type": "string" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "schedule": { + "$ref": "#/definitions/v1ClusterFeatureSchedule" + } + } + }, + "v1ClusterBackupLocationType": { + "description": "Cluster backup location type", + "properties": { + "locationType": { + "type": "string" + } + }, + "required": [ + "locationType" + ] + }, + "v1ClusterBackupSpec": { + "description": "Cluster Backup Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "config": { + "$ref": "#/definitions/v1ClusterBackupConfig" + } + } + }, + "v1ClusterBackupStatus": { + "description": "Cluster Backup Status", + "properties": { + "clusterBackupStatuses": { + "items": { + "$ref": "#/definitions/v1ClusterBackupStatusMeta" + }, + "type": "array" + } + } + }, + "v1ClusterBackupStatusMeta": { + "description": "Cluster Backup Status Meta", + "properties": { + "actor": { + "$ref": "#/definitions/v1ClusterFeatureActor" + }, + "backupConfig": { + "$ref": "#/definitions/v1BackupStatusConfig" + }, + "backupLocationConfig": { + "$ref": "#/definitions/v1BackupLocationConfig" + }, + "backupRequestUid": { + "type": "string" + }, + "backupStatusMeta": { + "items": { + "$ref": "#/definitions/v1BackupStatusMeta" + }, + "type": "array" + }, + "restoreStatusMeta": { + "items": { + "$ref": "#/definitions/v1BackupRestoreStatusMeta" + }, + "type": "array" + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterComplianceOnDemandConfig": { + "description": "Cluster compliance scan on demand configuration", + "properties": { + "kubeBench": { + "$ref": "#/definitions/v1ClusterComplianceScanKubeBenchConfig" + }, + "kubeHunter": { + "$ref": "#/definitions/v1ClusterComplianceScanKubeHunterConfig" + }, + "sonobuoy": { + "$ref": "#/definitions/v1ClusterComplianceScanSonobuoyConfig" + }, + "syft": { + "$ref": "#/definitions/v1ClusterComplianceScanSyftConfig" + } + } + }, + "v1ClusterComplianceScan": { + "description": "Cluster Compliance Scan", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterComplianceScanSpec" + } + } + }, + "v1ClusterComplianceScanKubeBenchConfig": { + "description": "Cluster compliance scan config for kube bench driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "v1ClusterComplianceScanKubeBenchScheduleConfig": { + "description": "Cluster compliance scan schedule config for kube bench driver", + "properties": { + "schedule": { + "$ref": "#/definitions/v1ClusterFeatureSchedule" + } + } + }, + "v1ClusterComplianceScanKubeHunterConfig": { + "description": "Cluster compliance scan config for kube hunter driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "v1ClusterComplianceScanKubeHunterScheduleConfig": { + "description": "Cluster compliance scan schedule config for kube hunter driver", + "properties": { + "schedule": { + "$ref": "#/definitions/v1ClusterFeatureSchedule" + } + } + }, + "v1ClusterComplianceScanLogSpec": { + "description": "Cluster compliance scan logs spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverType": { + "type": "string" + } + } + }, + "v1ClusterComplianceScanLogs": { + "description": "Cluster compliance scan Logs", + "properties": { + "kubeBenchLogs": { + "items": { + "$ref": "#/definitions/v1ClusterScanLogKubeBench" + }, + "type": "array" + }, + "kubeHunterLogs": { + "items": { + "$ref": "#/definitions/v1ClusterScanLogKubeHunter" + }, + "type": "array" + }, + "sonobuoyLogs": { + "items": { + "$ref": "#/definitions/v1ClusterScanLogSonobuoy" + }, + "type": "array" + }, + "syftLogs": { + "items": { + "$ref": "#/definitions/v1ClusterScanLogSyft" + }, + "type": "array" + } + } + }, + "v1ClusterComplianceScanSonobuoyConfig": { + "description": "Cluster compliance scan config for sonobuoy driver", + "properties": { + "runScan": { + "type": "boolean" + } + } + }, + "v1ClusterComplianceScanSonobuoyScheduleConfig": { + "description": "Cluster compliance scan schedule config for sonobuoy driver", + "properties": { + "schedule": { + "$ref": "#/definitions/v1ClusterFeatureSchedule" + } + } + }, + "v1ClusterComplianceScanSpec": { + "description": "Cluster compliance scan Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "driverSpec": { + "additionalProperties": { + "$ref": "#/definitions/v1ComplianceScanDriverSpec" + }, + "type": "object" + } + } + }, + "v1ClusterComplianceScanSyftConfig": { + "description": "Cluster compliance scan config for syft driver", + "properties": { + "config": { + "$ref": "#/definitions/v1ClusterComplianceScanSyftDriverConfig" + }, + "runScan": { + "type": "boolean" + } + } + }, + "v1ClusterComplianceScanSyftDriverConfig": { + "description": "Cluster compliance scan specification", + "properties": { + "format": { + "enum": [ + "cyclonedx-json", + "github-json", + "spdx-json", + "syft-json" + ], + "type": "string" + }, + "labelSelector": { + "type": "string" + }, + "location": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "enum": [ + "cluster", + "namespace", + "label-selector", + "pod" + ], + "type": "string" + } + } + }, + "v1ClusterComplianceScheduleConfig": { + "description": "Cluster compliance scan schedule configuration", + "properties": { + "kubeBench": { + "$ref": "#/definitions/v1ClusterComplianceScanKubeBenchScheduleConfig" + }, + "kubeHunter": { + "$ref": "#/definitions/v1ClusterComplianceScanKubeHunterScheduleConfig" + }, + "sonobuoy": { + "$ref": "#/definitions/v1ClusterComplianceScanSonobuoyScheduleConfig" + } + } + }, + "v1ClusterCondition": { + "properties": { + "lastProbeTime": { + "$ref": "#/definitions/v1Time" + }, + "lastTransitionTime": { + "$ref": "#/definitions/v1Time" + }, + "message": { + "description": "Human-readable message indicating details about last transition.", + "type": "string" + }, + "reason": { + "description": "Unique, one-word, CamelCase reason for the condition's last transition.", + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "type", + "status" + ], + "type": "object" + }, + "v1ClusterConfig": { + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute contains additional cluster metadata information.", + "type": "string" + }, + "clusterRbac": { + "description": "Deprecated. Use clusterResources", + "items": { + "$ref": "#/definitions/v1ResourceReference" + }, + "type": "array" + }, + "clusterResources": { + "$ref": "#/definitions/v1ClusterResources", + "description": "ClusterResources defines the managment of namespace resource allocations, role bindings." + }, + "controlPlaneHealthCheckTimeout": { + "description": "ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes. If the node is not ready within the time out set, the node will be deleted and a new node will be launched.", + "type": "string" + }, + "hostClusterConfig": { + "$ref": "#/definitions/v1HostClusterConfig", + "description": "HostClusterConfiguration defines the configuration of host clusters, where virtual clusters be deployed" + }, + "lifecycleConfig": { + "$ref": "#/definitions/v1LifecycleConfig" + }, + "machineHealthConfig": { + "$ref": "#/definitions/v1MachineHealthCheckConfig", + "description": "MachineHealthCheckConfig defines the healthcheck timeouts for the node. The timeouts are configured by the user to overide the default healthchecks." + }, + "machineManagementConfig": { + "$ref": "#/definitions/v1MachineManagementConfig", + "description": "MachineManagementConfig defines the management configurations for the node. Patching OS security updates etc can be configured by user." + }, + "updateWorkerPoolsInParallel": { + "description": "UpdateWorkerPoolsInParallel is used to decide if the update of workerpools happen in parallel. When this flag is false, the workerpools are updated sequentially.", + "type": "boolean" + } + }, + "type": "object" + }, + "v1ClusterConfigEntity": { + "properties": { + "clusterMetaAttribute": { + "description": "ClusterMetaAttribute can be used to set additional cluster metadata information.", + "type": "string" + }, + "controlPlaneHealthCheckTimeout": { + "type": "string" + }, + "hostClusterConfig": { + "$ref": "#/definitions/v1HostClusterConfig" + }, + "lifecycleConfig": { + "$ref": "#/definitions/v1LifecycleConfig" + }, + "location": { + "$ref": "#/definitions/v1ClusterLocation" + }, + "machineManagementConfig": { + "$ref": "#/definitions/v1MachineManagementConfig" + }, + "resources": { + "$ref": "#/definitions/v1ClusterResourcesEntity" + }, + "updateWorkerPoolsInParallel": { + "type": "boolean" + } + }, + "type": "object" + }, + "v1ClusterConfigResponse": { + "properties": { + "hostClusterConfig": { + "$ref": "#/definitions/v1HostClusterConfigResponse", + "description": "HostClusterConfig defines the configuration entity of host clusters config entity" + } + }, + "type": "object" + }, + "v1ClusterDefinitionEntity": { + "description": "Cluster definition entity", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1ClusterDefinitionSpecEntity" + } + }, + "type": "object" + }, + "v1ClusterDefinitionProfileEntity": { + "description": "Cluster definition profile entity", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1PackValuesEntity" + }, + "type": "array", + "uniqueItems": true + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + }, + "required": [ + "uid" + ], + "type": "object" + }, + "v1ClusterDefinitionSpecEntity": { + "description": "Cluster definition spec entity", + "properties": { + "cloudType": { + "type": "string" + }, + "profiles": { + "description": "Cluster definition profiles", + "items": { + "$ref": "#/definitions/v1ClusterDefinitionProfileEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "profiles", + "cloudType" + ], + "type": "object" + }, + "v1ClusterEdgeInstallerConfig": { + "properties": { + "installerDownloadLinks": { + "additionalProperties": { + "type": "string" + } + } + } + }, + "v1ClusterFeatureActor": { + "description": "Compliance Scan actor", + "properties": { + "actorType": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ClusterFeatureSchedule": { + "description": "Cluster feature schedule", + "properties": { + "scheduledRunTime": { + "type": "string" + } + } + }, + "v1ClusterFips": { + "properties": { + "mode": { + "$ref": "#/definitions/v1ClusterFipsMode" + } + } + }, + "v1ClusterFipsMode": { + "default": "none", + "enum": [ + "full", + "none", + "partial", + "unknown" + ], + "type": "string" + }, + "v1ClusterGroup": { + "description": "Cluster group information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterGroupSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterGroupStatus" + } + } + }, + "v1ClusterGroupClusterRef": { + "description": "Cluster group cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + }, + "v1ClusterGroupClustersConfig": { + "description": "Clusters config of cluster group", + "properties": { + "endpointType": { + "description": "Host cluster endpoint type", + "enum": [ + "Ingress", + "LoadBalancer" + ], + "type": "string" + }, + "hostClustersConfig": { + "items": { + "$ref": "#/definitions/v1ClusterGroupHostClusterConfig" + }, + "type": "array", + "uniqueItems": true + }, + "kubernetesDistroType": { + "$ref": "#/definitions/v1ClusterKubernetesDistroType" + }, + "limitConfig": { + "$ref": "#/definitions/v1ClusterGroupLimitConfig" + }, + "values": { + "type": "string" + } + } + }, + "v1ClusterGroupEntity": { + "description": "Cluster group information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterGroupSpecEntity" + } + } + }, + "v1ClusterGroupHostClusterConfig": { + "properties": { + "clusterUid": { + "type": "string" + }, + "endpointConfig": { + "$ref": "#/definitions/v1HostClusterEndpointConfig", + "description": "host cluster endpoint configuration" + } + } + }, + "v1ClusterGroupHostClusterEntity": { + "description": "Clusters and clusters config of cluster group", + "properties": { + "clusterRefs": { + "items": { + "$ref": "#/definitions/v1ClusterGroupClusterRef" + }, + "type": "array", + "uniqueItems": true + }, + "clustersConfig": { + "$ref": "#/definitions/v1ClusterGroupClustersConfig" + } + } + }, + "v1ClusterGroupLimitConfig": { + "description": "Cluster group limit config", + "properties": { + "cpu": { + "description": "Deprecated. Use field cpuMilliCore", + "format": "int32", + "type": "integer" + }, + "cpuMilliCore": { + "description": "CPU in milli cores", + "format": "int32", + "type": "integer" + }, + "memory": { + "description": "Deprecated. Use field memoryMiB", + "format": "int32", + "type": "integer" + }, + "memoryMiB": { + "description": "Memory in MiB", + "format": "int32", + "type": "integer" + }, + "overSubscription": { + "description": "Over subscription percentage", + "format": "int32", + "type": "integer" + }, + "storageGiB": { + "description": "Storage in GiB", + "format": "int32", + "type": "integer" + } + } + }, + "v1ClusterGroupResource": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocated": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "used": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + } + }, + "v1ClusterGroupSpec": { + "description": "Cluster group specifications", + "properties": { + "clusterProfileTemplates": { + "description": "ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec. It consists of list of add on profiles at a cluster group level which will be enforced on all virtual cluster. ClusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", + "items": { + "$ref": "#/definitions/v1ClusterProfileTemplate" + }, + "type": "array" + }, + "clusterRefs": { + "items": { + "$ref": "#/definitions/v1ClusterGroupClusterRef" + }, + "type": "array", + "uniqueItems": true + }, + "clustersConfig": { + "$ref": "#/definitions/v1ClusterGroupClustersConfig" + }, + "type": { + "enum": [ + "hostCluster" + ], + "type": "string" + } + } + }, + "v1ClusterGroupSpecEntity": { + "description": "Cluster group specifications request entity", + "properties": { + "clusterRefs": { + "items": { + "$ref": "#/definitions/v1ClusterGroupClusterRef" + }, + "type": "array", + "uniqueItems": true + }, + "clustersConfig": { + "$ref": "#/definitions/v1ClusterGroupClustersConfig" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + }, + "type": { + "enum": [ + "hostCluster" + ], + "type": "string" + } + } + }, + "v1ClusterGroupStatus": { + "description": "Cluster group status", + "properties": { + "isActive": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1ClusterGroupSummary": { + "description": "Cluster group summay", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterGroupSummarySpec" + } + } + }, + "v1ClusterGroupSummarySpec": { + "description": "Cluster group summay spec", + "properties": { + "clusterProfileTemplates": { + "items": { + "$ref": "#/definitions/v1ClusterProfileTemplateMeta" + }, + "type": "array" + }, + "cpu": { + "$ref": "#/definitions/v1ClusterGroupResource", + "description": "Deprecated" + }, + "endpointType": { + "enum": [ + "Ingress", + "LoadBalancer" + ], + "type": "string" + }, + "hostClusters": { + "items": { + "$ref": "#/definitions/v1ObjectResReference" + }, + "type": "array", + "uniqueItems": true + }, + "hostClustersCount": { + "type": "integer", + "x-omitempty": false + }, + "memory": { + "$ref": "#/definitions/v1ClusterGroupResource", + "description": "Deprecated" + }, + "scope": { + "type": "string" + }, + "virtualClustersCount": { + "type": "integer", + "x-omitempty": false + } + } + }, + "v1ClusterGroupsDeveloperCreditUsage": { + "description": "Cluster group resource allocated and usage information", + "properties": { + "allocatedCredit": { + "$ref": "#/definitions/v1DeveloperCredit" + }, + "usedCredit": { + "$ref": "#/definitions/v1DeveloperCredit" + } + } + }, + "v1ClusterGroupsHostClusterMetadata": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1ObjectScopeEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ClusterGroupsHostClusterSummary": { + "properties": { + "summaries": { + "items": { + "$ref": "#/definitions/v1ClusterGroupSummary" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "summaries" + ], + "type": "object" + }, + "v1ClusterHelmChart": { + "description": "Cluster helm chart metadata", + "properties": { + "localName": { + "type": "string" + }, + "matchedRegistries": { + "items": { + "$ref": "#/definitions/v1ClusterHelmRegistry" + }, + "type": "array", + "uniqueItems": true + }, + "name": { + "type": "string" + }, + "values": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ClusterHelmCharts": { + "description": "Cluster helm charts metadata", + "properties": { + "charts": { + "items": { + "$ref": "#/definitions/v1ClusterHelmChart" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ClusterHelmRegistry": { + "description": "Cluster helm registry information", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1ClusterImport": { + "properties": { + "importLink": { + "description": "import link to download and install ally-lite, palette-lite", + "type": "string" + }, + "isBrownfield": { + "description": "Deprecated. Use the 'spec.clusterType'", + "type": "boolean", + "x-omitempty": false + }, + "state": { + "description": "cluster import status", + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterKubeBenchLogStatus": { + "description": "Cluster compliance scan KubeBench Log Status", + "properties": { + "actor": { + "$ref": "#/definitions/v1ClusterFeatureActor" + }, + "message": { + "type": "string" + }, + "reports": { + "additionalProperties": { + "$ref": "#/definitions/v1KubeBenchReport" + }, + "type": "object" + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "$ref": "#/definitions/v1ClusterScanTime" + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterKubeHunterLogStatus": { + "description": "Cluster compliance scan KubeHunter Log Status", + "properties": { + "actor": { + "$ref": "#/definitions/v1ClusterFeatureActor" + }, + "message": { + "type": "string" + }, + "reports": { + "additionalProperties": { + "$ref": "#/definitions/v1KubeHunterReport" + }, + "type": "object" + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "$ref": "#/definitions/v1ClusterScanTime" + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterKubernetesDistroType": { + "default": "k3s", + "enum": [ + "k3s", + "cncf_k8s" + ], + "type": "string" + }, + "v1ClusterLocation": { + "description": "Cluster location information", + "properties": { + "countryCode": { + "description": "country code for cluster location", + "type": "string" + }, + "countryName": { + "description": "country name for cluster location", + "type": "string" + }, + "geoLoc": { + "$ref": "#/definitions/v1GeolocationLatlong" + }, + "regionCode": { + "description": "region code for cluster location", + "type": "string" + }, + "regionName": { + "description": "region name for cluster location", + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterLogFetcher": { + "description": "Cluster Log Fetcher", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterLogFetcherSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterLogFetcherStatus" + } + } + }, + "v1ClusterLogFetcherK8sRequest": { + "description": "Cluster Log Fetcher K8s", + "properties": { + "labelSelector": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ClusterLogFetcherNodeRequest": { + "description": "Cluster Log Fetcher Node Request", + "properties": { + "logs": { + "description": "Array of logs", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ClusterLogFetcherRequest": { + "description": "Cluster Log Fetcher Request", + "properties": { + "duration": { + "default": 10, + "description": "Duration for which log is requested", + "format": "int64", + "type": "integer" + }, + "k8s": { + "$ref": "#/definitions/v1ClusterLogFetcherK8sRequest" + }, + "mode": { + "default": "cluster", + "description": "Accepted Values - [\"cluster\", \"app\"]. if \"app\" then logs will be fetched from the virtual cluster", + "enum": [ + "cluster", + "app" + ], + "type": "string" + }, + "noOfLines": { + "default": 1000, + "description": "No of lines of logs requested", + "format": "int64", + "type": "integer" + }, + "node": { + "$ref": "#/definitions/v1ClusterLogFetcherNodeRequest" + } + } + }, + "v1ClusterLogFetcherSpec": { + "description": "Cluster Log Fetcher Spec", + "properties": { + "clusterUid": { + "type": "string" + }, + "log": { + "type": "string" + } + } + }, + "v1ClusterLogFetcherStatus": { + "description": "Cluster Log Fetcher Status", + "properties": { + "state": { + "type": "string" + } + } + }, + "v1ClusterManifest": { + "description": "Cluster manifest information", + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1ClusterManifests": { + "description": "Cluster manifests information", + "properties": { + "manifests": { + "items": { + "$ref": "#/definitions/v1ClusterManifest" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ClusterMeta": { + "description": "Active cluster meta", + "properties": { + "cloudType": { + "type": "string" + }, + "clusterType": { + "type": "string" + }, + "creationTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "duration": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectName": { + "type": "string" + }, + "state": { + "$ref": "#/definitions/v1ClusterState" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterMetaAttributeEntity": { + "description": "Cluster additional metadata entity", + "properties": { + "clusterMetaAttribute": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterMetaSpecLocation": { + "description": "Cluster location information", + "properties": { + "coordinates": { + "items": { + "format": "float64", + "type": "number" + }, + "type": "array" + }, + "countryCode": { + "type": "string" + }, + "countryName": { + "type": "string" + }, + "regionCode": { + "type": "string" + }, + "regionName": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterMetaStatusCost": { + "description": "Cluster meta Cost information", + "properties": { + "total": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ClusterMetaStatusHealth": { + "description": "Cluster meta health information", + "properties": { + "isHeartBeatFailed": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterMetaStatusUpdates": { + "description": "Cluster meta updates information", + "properties": { + "isUpdatesPending": { + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ClusterNamespace": { + "description": "Cluster's namespace", + "properties": { + "namespace": { + "type": "string" + }, + "pvcCount": { + "format": "int32", + "type": "number" + } + } + }, + "v1ClusterNamespaceResource": { + "description": "Cluster Namespace resource defintion", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterNamespaceSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterNamespaceStatus" + } + }, + "type": "object" + }, + "v1ClusterNamespaceResourceAllocation": { + "description": "Cluster namespace resource allocation", + "properties": { + "cpuCores": { + "exclusiveMinimum": true, + "minimum": 0, + "type": "number" + }, + "memoryMiB": { + "exclusiveMinimum": true, + "minimum": 0, + "type": "number" + } + } + }, + "v1ClusterNamespaceResourceInputEntity": { + "description": "Cluster Namespace resource defintion", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaUpdateEntity" + }, + "spec": { + "$ref": "#/definitions/v1ClusterNamespaceSpec" + } + }, + "type": "object" + }, + "v1ClusterNamespaceResources": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1ClusterNamespaceResource" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ClusterNamespaceResourcesUpdateEntity": { + "properties": { + "namespaces": { + "items": { + "$ref": "#/definitions/v1ClusterNamespaceResourceInputEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1ClusterNamespaceSpec": { + "description": "Cluster namespace spec", + "properties": { + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "relatedObject": { + "$ref": "#/definitions/v1RelatedObject" + }, + "resourceAllocation": { + "$ref": "#/definitions/v1ClusterNamespaceResourceAllocation" + } + } + }, + "v1ClusterNamespaceStatus": { + "description": "Cluster namespace status", + "properties": { + "errors": { + "items": { + "$ref": "#/definitions/v1ClusterResourceError" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ClusterNamespaces": { + "description": "Cluster's available namespaces", + "properties": { + "namespaces": { + "items": { + "$ref": "#/definitions/v1ClusterNamespace" + }, + "type": "array" + } + } + }, + "v1ClusterNotificationStatus": { + "description": "Cluster notifications status", + "properties": { + "isAvailable": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1ClusterNotificationUpdateEntity": { + "description": "Cluster input for notification update", + "properties": { + "profiles": { + "items": { + "$ref": "#/definitions/v1ClusterProfileNotificationUpdateEntity" + }, + "type": "array", + "uniqueItems": true + }, + "spcApplySettings": { + "$ref": "#/definitions/v1SpcApplySettings" + } + }, + "type": "object" + }, + "v1ClusterPackManifestStatus": { + "properties": { + "condition": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterPackStatus": { + "properties": { + "condition": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "endTime": { + "$ref": "#/definitions/v1Time" + }, + "manifests": { + "items": { + "$ref": "#/definitions/v1ClusterPackManifestStatus" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "profileUid": { + "type": "string" + }, + "services": { + "items": { + "$ref": "#/definitions/v1LoadBalancerService" + }, + "type": "array" + }, + "startTime": { + "$ref": "#/definitions/v1Time" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterPreference": { + "description": "cluster preference", + "properties": { + "archivalIntervalInHour": { + "description": "clusters cleanup interval post deletion", + "type": "integer" + }, + "deletePeriodInHour": { + "description": "clusters deleted before delete period are eligible for cleanup", + "type": "integer" + }, + "healthPollIntervalInMinutes": { + "description": "clusters health poll interval", + "maximum": 60, + "minimum": 3, + "type": "integer" + }, + "monitorIntervalInMinutes": { + "description": "clusters state and consistency monitor", + "type": "integer" + } + } + }, + "v1ClusterProfile": { + "description": "ClusterProfile is the Schema for the clusterprofiles API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterProfileSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterProfileStatus" + } + }, + "type": "object" + }, + "v1ClusterProfileCloneEntity": { + "description": "Cluster profile clone request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ClusterProfileCloneMetaInputEntity" + } + }, + "type": "object" + }, + "v1ClusterProfileCloneMetaInputEntity": { + "description": "Cluster profile clone metadata", + "properties": { + "name": { + "description": "Cloned cluster profile name", + "type": "string" + }, + "target": { + "$ref": "#/definitions/v1ClusterProfileCloneTarget" + }, + "version": { + "description": "Cloned cluster profile version", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1ClusterProfileCloneTarget": { + "description": "Cluster profile clone meta input entity", + "properties": { + "projectUid": { + "description": "Cloned cluster profile project uid", + "type": "string" + }, + "scope": { + "$ref": "#/definitions/v1Scope" + } + }, + "required": [ + "scope" + ], + "type": "object" + }, + "v1ClusterProfileEntity": { + "description": "Cluster profile request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "template": { + "$ref": "#/definitions/v1ClusterProfileTemplateDraft" + }, + "variables": { + "description": "List of unique variable fields defined for a cluster profile with schema constraints", + "items": { + "$ref": "#/definitions/v1Variable" + }, + "type": "array", + "uniqueItems": true + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1ClusterProfileFilterSpec": { + "description": "Cluster profile filter spec", + "properties": { + "environment": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "fips": { + "$ref": "#/definitions/v1ClusterFipsMode" + }, + "profileName": { + "$ref": "#/definitions/v1FilterString" + }, + "profileType": { + "items": { + "$ref": "#/definitions/v1ProfileType" + }, + "type": "array", + "uniqueItems": true + }, + "scope": { + "$ref": "#/definitions/v1ClusterProfileScope" + }, + "tags": { + "$ref": "#/definitions/v1FilterArray" + }, + "version": { + "$ref": "#/definitions/v1FilterVersionString" + } + } + }, + "v1ClusterProfileFips": { + "description": "Cluster profile fips compliance status", + "properties": { + "mode": { + "$ref": "#/definitions/v1ClusterFipsMode" + } + } + }, + "v1ClusterProfileImportEntity": { + "description": "Cluster profile import request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ClusterProfileMetadataImportEntity" + }, + "spec": { + "$ref": "#/definitions/v1ClusterProfileSpecImportEntity" + } + }, + "type": "object" + }, + "v1ClusterProfileMetadata": { + "description": "Cluster profile filter spec", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "spec": { + "properties": { + "cloudType": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + }, + "v1ClusterProfileMetadataImportEntity": { + "description": "Cluster profile import metadata", + "properties": { + "description": { + "description": "Cluster profile description", + "type": "string" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Cluster profile labels", + "type": "object" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterProfileNotificationUpdateEntity": { + "description": "Cluster profile notification update request payload", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1PackManifestUpdateEntity" + }, + "type": "array", + "uniqueItems": true + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterProfilePackConfigList": { + "properties": { + "items": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1PackConfig" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ClusterProfilePackManifests": { + "description": "Cluster profile pack manifests", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1PackManifestsSpec" + }, + "status": { + "$ref": "#/definitions/v1PackSummaryStatus" + } + }, + "type": "object" + }, + "v1ClusterProfilePackSummary": { + "description": "Cluster profile packs summary about the deprecated, disabled, deleted packs count", + "properties": { + "deleted": { + "description": "Total count of deleted packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "deprecated": { + "description": "Total count of deprecated packs in a cluster profile", + "type": "number", + "x-omitempty": false + }, + "disabled": { + "description": "Total count of disabled packs in a cluster profile", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ClusterProfilePacksEntities": { + "description": "List of cluster profile packs", + "properties": { + "items": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1ClusterProfilePacksEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ClusterProfilePacksEntity": { + "description": "Cluster profile packs object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1PackSummarySpec" + }, + "status": { + "$ref": "#/definitions/v1PackSummaryStatus" + } + }, + "type": "object" + }, + "v1ClusterProfilePacksManifests": { + "description": "Cluster profile pack manifests", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "packs": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1ClusterProfilePackManifests" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1ClusterProfileScope": { + "enum": [ + "system", + "tenant", + "project" + ], + "type": "string" + }, + "v1ClusterProfileSortFields": { + "enum": [ + "profileName", + "environment", + "profileType", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "type": "string", + "x-nullable": true + }, + "v1ClusterProfileSortSpec": { + "properties": { + "field": { + "$ref": "#/definitions/v1ClusterProfileSortFields" + }, + "order": { + "$ref": "#/definitions/v1SortOrder" + } + } + }, + "v1ClusterProfileSpec": { + "description": "ClusterProfileTemplate can be in draft mode, or published mode User only see the latest published template, and (or) the draft template User can apply either the draft version or the latest published version to a cluster when user create a draft version, just copy the Published template, increment the version, and keep changing the draft template without increment the draft version when user publish a draft, the version is fixed, and won't be able to make any modification on published template For each clusterprofile that has a published version, there will be a ClusterProfileArchive automatically created when user publish a draft, the published version will also be copied over to the corresponding ClusterProfileArchive it is just in case in the future for whatever reason we may want to expose earlier versions", + "properties": { + "draft": { + "$ref": "#/definitions/v1ClusterProfileTemplate" + }, + "published": { + "$ref": "#/definitions/v1ClusterProfileTemplate" + }, + "version": { + "type": "string" + }, + "versions": { + "description": "Cluster profile's list of all the versions", + "items": { + "$ref": "#/definitions/v1ClusterProfileVersion" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterProfileSpecEntity": { + "description": "Cluster profile update spec", + "properties": { + "version": { + "description": "Cluster profile version", + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterProfileSpecImportEntity": { + "description": "Cluster profile import spec", + "properties": { + "template": { + "$ref": "#/definitions/v1ClusterProfileTemplateImportEntity" + }, + "variables": { + "description": "List of unique variable fields defined for a cluster profile with schema constraints", + "items": { + "$ref": "#/definitions/v1Variable" + }, + "type": "array", + "uniqueItems": true + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterProfileStatus": { + "description": "ClusterProfileStatus defines the observed state of ClusterProfile", + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "items": { + "type": "string" + }, + "type": "array" + }, + "inUseClusters": { + "items": { + "$ref": "#/definitions/v1ObjectResReference" + }, + "type": "array" + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ClusterProfileStatusSummary": { + "description": "ClusterProfileStatusSummary defines the observed state of ClusterProfile", + "properties": { + "fips": { + "$ref": "#/definitions/v1ClusterProfileFips" + }, + "inUseClusterUids": { + "description": "Deprecated. Use inUseClusters", + "items": { + "type": "string" + }, + "type": "array" + }, + "inUseClusters": { + "items": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "type": "array" + }, + "isPublished": { + "type": "boolean", + "x-omitempty": false + }, + "pack": { + "$ref": "#/definitions/v1ClusterProfilePackSummary" + } + }, + "type": "object" + }, + "v1ClusterProfileSummary": { + "description": "Cluster profile summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "specSummary": { + "description": "Cluster profile spec summary", + "properties": { + "draft": { + "$ref": "#/definitions/v1ClusterProfileTemplateSummary" + }, + "published": { + "$ref": "#/definitions/v1ClusterProfileTemplateSummary" + }, + "version": { + "description": "Cluster profile's latest version", + "type": "string" + }, + "versions": { + "description": "Cluster profile's list of all the versions", + "items": { + "$ref": "#/definitions/v1ClusterProfileVersion" + }, + "type": "array" + } + }, + "type": "object" + }, + "status": { + "$ref": "#/definitions/v1ClusterProfileStatusSummary" + } + }, + "type": "object" + }, + "v1ClusterProfileTemplate": { + "description": "ClusterProfileTemplate contains details of a clusterprofile definition", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packServerRefs": { + "description": "PackServerRefs is only used on Hubble side it is reference to pack registry servers which PackRef belongs to in hubble, pack server is a top level object, so use a reference to point to it packs within a clusterprofile can come from different pack servers, so this is an array", + "items": { + "$ref": "#/definitions/v1ObjectReference" + }, + "type": "array" + }, + "packServerSecret": { + "description": "This secret is used only on Palette side use case is similar to k8s image pull secret this single secret internally should contains all the pack servers in PackServerRefs if empty, means no credential is needed to access the pack server For spectro saas, Ally will set this field before pass to palette", + "type": "string" + }, + "packs": { + "description": "Packs definitions here are final definitions. If ClonedFrom and ParamsOverwrite is present, then Packs are the final merge result of ClonedFrom and ParamsOverwrite So orchestration engine will just take the Packs and do the work, no need to worry about parameters merge", + "items": { + "$ref": "#/definitions/v1PackRef" + }, + "type": "array" + }, + "profileVersion": { + "description": "version start from 1.0.0, matching the index of ClusterProfileSpec.Versions[] will be used by clusterSpec to identify which version is applied to the cluster", + "type": "string" + }, + "relatedObject": { + "$ref": "#/definitions/v1ObjectReference", + "description": "RelatedObject refers to the type of object(clustergroup, cluster or edgeHost) the cluster profile is associated with" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "description": "Deprecated. Use profileVersion", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1ClusterProfileTemplateDraft": { + "description": "Cluster profile template spec", + "properties": { + "cloudType": { + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1PackManifestEntity" + }, + "type": "array", + "uniqueItems": true + }, + "type": { + "$ref": "#/definitions/v1ProfileType" + } + }, + "type": "object" + }, + "v1ClusterProfileTemplateImportEntity": { + "description": "Cluster profile import template", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1PackImportEntity" + }, + "type": "array", + "uniqueItems": true + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterProfileTemplateMeta": { + "description": "Cluster profile template meta information", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "description": "Cluster profile name", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1PackRef" + }, + "type": "array" + }, + "scope": { + "description": "scope or context(system, tenant or project)", + "type": "string" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "version": { + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1ClusterProfileTemplateSummary": { + "description": "Cluster profile template summary", + "properties": { + "cloudType": { + "type": "string" + }, + "packs": { + "items": { + "$ref": "#/definitions/v1PackRefSummary" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterProfileTemplateUpdate": { + "description": "Cluster profile template update spec", + "properties": { + "packs": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1PackManifestUpdateEntity" + }, + "type": "array", + "uniqueItems": true + }, + "type": { + "$ref": "#/definitions/v1ProfileType" + } + }, + "type": "object" + }, + "v1ClusterProfileUpdateEntity": { + "description": "Cluster profile update request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "description": "Cluster profile update spec", + "properties": { + "template": { + "$ref": "#/definitions/v1ClusterProfileTemplateUpdate" + }, + "version": { + "description": "Cluster profile version", + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1ClusterProfileValidatorResponse": { + "description": "Cluster profile validator response", + "properties": { + "packs": { + "$ref": "#/definitions/v1ConstraintValidatorResponse" + } + }, + "type": "object" + }, + "v1ClusterProfileVersion": { + "description": "Cluster profile with version", + "properties": { + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ClusterProfiles": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1ClusterProfile" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ClusterProfilesFilterSpec": { + "description": "Spectro cluster filter summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1ClusterProfileFilterSpec" + }, + "sort": { + "items": { + "$ref": "#/definitions/v1ClusterProfileSortSpec" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ClusterProfilesMetadata": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1ClusterProfileMetadata" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ClusterProfilesSummary": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1ClusterProfileSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ClusterProxySpec": { + "description": "cluster proxy config spec", + "properties": { + "caContainerMountPath": { + "description": "Location to mount Proxy CA cert inside container", + "type": "string" + }, + "caHostPath": { + "description": "Location for Proxy CA cert on host nodes", + "type": "string" + }, + "httpProxy": { + "description": "URL for HTTP requests unless overridden by NoProxy", + "type": "string" + }, + "httpsProxy": { + "description": "HTTPS requests unless overridden by NoProxy", + "type": "string" + }, + "noProxy": { + "description": "NoProxy represents the NO_PROXY or no_proxy environment", + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterRbac": { + "description": "Cluster RBAC role binding defintion", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterRbacSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterRbacStatus" + } + }, + "type": "object" + }, + "v1ClusterRbacBinding": { + "description": "Cluster RBAC binding", + "properties": { + "namespace": { + "type": "string" + }, + "role": { + "$ref": "#/definitions/v1ClusterRoleRef" + }, + "subjects": { + "items": { + "$ref": "#/definitions/v1ClusterRbacSubjects" + }, + "type": "array", + "uniqueItems": true + }, + "type": { + "enum": [ + "RoleBinding", + "ClusterRoleBinding" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterRbacEntity": { + "properties": { + "clusterRbac": { + "description": "Cluster RBAC role bindings", + "items": { + "$ref": "#/definitions/v1ResourceReference" + }, + "type": "array" + } + } + }, + "v1ClusterRbacInputEntity": { + "description": "Cluster RBAC role binding defintion", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaUpdateEntity" + }, + "spec": { + "$ref": "#/definitions/v1ClusterRbacSpec" + } + }, + "type": "object" + }, + "v1ClusterRbacResourcesUpdateEntity": { + "properties": { + "rbacs": { + "items": { + "$ref": "#/definitions/v1ClusterRbacInputEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1ClusterRbacSpec": { + "description": "Cluster RBAC spec", + "properties": { + "bindings": { + "items": { + "$ref": "#/definitions/v1ClusterRbacBinding" + }, + "type": "array", + "uniqueItems": true + }, + "relatedObject": { + "$ref": "#/definitions/v1RelatedObject" + } + }, + "type": "object" + }, + "v1ClusterRbacStatus": { + "description": "Cluster rbac status", + "properties": { + "errors": { + "items": { + "$ref": "#/definitions/v1ClusterResourceError" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ClusterRbacSubjects": { + "description": "Cluster role ref", + "properties": { + "name": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "type": { + "enum": [ + "User", + "Group", + "ServiceAccount" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterRbacs": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1ClusterRbac" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ClusterRefs": { + "description": "Cluster Object References", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1ObjectReference" + }, + "type": "array" + } + } + }, + "v1ClusterRepaveSource": { + "enum": [ + "user", + "hubble", + "palette", + "stylus" + ], + "type": "string" + }, + "v1ClusterRepaveState": { + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ], + "type": "string" + }, + "v1ClusterRepaveStatus": { + "description": "Cluster repave status", + "properties": { + "state": { + "$ref": "#/definitions/v1ClusterRepaveState" + } + } + }, + "v1ClusterResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "clusterUid": { + "type": "string" + }, + "resourceAllocation": { + "$ref": "#/definitions/v1WorkspaceResourceAllocation" + } + } + }, + "v1ClusterResourceError": { + "description": "Cluster resource error", + "properties": { + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + }, + "v1ClusterResources": { + "properties": { + "namespaces": { + "description": "Cluster namespaces", + "items": { + "$ref": "#/definitions/v1ResourceReference" + }, + "type": "array" + }, + "rbacs": { + "description": "Cluster RBAC role bindings", + "items": { + "$ref": "#/definitions/v1ResourceReference" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterResourcesEntity": { + "properties": { + "namespaces": { + "items": { + "$ref": "#/definitions/v1ClusterNamespaceResourceInputEntity" + }, + "type": "array", + "uniqueItems": true + }, + "rbacs": { + "items": { + "$ref": "#/definitions/v1ClusterRbacInputEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1ClusterRestore": { + "description": "Cluster Restore", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterRestoreSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterRestoreStatus" + } + } + }, + "v1ClusterRestoreConfig": { + "description": "Cluster restore config", + "properties": { + "backupName": { + "type": "string" + }, + "backupRequestUid": { + "type": "string" + }, + "destinationClusterUid": { + "type": "string" + }, + "includeClusterResources": { + "type": "boolean" + }, + "includeNamespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "preserveNodePorts": { + "type": "boolean" + }, + "restorePVs": { + "type": "boolean" + } + }, + "required": [ + "backupRequestUid", + "backupName", + "destinationClusterUid" + ] + }, + "v1ClusterRestoreSpec": { + "description": "Cluster Restore Spec", + "properties": { + "clusterUid": { + "type": "string" + } + } + }, + "v1ClusterRestoreStatus": { + "description": "Cluster Restore Status", + "properties": { + "clusterRestoreStatuses": { + "items": { + "$ref": "#/definitions/v1ClusterRestoreStatusMeta" + }, + "type": "array" + } + } + }, + "v1ClusterRestoreStatusMeta": { + "description": "Cluster Restore Status Meta", + "properties": { + "actor": { + "$ref": "#/definitions/v1ClusterFeatureActor" + }, + "backupName": { + "type": "string" + }, + "backupRequestUid": { + "type": "string" + }, + "restoreRequestUid": { + "type": "string" + }, + "restoreStatusMeta": { + "$ref": "#/definitions/v1RestoreStatusMeta" + }, + "sourceClusterRef": { + "$ref": "#/definitions/v1ResourceReference" + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterRoleRef": { + "description": "Cluster role ref", + "properties": { + "kind": { + "enum": [ + "Role", + "ClusterRole" + ], + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterScanLogKubeBench": { + "description": "Cluster compliance scan KubeBench Log", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterComplianceScanLogSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterKubeBenchLogStatus" + } + } + }, + "v1ClusterScanLogKubeHunter": { + "description": "Cluster compliance scan KubeHunter Log", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterComplianceScanLogSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterKubeHunterLogStatus" + } + } + }, + "v1ClusterScanLogSonobuoy": { + "description": "Cluster compliance scan Sonobuoy Log", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterComplianceScanLogSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterSonobuoyLogStatus" + } + } + }, + "v1ClusterScanLogSyft": { + "description": "Cluster Compliance Scan Syft Log", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterComplianceScanLogSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterSyftLogStatus" + } + } + }, + "v1ClusterScanTime": { + "description": "Cluster compliance scan Time", + "properties": { + "endTime": { + "$ref": "#/definitions/v1Time" + }, + "startTime": { + "$ref": "#/definitions/v1Time" + } + } + }, + "v1ClusterSearchInputSpec": { + "properties": { + "inputs": { + "additionalProperties": { + "$ref": "#/definitions/v1ClusterSearchInputSpecProperty" + }, + "type": "object" + } + } + }, + "v1ClusterSearchInputSpecProperty": { + "properties": { + "values": { + "items": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "type": "array", + "x-omitempty": true + } + } + }, + "v1ClusterSonobuoyLogStatus": { + "description": "Cluster compliance scan Sonobuoy Log Status", + "properties": { + "actor": { + "$ref": "#/definitions/v1ClusterFeatureActor" + }, + "message": { + "type": "string" + }, + "reports": { + "additionalProperties": { + "$ref": "#/definitions/v1SonobuoyReport" + }, + "type": "object" + }, + "requestUid": { + "type": "string" + }, + "scanTime": { + "$ref": "#/definitions/v1ClusterScanTime" + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterState": { + "enum": [ + "Pending", + "Provisioning", + "Running", + "Deleting", + "Deleted", + "Error", + "Importing" + ], + "type": "string" + }, + "v1ClusterSyftLogStatus": { + "description": "Cluster compliance scan Syft Log Status", + "properties": { + "actor": { + "$ref": "#/definitions/v1ClusterFeatureActor" + }, + "location": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "message": { + "type": "string" + }, + "reports": { + "items": { + "$ref": "#/definitions/v1SyftReport" + }, + "type": "array" + }, + "requestUid": { + "type": "string" + }, + "scanContext": { + "$ref": "#/definitions/v1SyftScanContext" + }, + "scanTime": { + "$ref": "#/definitions/v1ClusterScanTime" + }, + "state": { + "type": "string" + } + } + }, + "v1ClusterUpgradeSettingsEntity": { + "properties": { + "spectroComponents": { + "enum": [ + "lock", + "unlock" + ], + "type": "string" + } + } + }, + "v1ClusterUsageSummary": { + "description": "Cluster usage summary", + "properties": { + "cpuCores": { + "type": "number", + "x-omitempty": false + }, + "isAlloy": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterVirtualMachine": { + "description": "VirtualMachine handles the VirtualMachines that are not running\nor are in a stopped state\nThe VirtualMachine contains the template to create the\nVirtualMachineInstance. It also mirrors the running state of the created\nVirtualMachineInstance in its status.", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1VmObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ClusterVirtualMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterVirtualMachineStatus" + } + }, + "required": [ + "spec" + ] + }, + "v1ClusterVirtualMachineList": { + "description": "VirtualMachineList is a list of virtual machines", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/v1ClusterVirtualMachine" + }, + "type": "array" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1VmListMeta" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ClusterVirtualMachineSpec": { + "description": "VirtualMachineSpec describes how the proper VirtualMachine should look like", + "properties": { + "dataVolumeTemplates": { + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle.", + "items": { + "$ref": "#/definitions/v1VmDataVolumeTemplateSpec" + }, + "type": "array" + }, + "instancetype": { + "$ref": "#/definitions/v1VmInstancetypeMatcher" + }, + "preference": { + "$ref": "#/definitions/v1VmPreferenceMatcher" + }, + "runStrategy": { + "description": "Running state indicates the requested running state of the VirtualMachineInstance mutually exclusive with Running", + "type": "string" + }, + "running": { + "description": "Running controls whether the associatied VirtualMachineInstance is created or not Mutually exclusive with RunStrategy", + "type": "boolean" + }, + "template": { + "$ref": "#/definitions/v1VmVirtualMachineInstanceTemplateSpec" + } + }, + "required": [ + "template" + ], + "type": "object" + }, + "v1ClusterVirtualMachineStatus": { + "description": "VirtualMachineStatus represents the status returned by the controller to describe how the VirtualMachine is doing", + "properties": { + "conditions": { + "description": "Hold the state information of the VirtualMachine and its VirtualMachineInstance", + "items": { + "$ref": "#/definitions/v1VmVirtualMachineCondition" + }, + "type": "array" + }, + "created": { + "description": "Created indicates if the virtual machine is created in the cluster", + "type": "boolean" + }, + "memoryDumpRequest": { + "$ref": "#/definitions/v1VmVirtualMachineMemoryDumpRequest" + }, + "printableStatus": { + "description": "PrintableStatus is a human readable, high-level representation of the status of the virtual machine", + "type": "string" + }, + "ready": { + "description": "Ready indicates if the virtual machine is running and ready", + "type": "boolean" + }, + "restoreInProgress": { + "description": "RestoreInProgress is the name of the VirtualMachineRestore currently executing", + "type": "string" + }, + "snapshotInProgress": { + "description": "SnapshotInProgress is the name of the VirtualMachineSnapshot currently executing", + "type": "string" + }, + "startFailure": { + "$ref": "#/definitions/v1VmVirtualMachineStartFailure" + }, + "stateChangeRequests": { + "description": "StateChangeRequests indicates a list of actions that should be taken on a VMI e.g. stop a specific VMI then start a new one.", + "items": { + "$ref": "#/definitions/v1VmVirtualMachineStateChangeRequest" + }, + "type": "array" + }, + "volumeRequests": { + "description": "VolumeRequests indicates a list of volumes add or remove from the VMI template and hotplug on an active running VMI.", + "items": { + "$ref": "#/definitions/v1VmVirtualMachineVolumeRequest" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "volumeSnapshotStatuses": { + "description": "VolumeSnapshotStatuses indicates a list of statuses whether snapshotting is supported by each volume.", + "items": { + "$ref": "#/definitions/v1VmVolumeSnapshotStatus" + }, + "type": "array" + } + }, + "type": "object", + "x-nullable": true + }, + "v1ClusterVirtualPacksValue": { + "description": "Virtual cluster packs value", + "properties": { + "distroType": { + "type": "string" + }, + "layer": { + "type": "string" + }, + "values": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterVirtualPacksValues": { + "description": "Virtual cluster packs values", + "properties": { + "packs": { + "items": { + "$ref": "#/definitions/v1ClusterVirtualPacksValue" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterWorkload": { + "description": "Cluster workload summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1ClusterWorkloadSpec" + } + }, + "type": "object" + }, + "v1ClusterWorkloadCondition": { + "description": "Cluster workload condition", + "properties": { + "lastTransitionTime": { + "$ref": "#/definitions/v1Time" + }, + "lastUpdateTime": { + "$ref": "#/definitions/v1Time" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterWorkloadCronJob": { + "description": "Cluster workload cronjob summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ClusterWorkloadMetadata" + }, + "spec": { + "$ref": "#/definitions/v1ClusterWorkloadCronJobSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterWorkloadCronJobStatus" + } + }, + "type": "object" + }, + "v1ClusterWorkloadCronJobSpec": { + "description": "Cluster workload cronjob spec", + "properties": { + "schedule": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterWorkloadCronJobStatus": { + "description": "Cluster workload cronjob status", + "properties": { + "lastScheduleTime": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1ClusterWorkloadCronJobs": { + "description": "Cluster workload cronjobs summary", + "properties": { + "cronJobs": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadCronJob" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterWorkloadDaemonSet": { + "description": "Cluster workload daemonset summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ClusterWorkloadMetadata" + }, + "status": { + "$ref": "#/definitions/v1ClusterWorkloadDaemonSetStatus" + } + }, + "type": "object" + }, + "v1ClusterWorkloadDaemonSetStatus": { + "description": "Cluster workload daemonset status", + "properties": { + "available": { + "format": "int32", + "type": "integer" + }, + "currentScheduled": { + "format": "int32", + "type": "integer" + }, + "desiredScheduled": { + "format": "int32", + "type": "integer" + }, + "misScheduled": { + "format": "int32", + "type": "integer" + }, + "ready": { + "format": "int32", + "type": "integer" + }, + "updatedScheduled": { + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1ClusterWorkloadDaemonSets": { + "description": "Cluster workload daemonset summary", + "properties": { + "daemonSets": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadDaemonSet" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterWorkloadDeployment": { + "description": "Cluster workload deployment summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ClusterWorkloadMetadata" + }, + "status": { + "$ref": "#/definitions/v1ClusterWorkloadDeploymentStatus" + } + }, + "type": "object" + }, + "v1ClusterWorkloadDeploymentStatus": { + "description": "Cluster workload deployment status", + "properties": { + "replicas": { + "$ref": "#/definitions/v1ClusterWorkloadReplicaStatus" + } + }, + "type": "object" + }, + "v1ClusterWorkloadDeployments": { + "description": "Cluster workload deployments summary", + "properties": { + "deployments": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadDeployment" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterWorkloadJob": { + "description": "Cluster workload job summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ClusterWorkloadMetadata" + }, + "status": { + "$ref": "#/definitions/v1ClusterWorkloadJobStatus" + } + }, + "type": "object" + }, + "v1ClusterWorkloadJobStatus": { + "description": "Cluster workload job status", + "properties": { + "completionTime": { + "$ref": "#/definitions/v1Time" + }, + "conditions": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadCondition" + }, + "type": "array" + }, + "startTime": { + "$ref": "#/definitions/v1Time" + }, + "succeeded": { + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1ClusterWorkloadJobs": { + "description": "Cluster workload jobs summary", + "properties": { + "jobs": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadJob" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterWorkloadMetadata": { + "description": "Cluster workload metadata", + "properties": { + "creationTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "entity": { + "$ref": "#/definitions/v1ClusterWorkloadRef" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "namespace": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterWorkloadNamespace": { + "description": "Cluster workload namespace summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ClusterWorkloadMetadata" + }, + "status": { + "$ref": "#/definitions/v1ClusterWorkloadNamespaceStatus" + } + }, + "type": "object" + }, + "v1ClusterWorkloadNamespaceStatus": { + "description": "Cluster workload namespace status", + "properties": { + "phase": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterWorkloadNamespaces": { + "description": "Cluster workload namespaces summary", + "properties": { + "namespaces": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadNamespace" + }, + "type": "array" + } + } + }, + "v1ClusterWorkloadPod": { + "description": "Cluster workload pod summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ClusterWorkloadPodMetadata" + }, + "spec": { + "$ref": "#/definitions/v1ClusterWorkloadPodSpec" + }, + "status": { + "$ref": "#/definitions/v1ClusterWorkloadPodStatus" + } + }, + "type": "object" + }, + "v1ClusterWorkloadPodContainer": { + "description": "Cluster workload pod container", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resources": { + "$ref": "#/definitions/v1ClusterWorkloadPodContainerResources" + } + }, + "type": "object" + }, + "v1ClusterWorkloadPodContainerResource": { + "description": "Cluster workload pod container resource", + "properties": { + "cpu": { + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "cpuUnit": { + "type": "string" + }, + "memory": { + "format": "int64", + "type": "integer", + "x-omitempty": false + }, + "memoryUnit": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterWorkloadPodContainerResources": { + "description": "Cluster workload pod container resources", + "properties": { + "limits": { + "$ref": "#/definitions/v1ClusterWorkloadPodContainerResource" + }, + "requests": { + "$ref": "#/definitions/v1ClusterWorkloadPodContainerResource" + } + }, + "type": "object" + }, + "v1ClusterWorkloadPodContainerState": { + "description": "Cluster workload pod container state", + "properties": { + "exitCode": { + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "finishedAt": { + "$ref": "#/definitions/v1Time" + }, + "reason": { + "type": "string" + }, + "startedAt": { + "$ref": "#/definitions/v1Time" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterWorkloadPodContainerStatus": { + "description": "Cluster workload pod container status", + "properties": { + "image": { + "type": "string" + }, + "name": { + "type": "string" + }, + "ready": { + "type": "boolean", + "x-omitempty": false + }, + "restartCount": { + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "started": { + "type": "boolean", + "x-omitempty": false + }, + "state": { + "$ref": "#/definitions/v1ClusterWorkloadPodContainerState" + } + }, + "type": "object" + }, + "v1ClusterWorkloadPodMetadata": { + "description": "Cluster workload pod metadata", + "properties": { + "associatedRefs": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadRef" + }, + "type": "array" + }, + "creationTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "entity": { + "$ref": "#/definitions/v1ClusterWorkloadRef" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "machineUid": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "nodename": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterWorkloadPodSpec": { + "description": "Cluster workload pod spec", + "properties": { + "containers": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadPodContainer" + }, + "type": "array" + }, + "volumes": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadPodVolume" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterWorkloadPodStatus": { + "description": "Cluster workload pod status", + "properties": { + "containers": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadPodContainerStatus" + }, + "type": "array" + }, + "phase": { + "type": "string" + }, + "podIp": { + "type": "string" + }, + "qosClass": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterWorkloadPodVolume": { + "description": "Cluster workload pod volume", + "properties": { + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterWorkloadPods": { + "description": "Cluster workload pods summary", + "properties": { + "pods": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadPod" + }, + "type": "array" + } + } + }, + "v1ClusterWorkloadRef": { + "description": "Cluster workload ref", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ClusterWorkloadReplicaStatus": { + "description": "Cluster workload replica status", + "properties": { + "available": { + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "ready": { + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "total": { + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "updated": { + "format": "int32", + "type": "integer", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ClusterWorkloadRoleBinding": { + "description": "Cluster workload rbac binding summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ClusterWorkloadMetadata" + }, + "spec": { + "$ref": "#/definitions/v1ClusterRbacBinding" + } + }, + "type": "object" + }, + "v1ClusterWorkloadRoleBindings": { + "description": "Cluster workload rbac bindings summary", + "properties": { + "bindings": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadRoleBinding" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterWorkloadSpec": { + "description": "Cluster workload spec", + "properties": { + "clusterroleBindings": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadRoleBinding" + }, + "type": "array" + }, + "cronJobs": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadCronJob" + }, + "type": "array" + }, + "daemonSets": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadDaemonSet" + }, + "type": "array" + }, + "deployments": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadDeployment" + }, + "type": "array" + }, + "jobs": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadJob" + }, + "type": "array" + }, + "pods": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadPod" + }, + "type": "array" + }, + "roleBindings": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadRoleBinding" + }, + "type": "array" + }, + "statefulSets": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadStatefulSet" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterWorkloadStatefulSet": { + "description": "Cluster workload statefulset summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ClusterWorkloadMetadata" + }, + "status": { + "$ref": "#/definitions/v1ClusterWorkloadStatefulSetStatus" + } + }, + "type": "object" + }, + "v1ClusterWorkloadStatefulSetStatus": { + "description": "Cluster workload statefulset status", + "properties": { + "replicas": { + "$ref": "#/definitions/v1ClusterWorkloadReplicaStatus" + } + }, + "type": "object" + }, + "v1ClusterWorkloadStatefulSets": { + "description": "Cluster workload statefulsets summary", + "properties": { + "statefulSets": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadStatefulSet" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ClusterWorkloadsFilter": { + "description": "Cluster workloads filter", + "properties": { + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1ClusterWorkloadsSpec": { + "description": "Cluster workloads spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1ClusterWorkloadsFilter" + } + }, + "type": "object" + }, + "v1ClustersInfo": { + "description": "Active clusters information", + "properties": { + "clustersMeta": { + "items": { + "$ref": "#/definitions/v1ClusterMeta" + }, + "type": "array", + "uniqueItems": true + }, + "totalActiveClusters": { + "format": "int64", + "type": "number" + }, + "totalActiveGreenFieldClusters": { + "format": "int64", + "type": "number" + }, + "totalActiveImportedClusters": { + "format": "int64", + "type": "number" + }, + "totalClustersDeleted": { + "format": "int64", + "type": "number" + }, + "totalClustersDeployed": { + "format": "int64", + "type": "number" + } + }, + "type": "object" + }, + "v1ComplianceScanConfig": { + "description": "Compliance Scan config", + "properties": { + "schedule": { + "$ref": "#/definitions/v1ClusterFeatureSchedule" + } + } + }, + "v1ComplianceScanDriverSpec": { + "description": "Compliance Scan driver spec", + "properties": { + "config": { + "$ref": "#/definitions/v1ComplianceScanConfig" + }, + "isClusterConfig": { + "type": "boolean" + } + } + }, + "v1ComputeMetrics": { + "description": "Compute metrics", + "properties": { + "lastUpdatedTime": { + "$ref": "#/definitions/v1Time" + }, + "limit": { + "type": "number", + "x-omitempty": false + }, + "request": { + "type": "number", + "x-omitempty": false + }, + "total": { + "type": "number", + "x-omitempty": false + }, + "unit": { + "type": "string" + }, + "usage": { + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ComputeRate": { + "description": "Compute estimated rate information", + "properties": { + "rate": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "v1ConfigReverseProxy": { + "description": "Describes the reverse proxy configuration", + "properties": { + "caCert": { + "description": "Describes the ca certificate for system's reverse proxy", + "type": "string" + }, + "clientCert": { + "description": "Describes the client certificate for system's reverse proxy", + "type": "string" + }, + "clientKey": { + "description": "Describes the client certificate key for system's reverse proxy", + "type": "string" + }, + "port": { + "description": "Describes the system's reverse proxy server port", + "type": "integer" + }, + "protocol": { + "description": "Describes the system's reverse proxy server protocol. Possible values [https, http]", + "enum": [ + "http", + "https" + ], + "type": "string" + }, + "server": { + "description": "Describes the system's reverse proxy server", + "type": "string" + } + } + }, + "v1ConstraintError": { + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + }, + "type": "object" + }, + "v1ConstraintValidatorResponse": { + "description": "Constraint validator response", + "properties": { + "results": { + "items": { + "$ref": "#/definitions/v1ConstraintValidatorResult" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1ConstraintValidatorResult": { + "description": "Constraint validator result", + "properties": { + "displayName": { + "type": "string" + }, + "errors": { + "items": { + "$ref": "#/definitions/v1ConstraintError" + }, + "type": "array", + "uniqueItems": true + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1ControlPlaneEndPoint": { + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "IP or FQDN(External/DDNS)", + "type": "string" + }, + "type": { + "description": "VIP or External", + "enum": [ + "VIP", + "External", + "DDNS" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1ControlPlaneHealthCheckTimeoutEntity": { + "properties": { + "controlPlaneHealthCheckTimeout": { + "description": "ControlPlaneHealthCheckTimeout is the timeout to check for ready state of the control plane nodes", + "type": "string" + } + }, + "type": "object" + }, + "v1CoxEdgeAccount": { + "description": "CoxEdge cloud account information", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1CoxEdgeCloudAccount" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1CoxEdgeAccounts": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1CoxEdgeAccount" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1CoxEdgeBaseUrls": { + "description": "List of CoxEdge base urls", + "properties": { + "baseUrls": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "baseUrls" + ], + "type": "object" + }, + "v1CoxEdgeCloudAccount": { + "description": "CoxEdge cloud account", + "properties": { + "apiBaseUrl": { + "description": "The base url - used to make api calls", + "type": "string" + }, + "apiKey": { + "description": "CoxEdge cloud account ApiKey", + "type": "string" + }, + "environment": { + "description": "The environment belonging to the organization", + "type": "string" + }, + "organizationId": { + "description": "The Id of organization", + "type": "string" + }, + "service": { + "description": "The service for which the organization is allowed to provision resources", + "type": "string" + } + }, + "required": [ + "apiBaseUrl", + "apiKey" + ], + "type": "object" + }, + "v1CoxEdgeCloudClusterConfigEntity": { + "description": "CoxEdge cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1CoxEdgeClusterConfig" + } + }, + "type": "object" + }, + "v1CoxEdgeCloudConfig": { + "description": "CoxEdgeCloudConfig is the Schema for the coxedgecloudconfigs API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1CoxEdgeCloudConfigSpec" + }, + "status": { + "$ref": "#/definitions/v1CoxEdgeCloudConfigStatus" + } + }, + "type": "object" + }, + "v1CoxEdgeCloudConfigSpec": { + "description": "CoxEdgeCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cloudAccountRef should point to the secret which contains GcpCloudAccount" + }, + "clusterConfig": { + "$ref": "#/definitions/v1CoxEdgeClusterConfig" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1CoxEdgeMachinePoolConfig" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1CoxEdgeCloudConfigStatus": { + "description": "CoxEdgeCloudConfigStatus defines the observed state of CoxEdgeCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "properties": { + "conditions": { + "description": "spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`", + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "imageID": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + } + }, + "type": "object" + }, + "v1CoxEdgeClusterConfig": { + "description": "Cluster level configuration for coxedge cloud and applicable for all the machine pools", + "properties": { + "coxEdgeLoadBalancerConfig": { + "$ref": "#/definitions/v1CoxEdgeLoadBalancerConfig" + }, + "coxEdgeWorkerLoadBalancerConfig": { + "$ref": "#/definitions/v1CoxEdgeLoadBalancerConfig" + }, + "environment": { + "type": "string" + }, + "organizationId": { + "type": "string" + }, + "sshAuthorizedKeys": { + "description": "CoxEdge ssh authorized keys", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "sshAuthorizedKeys", + "coxEdgeLoadBalancerConfig" + ], + "type": "object" + }, + "v1CoxEdgeCredentials": { + "description": "CoxEdge credentials to get organizations", + "properties": { + "apiBaseUrl": { + "description": "CoxEdge baseUrl - for api calls", + "type": "string" + }, + "apiKey": { + "description": "CoxEdge ApiKey - secret for api calls", + "type": "string" + } + }, + "type": "object" + }, + "v1CoxEdgeDeployment": { + "properties": { + "cpuUtilization": { + "format": "int32", + "type": "integer" + }, + "enableAutoScaling": { + "type": "boolean" + }, + "instancesPerPop": { + "format": "int32", + "type": "integer" + }, + "maxInstancesPerPop": { + "format": "int32", + "type": "integer" + }, + "minInstancesPerPop": { + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "pops": { + "items": { + "type": "string" + }, + "type": "array" + } + } + }, + "v1CoxEdgeEnvironment": { + "description": "CoxEdge environment entity", + "properties": { + "id": { + "description": "CoxEdge environment id", + "type": "string" + }, + "isDeleted": { + "description": "CoxEdge environment state", + "type": "boolean" + }, + "name": { + "description": "CoxEdge environment name", + "type": "string" + } + }, + "type": "object" + }, + "v1CoxEdgeEnvironments": { + "description": "List of CoxEdge environments", + "properties": { + "environments": { + "items": { + "$ref": "#/definitions/v1CoxEdgeEnvironment" + }, + "type": "array" + } + }, + "required": [ + "environments" + ], + "type": "object" + }, + "v1CoxEdgeEnvironmentsRequest": { + "description": "Request payload to get CoxEdge environments", + "properties": { + "credentials": { + "$ref": "#/definitions/v1CoxEdgeCredentials" + }, + "organizationId": { + "description": "CoxEdge organizationId", + "type": "string" + } + }, + "type": "object" + }, + "v1CoxEdgeInstanceTypes": { + "description": "List of CoxEdge instance types", + "properties": { + "instanceTypes": { + "items": { + "$ref": "#/definitions/v1InstanceType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1CoxEdgeLoadBalancerConfig": { + "description": "CoxEdge loadbalancer config", + "properties": { + "pops": { + "description": "CoxEdge PoPs - geographical location for the loadbalancer", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1CoxEdgeLoadPersistentStorage": { + "description": "CoxEdge load persistent storage", + "properties": { + "path": { + "description": "Coxedge load persistent storage path", + "type": "string" + }, + "size": { + "description": "Coxedge load persistent storage size", + "format": "int64", + "type": "integer" + } + }, + "type": "object" + }, + "v1CoxEdgeMachine": { + "description": "CoxEdge cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1CoxEdgeMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + }, + "type": "object" + }, + "v1CoxEdgeMachinePoolCloudConfigEntity": { + "properties": { + "deployments": { + "items": { + "$ref": "#/definitions/v1CoxEdgeDeployment" + }, + "type": "array" + }, + "persistentStorages": { + "description": "Array of coxedge load persistent storages", + "items": { + "$ref": "#/definitions/v1CoxEdgeLoadPersistentStorage" + }, + "type": "array", + "uniqueItems": true + }, + "securityGroupRules": { + "items": { + "$ref": "#/definitions/v1CoxEdgeSecurityGroupRule" + }, + "type": "array" + }, + "spec": { + "type": "string" + } + }, + "type": "object" + }, + "v1CoxEdgeMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "deployments": { + "items": { + "$ref": "#/definitions/v1CoxEdgeDeployment" + }, + "type": "array" + }, + "instanceConfig": { + "$ref": "#/definitions/v1InstanceConfig" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "persistentStorages": { + "description": "Array of coxedge load persistent storages", + "items": { + "$ref": "#/definitions/v1CoxEdgeLoadPersistentStorage" + }, + "type": "array", + "uniqueItems": true + }, + "securityGroupRules": { + "items": { + "$ref": "#/definitions/v1CoxEdgeSecurityGroupRule" + }, + "type": "array" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "spec": { + "type": "string" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + }, + "required": [ + "isControlPlane" + ], + "type": "object" + }, + "v1CoxEdgeMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1CoxEdgeMachinePoolCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + }, + "v1CoxEdgeMachineSpec": { + "description": "CoxEdge cloud VM definition spec", + "properties": { + "addAnycastIpAddress": { + "type": "boolean" + }, + "deployments": { + "items": { + "$ref": "#/definitions/v1CoxEdgeDeployment" + }, + "type": "array" + }, + "image": { + "type": "string" + }, + "persistentStorages": { + "items": { + "$ref": "#/definitions/v1CoxEdgeLoadPersistentStorage" + }, + "type": "array" + }, + "ports": { + "items": { + "$ref": "#/definitions/v1CoxEdgePort" + }, + "type": "array" + }, + "providerId": { + "type": "string" + }, + "specs": { + "type": "string" + }, + "sshAuthorizedKeys": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1CoxEdgeMachines": { + "description": "CoxEdge machine list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1CoxEdgeMachine" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1CoxEdgeOrganization": { + "description": "CoxEdge Organization entity", + "properties": { + "id": { + "description": "CoxEdge organization id", + "type": "string" + }, + "isDeleted": { + "description": "CoxEdge organization state", + "type": "boolean" + }, + "name": { + "description": "CoxEdge organization name", + "type": "string" + } + }, + "type": "object" + }, + "v1CoxEdgeOrganizations": { + "description": "List of CoxEdge organizations", + "properties": { + "organizations": { + "items": { + "$ref": "#/definitions/v1CoxEdgeOrganization" + }, + "type": "array" + } + }, + "required": [ + "organizations" + ], + "type": "object" + }, + "v1CoxEdgePort": { + "description": "CoxEdge network port", + "properties": { + "protocol": { + "type": "string" + }, + "publicPort": { + "type": "string" + }, + "publicPortDesc": { + "type": "string" + } + }, + "type": "object" + }, + "v1CoxEdgeRegion": { + "description": "CoxEdge region entity", + "properties": { + "code": { + "description": "Code of the CoxEdge region", + "type": "string" + }, + "location": { + "$ref": "#/definitions/v1ClusterLocation" + }, + "name": { + "description": "Name of the CoxEdge region", + "type": "string" + } + }, + "type": "object" + }, + "v1CoxEdgeRegions": { + "description": "List of CoxEdge regions", + "properties": { + "regions": { + "items": { + "$ref": "#/definitions/v1CoxEdgeRegion" + }, + "type": "array" + } + }, + "required": [ + "regions" + ], + "type": "object" + }, + "v1CoxEdgeSecurityGroupRule": { + "properties": { + "action": { + "enum": [ + "block", + "allow" + ], + "type": "string" + }, + "description": { + "type": "string" + }, + "portRange": { + "type": "string" + }, + "protocol": { + "enum": [ + "TCP", + "UDP", + "TCP_UDP", + "ESP", + "AH", + "ICMP", + "GRE" + ], + "type": "string" + }, + "source": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "v1CoxEdgeService": { + "description": "CoxEdge service entity", + "properties": { + "code": { + "description": "CoxEdge service code", + "type": "string" + }, + "id": { + "description": "CoxEdge service id", + "type": "string" + }, + "name": { + "description": "CoxEdge service name", + "type": "string" + } + }, + "type": "object" + }, + "v1CoxEdgeServices": { + "description": "List of CoxEdge services", + "properties": { + "services": { + "items": { + "$ref": "#/definitions/v1CoxEdgeService" + }, + "type": "array" + } + }, + "required": [ + "services" + ], + "type": "object" + }, + "v1CustomAccount": { + "description": "Custom account information", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1CustomCloudAccount" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1CustomAccountEntity": { + "description": "Custom account information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1CustomCloudAccount" + } + }, + "type": "object" + }, + "v1CustomAccounts": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1CustomAccount" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1CustomCloudAccount": { + "properties": { + "credentials": { + "additionalProperties": { + "type": "string" + }, + "description": "Cloud account credentials", + "type": "object" + } + }, + "required": [ + "credentials" + ], + "type": "object" + }, + "v1CustomCloudClusterConfigEntity": { + "description": "Custom cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1CustomClusterConfig" + } + }, + "type": "object" + }, + "v1CustomCloudConfig": { + "description": "CustomCloudConfig is the Schema for the custom cloudconfigs API", + "properties": { + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1CustomCloudConfigSpec" + } + }, + "type": "object" + }, + "v1CustomCloudConfigSpec": { + "description": "CustomCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cloudAccountRef should point to the secret which contains CustomCloudAccount" + }, + "clusterConfig": { + "$ref": "#/definitions/v1CustomClusterConfig" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1CustomMachinePoolConfig" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1CustomCloudMetaEntity": { + "description": "Custom cloud meta entity", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta", + "description": "Custom cloud metadata" + }, + "spec": { + "$ref": "#/definitions/v1CustomCloudMetaSpecEntity" + } + }, + "type": "object" + }, + "v1CustomCloudMetaSpecEntity": { + "description": "Custom cloud spec response entity", + "properties": { + "cloudCategory": { + "$ref": "#/definitions/v1CloudCategory" + }, + "displayName": { + "description": "Custom cloud displayName", + "type": "string" + }, + "isManaged": { + "description": "If the custom cloud is a managed cluster", + "type": "boolean" + }, + "logo": { + "description": "Custom cloud logo", + "type": "string" + } + }, + "type": "object" + }, + "v1CustomCloudRateConfig": { + "description": "Private cloud rate config", + "properties": { + "cloudType": { + "type": "string" + }, + "rateConfig": { + "$ref": "#/definitions/v1PrivateCloudRateConfig" + } + } + }, + "v1CustomCloudRequestEntity": { + "description": "Custom cloud request entity", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity", + "description": "Custom cloud metadata" + }, + "spec": { + "$ref": "#/definitions/v1CustomCloudSpecEntity" + } + }, + "type": "object" + }, + "v1CustomCloudSpecEntity": { + "description": "Custom cloud request entity spec", + "properties": { + "cloudCategory": { + "$ref": "#/definitions/v1CloudCategory" + }, + "displayName": { + "description": "Custom cloud displayName", + "type": "string" + }, + "isControlPlaneManaged": { + "description": "If the custom cloud is a managed cluster", + "type": "boolean" + }, + "logo": { + "description": "Custom cloud logo", + "type": "string" + } + }, + "type": "object" + }, + "v1CustomCloudType": { + "properties": { + "cloudCategory": { + "$ref": "#/definitions/v1CloudCategory" + }, + "cloudFamily": { + "description": "Cloud grouping as family", + "type": "string" + }, + "displayName": { + "description": "Custom cloudtype displayName", + "type": "string" + }, + "isCustom": { + "description": "If it is a custom cloudtype", + "type": "boolean", + "x-omitempty": false + }, + "isManaged": { + "description": "If custom cloudtype is managed", + "type": "boolean", + "x-omitempty": false + }, + "isVertex": { + "description": "If cloud is support for Vertex env", + "type": "boolean", + "x-omitempty": false + }, + "logo": { + "description": "Custom cloudtype logo", + "type": "string" + }, + "name": { + "description": "Custom cloudtype name", + "type": "string" + } + }, + "type": "object" + }, + "v1CustomCloudTypeCloudAccountKeys": { + "description": "Custom cloudType custom cloud account keys", + "properties": { + "keys": { + "description": "Array of custom cloud type cloud account keys", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1CustomCloudTypeContentResponse": { + "description": "Custom cloudType content response", + "properties": { + "yaml": { + "description": "custom cloud type content", + "type": "string" + } + }, + "type": "object" + }, + "v1CustomCloudTypes": { + "description": "Custom cloudType content response", + "properties": { + "cloudTypes": { + "description": "Array of custom cloud types", + "items": { + "$ref": "#/definitions/v1CustomCloudType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1CustomClusterConfig": { + "description": "Cluster level configuration for Custom cloud and applicable for all the machine pools", + "properties": { + "values": { + "description": "YAML string for Cluster and CloudCluster", + "type": "string" + } + }, + "required": [ + "values" + ], + "type": "object" + }, + "v1CustomClusterConfigEntity": { + "properties": { + "location": { + "$ref": "#/definitions/v1ClusterLocation" + }, + "machineManagementConfig": { + "$ref": "#/definitions/v1MachineManagementConfig" + }, + "resources": { + "$ref": "#/definitions/v1ClusterResourcesEntity" + } + }, + "type": "object" + }, + "v1CustomInstanceType": { + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a custom machine's disk, in GiB", + "format": "int32", + "type": "integer" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a custom machine's memory, in MiB", + "format": "int64", + "type": "integer" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number in a custom machine", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1CustomMachine": { + "description": "Custom cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1CustomMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + }, + "type": "object" + }, + "v1CustomMachinePoolBaseConfigEntity": { + "description": "Machine pool configuration for the custom cluster", + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional labels to be part of the machine pool", + "type": "object" + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1CustomMachinePoolCloudConfigEntity": { + "properties": { + "values": { + "description": "Machine pool configuration as yaml content", + "type": "string" + } + }, + "type": "object" + }, + "v1CustomMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + }, + "values": { + "description": "YAML string for machine", + "type": "string" + } + }, + "required": [ + "isControlPlane" + ], + "type": "object" + }, + "v1CustomMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1CustomMachinePoolCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1CustomMachinePoolBaseConfigEntity" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + }, + "v1CustomMachineSpec": { + "description": "Custom cloud VM definition spec", + "properties": { + "cloudType": { + "type": "string" + }, + "hostName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "$ref": "#/definitions/v1CustomInstanceType" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1CustomNic" + }, + "type": "array" + }, + "sshKeyName": { + "type": "string" + } + } + }, + "v1CustomMachines": { + "description": "List of Custom machines", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1CustomMachine" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1CustomNic": { + "description": "Custom network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "publicIp": { + "type": "string" + } + }, + "type": "object" + }, + "v1DashboardWorkspace": { + "description": "Workspace information", + "properties": { + "meta": { + "$ref": "#/definitions/v1DashboardWorkspaceMeta" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1DashboardWorkspaceSpec" + }, + "status": { + "$ref": "#/definitions/v1DashboardWorkspaceStatus" + } + } + }, + "v1DashboardWorkspaceAllocation": { + "description": "Workspace allocation", + "properties": { + "cpu": { + "$ref": "#/definitions/v1DashboardWorkspaceResourceAllocation" + }, + "memory": { + "$ref": "#/definitions/v1DashboardWorkspaceResourceAllocation" + } + } + }, + "v1DashboardWorkspaceClusterRef": { + "description": "Workspace cluster reference", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "v1DashboardWorkspaceMeta": { + "description": "Deprecated. Workspace meta data", + "properties": { + "clusterNames": { + "description": "Deprecated. Use clusterRefs", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "clusterRefs": { + "items": { + "$ref": "#/definitions/v1DashboardWorkspaceClusterRef" + }, + "type": "array", + "uniqueItems": true + }, + "creationTime": { + "$ref": "#/definitions/v1Time" + }, + "name": { + "type": "string" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "uid": { + "type": "string" + } + } + }, + "v1DashboardWorkspaceNamespaceAllocation": { + "description": "Workspace namespace allocation", + "properties": { + "name": { + "type": "string" + }, + "total": { + "$ref": "#/definitions/v1DashboardWorkspaceAllocation" + } + } + }, + "v1DashboardWorkspaceQuota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "$ref": "#/definitions/v1DashboardWorkspaceQuotaResourceAllocation" + } + } + }, + "v1DashboardWorkspaceQuotaResourceAllocation": { + "description": "Workspace quota resource allocation", + "properties": { + "cpu": { + "exclusiveMinimum": true, + "minimum": 0, + "type": "number" + }, + "memory": { + "exclusiveMinimum": true, + "minimum": 0, + "type": "number" + } + } + }, + "v1DashboardWorkspaceResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "allocated": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "usage": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + } + }, + "v1DashboardWorkspaceSpec": { + "description": "Workspace spec summary", + "properties": { + "clusterRefs": { + "items": { + "$ref": "#/definitions/v1DashboardWorkspaceClusterRef" + }, + "type": "array", + "uniqueItems": true + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "quota": { + "$ref": "#/definitions/v1DashboardWorkspaceQuota" + } + } + }, + "v1DashboardWorkspaceStatus": { + "description": "Workspace status", + "properties": { + "namespaces": { + "items": { + "$ref": "#/definitions/v1DashboardWorkspaceNamespaceAllocation" + }, + "type": "array", + "uniqueItems": true + }, + "total": { + "$ref": "#/definitions/v1DashboardWorkspaceAllocation" + } + } + }, + "v1DashboardWorkspaces": { + "properties": { + "cpuUnit": { + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/v1DashboardWorkspace" + }, + "type": "array", + "uniqueItems": true + }, + "memoryUnit": { + "type": "string" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1DataSinkConfig": { + "description": "Data sink", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1DataSinkSpec" + } + }, + "type": "object" + }, + "v1DataSinkSpec": { + "properties": { + "auditDataSinks": { + "items": { + "$ref": "#/definitions/v1DataSinkableSpec" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1DataSinkableSpec": { + "properties": { + "cloudWatch": { + "$ref": "#/definitions/v1CloudWatch" + }, + "type": { + "enum": [ + "cloudwatch" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1DatabaseTransferJob": { + "description": "database transfer job details", + "properties": { + "backupStatus": { + "$ref": "#/definitions/v1TransferJob" + }, + "backupUid": { + "type": "string" + }, + "mode": { + "enum": [ + "FileSystem", + "Ftp" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1DatabaseTransferStatus": { + "description": "database transfer status", + "properties": { + "backups": { + "items": { + "$ref": "#/definitions/v1DatabaseTransferJob" + }, + "type": "array" + }, + "isActive": { + "type": "boolean" + } + }, + "type": "object" + }, + "v1DeleteMeta": { + "description": "Properties to send back after deletion operation", + "properties": { + "count": { + "format": "int64", + "type": "integer" + }, + "items": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + } + }, + "v1DeletedMsg": { + "description": "Deleted response with message", + "properties": { + "msg": { + "type": "string" + } + } + }, + "v1DeveloperCredit": { + "description": "Credits allocated for each tenant/user", + "properties": { + "cpu": { + "description": "cpu in cores", + "format": "int32", + "type": "number", + "x-omitempty": false + }, + "memoryGiB": { + "description": "memory in GiB", + "format": "int32", + "type": "number", + "x-omitempty": false + }, + "storageGiB": { + "description": "storage in GiB", + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "virtualClustersLimit": { + "description": "number of active virtual clusters", + "format": "int32", + "type": "number", + "x-omitempty": false + } + } + }, + "v1DeviceSpec": { + "description": "DeviceSpec defines the desired state of Device", + "properties": { + "archType": { + "default": "amd64", + "description": "Architecture type of the edge host", + "enum": [ + "arm64", + "amd64" + ], + "type": "string" + }, + "cpu": { + "$ref": "#/definitions/v1CPU" + }, + "disks": { + "items": { + "$ref": "#/definitions/v1Disk" + }, + "type": "array" + }, + "gpus": { + "items": { + "$ref": "#/definitions/v1GPUDeviceSpec" + }, + "type": "array" + }, + "memory": { + "$ref": "#/definitions/v1Memory" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1Nic" + }, + "type": "array" + }, + "os": { + "$ref": "#/definitions/v1OS" + } + }, + "type": "object" + }, + "v1Disk": { + "properties": { + "controller": { + "type": "string" + }, + "partitions": { + "items": { + "$ref": "#/definitions/v1Partition" + }, + "type": "array" + }, + "size": { + "description": "Size in GB", + "format": "int32", + "type": "integer" + }, + "vendor": { + "type": "string" + } + }, + "type": "object" + }, + "v1DomainHost": { + "description": "update domain host for application. RootDomain gets dervied from domain host url", + "properties": { + "host": { + "type": "string" + } + }, + "type": "object" + }, + "v1EcrAuthorizationRequestEntity": { + "description": "Ecr registry credentials entity", + "properties": { + "awsCloudAccount": { + "$ref": "#/definitions/v1AwsCloudAccount" + }, + "endpoint": { + "description": "Endpoint url to make the request", + "type": "string" + }, + "isPrivate": { + "description": "If it is public or private", + "type": "boolean" + }, + "region": { + "description": "Name of the region", + "type": "string" + } + }, + "type": "object" + }, + "v1EcrImageEntity": { + "properties": { + "name": { + "description": "Image name", + "type": "string" + }, + "tag": { + "description": "Image tag", + "type": "string" + } + }, + "type": "object" + }, + "v1EcrImageValidateEntity": { + "description": "Ecr registry image meta", + "properties": { + "authEntity": { + "$ref": "#/definitions/v1EcrAuthorizationRequestEntity" + }, + "imageTag": { + "description": "Name of the image tag", + "type": "string" + }, + "images": { + "description": "Ecr Image Entity", + "items": { + "$ref": "#/definitions/v1EcrImageEntity" + }, + "type": "array" + }, + "repoName": { + "description": "Name of the repo", + "type": "string" + } + }, + "type": "object" + }, + "v1EcrRegistry": { + "description": "Ecr registry information", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1EcrRegistrySpec" + } + }, + "type": "object" + }, + "v1EcrRegistrySpec": { + "description": "Ecr registry spec", + "properties": { + "baseContentPath": { + "description": "OCI ecr registry content base path", + "type": "string" + }, + "credentials": { + "$ref": "#/definitions/v1AwsCloudAccount" + }, + "defaultRegion": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean" + }, + "providerType": { + "default": "helm", + "enum": [ + "helm", + "pack" + ], + "type": "string" + }, + "registryUid": { + "description": "Ecr registry uid", + "type": "string" + }, + "scope": { + "type": "string" + }, + "tls": { + "$ref": "#/definitions/v1TlsConfiguration" + } + }, + "required": [ + "endpoint", + "isPrivate" + ], + "type": "object" + }, + "v1EdgeHost": { + "description": "EdgeHost is the underlying appliance", + "properties": { + "disableAutoRegister": { + "description": "Set to true if auto register is disabled for the device", + "type": "boolean", + "x-omitempty": false + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "hostAuthToken": { + "description": "HostAuthToken to authorize auto registration", + "type": "string", + "x-omitempty": false + }, + "hostChecksum": { + "description": "HostChecksum is the checksum provided by the edge host, to be persisted in SaaS", + "type": "string", + "x-omitempty": false + }, + "hostIdentity": { + "$ref": "#/definitions/v1EdgeHostIdentity", + "description": "HostIdentity is the identity to access the edge host" + }, + "hostPairingKey": { + "description": "HostPairingKey is the one-time pairing key to pair the edge host with the device registered in SaaS", + "format": "password", + "type": "string", + "x-omitempty": false + }, + "hostUid": { + "description": "HostUid is the ID of the EdgeHost", + "type": "string" + }, + "macAddress": { + "description": "Mac address of edgehost", + "type": "string", + "x-omitempty": false + }, + "project": { + "$ref": "#/definitions/v1ObjectEntity", + "description": "ProjectUid where the edgehost will be placed during auto registration", + "x-omitempty": false + } + }, + "required": [ + "hostUid", + "hostAddress" + ], + "type": "object" + }, + "v1EdgeHostCloudProperties": { + "description": "Additional cloud properties of the edge host (applicable based on the cloud type)", + "properties": { + "vsphere": { + "$ref": "#/definitions/v1EdgeHostVsphereCloudProperties" + } + }, + "type": "object" + }, + "v1EdgeHostClusterEntity": { + "properties": { + "clusterUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeHostDevice": { + "properties": { + "aclmeta": { + "$ref": "#/definitions/v1AclMeta" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1EdgeHostDeviceSpec" + }, + "status": { + "$ref": "#/definitions/v1EdgeHostDeviceStatus" + } + } + }, + "v1EdgeHostDeviceEntity": { + "description": "Edge host device information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectTagsEntity" + }, + "spec": { + "$ref": "#/definitions/v1EdgeHostDeviceSpecEntity" + } + }, + "type": "object" + }, + "v1EdgeHostDeviceHostCheckSum": { + "properties": { + "hostCheckSum": { + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeHostDeviceHostPairingKey": { + "properties": { + "hostPairingKey": { + "format": "password", + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeHostDeviceMetaUpdateEntity": { + "description": "Edge host device uid and name", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectTagsEntity" + } + }, + "type": "object" + }, + "v1EdgeHostDeviceSpec": { + "description": "EdgeHostDeviceSpec defines the desired state of EdgeHostDevice", + "properties": { + "cloudProperties": { + "$ref": "#/definitions/v1EdgeHostCloudProperties" + }, + "clusterProfileTemplates": { + "items": { + "$ref": "#/definitions/v1ClusterProfileTemplate" + }, + "type": "array" + }, + "device": { + "$ref": "#/definitions/v1DeviceSpec" + }, + "host": { + "$ref": "#/definitions/v1EdgeHost" + }, + "properties": { + "$ref": "#/definitions/v1EdgeHostProperties" + }, + "service": { + "$ref": "#/definitions/v1ServiceSpec" + }, + "type": { + "description": "Deprecated. Cloudtype of the provisioned edge host", + "enum": [ + "libvirt", + "vsphere", + "edge-native" + ], + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeHostDeviceSpecEntity": { + "description": "Edge host device spec", + "properties": { + "archType": { + "$ref": "#/definitions/v1ArchType" + }, + "hostPairingKey": { + "format": "password", + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeHostDeviceStatus": { + "description": "EdgeHostDeviceStatus defines the observed state of EdgeHostDevice", + "properties": { + "health": { + "$ref": "#/definitions/v1EdgeHostHealth" + }, + "inUseClusters": { + "items": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "type": "array" + }, + "packs": { + "items": { + "$ref": "#/definitions/v1ClusterPackStatus" + }, + "type": "array" + }, + "profileStatus": { + "$ref": "#/definitions/v1ProfileStatus" + }, + "serviceAuthToken": { + "type": "string" + }, + "state": { + "enum": [ + "ready", + "unpaired", + "in-use" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeHostDevices": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1EdgeHostDevice" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1EdgeHostHealth": { + "description": "EdgeHostHealth defines the desired health state of EdgeHostDevice", + "properties": { + "agentVersion": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "enum": [ + "healthy", + "unhealthy" + ], + "type": "string" + } + } + }, + "v1EdgeHostIdentity": { + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "$ref": "#/definitions/v1EdgeHostSSHSecret", + "description": "SSHSecret to the secret containing ssh-username" + } + } + }, + "v1EdgeHostMeta": { + "properties": { + "archType": { + "$ref": "#/definitions/v1ArchType" + }, + "edgeHostType": { + "enum": [ + "libvirt", + "edge-native", + "vsphere" + ], + "type": "string" + }, + "healthState": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeHostNetwork": { + "description": "Network defines the network configuration for a virtual machine", + "properties": { + "networkName": { + "description": "NetworkName of the network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "enum": [ + "default", + "bridge" + ], + "type": "string" + } + }, + "required": [ + "networkName", + "networkType" + ], + "type": "object" + }, + "v1EdgeHostProperties": { + "description": "Additional properties of edge host", + "properties": { + "networks": { + "items": { + "$ref": "#/definitions/v1EdgeHostNetwork" + }, + "type": "array" + }, + "storagePools": { + "items": { + "$ref": "#/definitions/v1EdgeHostStoragePool" + }, + "type": "array" + } + } + }, + "v1EdgeHostSSHSecret": { + "properties": { + "name": { + "description": "SSH secret name", + "type": "string" + }, + "privateKey": { + "description": "Private Key to access the host", + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeHostSpecHost": { + "description": "Host specifications", + "properties": { + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "macAddress": { + "type": "string" + } + } + }, + "v1EdgeHostState": { + "enum": [ + "ready", + "unpaired", + "in-use" + ], + "type": "string" + }, + "v1EdgeHostStoragePool": { + "description": "StoragePool is the storage pool for the vm image", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1EdgeHostVsphereCloudProperties": { + "description": "Vsphere cloud properties of edge host", + "properties": { + "datacenters": { + "items": { + "$ref": "#/definitions/v1VsphereCloudDatacenter" + }, + "type": "array" + } + } + }, + "v1EdgeHostsMeta": { + "properties": { + "edgeHosts": { + "items": { + "$ref": "#/definitions/v1EdgeHostMeta" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1EdgeHostsMetadata": { + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1EdgeHostsMetadataSpec" + }, + "status": { + "$ref": "#/definitions/v1EdgeHostsMetadataStatus" + } + }, + "type": "object" + }, + "v1EdgeHostsMetadataFilter": { + "description": "Edge host metadata spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1EdgeHostsMetadataFilterSpec" + }, + "sort": { + "items": { + "$ref": "#/definitions/v1EdgeHostsMetadataSortSpec" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1EdgeHostsMetadataFilterSpec": { + "description": "Edge hosts metadata filter spec", + "properties": { + "name": { + "$ref": "#/definitions/v1FilterString" + }, + "states": { + "items": { + "$ref": "#/definitions/v1EdgeHostState" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1EdgeHostsMetadataSortFields": { + "enum": [ + "name", + "state", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "type": "string", + "x-nullable": true + }, + "v1EdgeHostsMetadataSortSpec": { + "properties": { + "field": { + "$ref": "#/definitions/v1EdgeHostsMetadataSortFields" + }, + "order": { + "$ref": "#/definitions/v1SortOrder" + } + } + }, + "v1EdgeHostsMetadataSpec": { + "properties": { + "clusterProfileTemplates": { + "items": { + "$ref": "#/definitions/v1ProfileTemplateSummary" + }, + "type": "array" + }, + "device": { + "$ref": "#/definitions/v1DeviceSpec" + }, + "host": { + "$ref": "#/definitions/v1EdgeHostSpecHost" + }, + "projectMeta": { + "$ref": "#/definitions/v1ProjectMeta" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeHostsMetadataStatus": { + "properties": { + "health": { + "$ref": "#/definitions/v1EdgeHostHealth" + }, + "inUseClusters": { + "items": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "type": "array" + }, + "state": { + "$ref": "#/definitions/v1EdgeHostState" + } + }, + "type": "object" + }, + "v1EdgeHostsMetadataSummary": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1EdgeHostsMetadata" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1EdgeHostsSearchSummary": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1EdgeHostsMetadata" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1EdgeHostsTags": { + "properties": { + "tags": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1EdgeNativeCloudClusterConfigEntity": { + "description": "EdgeNative cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1EdgeNativeClusterConfig" + } + }, + "type": "object" + }, + "v1EdgeNativeCloudConfig": { + "description": "EdgeNativeCloudConfig is the Schema for the edgenativecloudconfigs API", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1EdgeNativeCloudConfigSpec" + }, + "status": { + "$ref": "#/definitions/v1EdgeNativeCloudConfigStatus" + } + }, + "type": "object" + }, + "v1EdgeNativeCloudConfigSpec": { + "description": "EdgeNativeCloudConfigSpec defines the desired state of EdgeNativeCloudConfig", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1EdgeNativeClusterConfig" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1EdgeNativeMachinePoolConfig" + }, + "type": "array" + } + }, + "required": [ + "clusterConfig", + "machinePoolConfig" + ], + "type": "object" + }, + "v1EdgeNativeCloudConfigStatus": { + "description": "EdgeNativeCloudConfigStatus defines the observed state of EdgeNativeCloudConfig", + "properties": { + "conditions": { + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "nodeImage": { + "type": "string" + }, + "sourceImageId": { + "description": "SourceImageId can be from packref's annotations or from pack.json", + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeNativeClusterConfig": { + "description": "EdgeNativeClusterConfig definnes Edge Native Cluster specific Spec", + "properties": { + "controlPlaneEndpoint": { + "$ref": "#/definitions/v1EdgeNativeControlPlaneEndPoint", + "description": "ControlPlaneEndpoint is the control plane endpoint, which can be an IP or FQDN" + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "items": { + "default": "", + "type": "string" + }, + "type": "array" + }, + "overlayNetworkConfiguration": { + "$ref": "#/definitions/v1EdgeNativeOverlayNetworkConfiguration", + "description": "OverlayNetworkConfiguration is the configuration for the overlay network" + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "items": { + "default": "", + "type": "string" + }, + "type": "array" + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + }, + "type": "object" + }, + "v1EdgeNativeControlPlaneEndPoint": { + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeNativeHost": { + "description": "EdgeNativeHost is the underlying appliance", + "properties": { + "IsCandidateCaption": { + "default": false, + "description": "Is Edge host nominated as candidate", + "type": "boolean", + "x-omitempty": false + }, + "caCert": { + "description": "CACert for TLS connections", + "type": "string" + }, + "hostAddress": { + "default": "", + "description": "HostAddress is a FQDN or IP address of the Host", + "type": "string" + }, + "hostName": { + "default": "", + "description": "Qualified name of host", + "type": "string" + }, + "hostUid": { + "default": "", + "description": "HostUid is the ID of the EdgeHost", + "type": "string" + }, + "nic": { + "$ref": "#/definitions/v1Nic", + "description": "Edge native nic" + }, + "nicName": { + "description": "Deprecated. Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated. Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "enum": [ + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "hostUid", + "hostAddress" + ], + "type": "object" + }, + "v1EdgeNativeInstanceType": { + "description": "EdgeNativeInstanceType defines the instance configuration for a docker container node", + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk", + "format": "int32", + "type": "integer" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "format": "int32", + "type": "integer" + }, + "name": { + "description": "Name is the instance name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1EdgeNativeMachine": { + "description": "EdgeNative cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1EdgeNativeMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + } + }, + "v1EdgeNativeMachinePoolCloudConfigEntity": { + "properties": { + "edgeHosts": { + "items": { + "$ref": "#/definitions/v1EdgeNativeMachinePoolHostEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "edgeHosts" + ] + }, + "v1EdgeNativeMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "default": "", + "type": "string" + }, + "description": "AdditionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "default": "", + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "hosts": { + "items": { + "$ref": "#/definitions/v1EdgeNativeHost" + }, + "type": "array" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "default": "", + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "osType": { + "description": "the os type for the pool, must be supported by the provider", + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array" + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + }, + "required": [ + "hosts" + ], + "type": "object" + }, + "v1EdgeNativeMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1EdgeNativeMachinePoolCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + }, + "type": "object" + }, + "v1EdgeNativeMachinePoolHostEntity": { + "properties": { + "hostName": { + "description": "Edge host name", + "type": "string" + }, + "hostUid": { + "description": "Edge host id", + "type": "string" + }, + "nic": { + "$ref": "#/definitions/v1Nic", + "description": "Edge native nic" + }, + "nicName": { + "description": "Deprecated - Edge host nic name", + "type": "string" + }, + "staticIP": { + "description": "Deprecated - Edge host static IP", + "type": "string" + }, + "twoNodeCandidatePriority": { + "description": "Set the edgehost candidate priority as primary or secondary, if the edgehost is nominated as two node candidate", + "enum": [ + "primary", + "secondary" + ], + "type": "string" + } + }, + "required": [ + "hostUid" + ] + }, + "v1EdgeNativeMachineSpec": { + "description": "EdgeNative cloud VM definition spec", + "properties": { + "edgeHostUid": { + "type": "string" + }, + "instanceType": { + "$ref": "#/definitions/v1EdgeNativeInstanceType" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1EdgeNativeNic" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1EdgeNativeMachines": { + "description": "EdgeNative machine list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1EdgeNativeMachine" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1EdgeNativeNic": { + "description": "Generic network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "publicIp": { + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeNativeOverlayNetworkConfiguration": { + "properties": { + "cidr": { + "description": "CIDR is the CIDR of the overlay network", + "type": "string" + }, + "enable": { + "description": "Enable is a flag to enable overlay network", + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1EdgeNativeTwoNodeCandidateEntity": { + "properties": { + "primaryEdgeHost": { + "type": "string" + }, + "secondaryEdgeHost": { + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeServiceLogin": { + "description": "System service login input", + "properties": { + "authToken": { + "description": "authToken helps in two step verification for the authorization.", + "type": "string" + }, + "edgeHostUid": { + "type": "string" + }, + "serviceName": { + "type": "string" + }, + "serviceVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeToken": { + "description": "Edge token information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1EdgeTokenSpec" + }, + "status": { + "$ref": "#/definitions/v1EdgeTokenStatus" + } + }, + "type": "object" + }, + "v1EdgeTokenActiveState": { + "description": "Edge token active state", + "properties": { + "isActive": { + "description": "Set to 'true', if the token is active", + "type": "boolean" + } + } + }, + "v1EdgeTokenEntity": { + "description": "Edge token request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1EdgeTokenSpecEntity" + } + }, + "type": "object" + }, + "v1EdgeTokenProject": { + "description": "Edge token project information", + "properties": { + "name": { + "description": "Project name", + "type": "string" + }, + "uid": { + "description": "Project uid", + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeTokenSpec": { + "description": "Edge token specification", + "properties": { + "defaultProject": { + "$ref": "#/definitions/v1EdgeTokenProject", + "description": "Default project where the edgehost will be placed on the token authorization" + }, + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "Edge token expiry date" + }, + "token": { + "description": "Edge token", + "type": "string" + } + }, + "type": "object" + }, + "v1EdgeTokenSpecEntity": { + "description": "Edge token specification", + "properties": { + "defaultProjectUid": { + "description": "Default project where the edgehost will be placed on the token authorization", + "type": "string" + }, + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "Edge token expiry date" + } + }, + "type": "object" + }, + "v1EdgeTokenSpecUpdate": { + "description": "Edge token spec to be updated", + "properties": { + "defaultProjectUid": { + "description": "Default project where the edgehost will be placed on the token authorization", + "type": "string" + }, + "expiry": { + "$ref": "#/definitions/v1Time" + } + } + }, + "v1EdgeTokenStatus": { + "description": "Edge token status", + "properties": { + "isActive": { + "description": "Set to 'true', if the token is active", + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1EdgeTokenUpdate": { + "description": "Edge token update request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1EdgeTokenSpecUpdate" + } + }, + "type": "object" + }, + "v1EdgeTokens": { + "properties": { + "items": { + "description": "List of edge tokens", + "items": { + "$ref": "#/definitions/v1EdgeToken" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1EksAddon": { + "description": "EksAddon represents a EKS addon", + "properties": { + "conflictResolution": { + "description": "ConflictResolution is used to declare what should happen if there are parameter conflicts.", + "type": "string" + }, + "name": { + "description": "Name is the name of the addon", + "type": "string" + }, + "serviceAccountRoleARN": { + "description": "ServiceAccountRoleArn is the ARN of an IAM role to bind to the addons service account", + "type": "string" + }, + "version": { + "description": "Version is the version of the addon to use", + "type": "string" + } + }, + "required": [ + "name", + "version" + ], + "type": "object" + }, + "v1EksCloudClusterConfigEntity": { + "description": "EKS cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1EksClusterConfig" + } + }, + "type": "object" + }, + "v1EksCloudConfig": { + "description": "EksCloudConfig is the Schema for the ekscloudconfigs API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1EksCloudConfigSpec" + } + }, + "type": "object" + }, + "v1EksCloudConfigSpec": { + "description": "EksCloudConfigSpec defines the cloud configuration input by user", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cloudAccountRef should point to the secret which contains EksCloudAccount" + }, + "clusterConfig": { + "$ref": "#/definitions/v1EksClusterConfig" + }, + "fargateProfiles": { + "items": { + "$ref": "#/definitions/v1FargateProfile" + }, + "type": "array" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1EksMachinePoolConfig" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1EksClusterConfig": { + "description": "EksClusterConfig defines EKS specific config", + "properties": { + "addons": { + "description": "Addons defines the EKS addons to enable with the EKS cluster. This may be required for brownfield clusters", + "items": { + "$ref": "#/definitions/v1EksAddon" + }, + "type": "array" + }, + "bastionDisabled": { + "description": "BastionDisabled is the option to disable bastion node", + "type": "boolean" + }, + "controlPlaneLoadBalancer": { + "description": "ControlPlaneLoadBalancer specifies how API server elb will be configured, this field is optional, not provided, \"\", default =\u003e \"Internet-facing\" \"Internet-facing\" =\u003e \"Internet-facing\" \"internal\" =\u003e \"internal\" For spectro saas setup we require to talk to the apiserver from our cluster so ControlPlaneLoadBalancer should be \"\", not provided or \"Internet-facing\"", + "type": "string" + }, + "encryptionConfig": { + "$ref": "#/definitions/v1EncryptionConfig", + "description": "EncryptionConfig specifies the encryption configuration for the cluster" + }, + "endpointAccess": { + "$ref": "#/definitions/v1EksClusterConfigEndpointAccess", + "description": "Endpoints specifies access to this cluster's control plane endpoints" + }, + "region": { + "description": "The AWS Region the cluster lives in.", + "type": "string" + }, + "sshKeyName": { + "description": "SSHKeyName specifies which EC2 SSH key can be used to access machines.", + "type": "string" + }, + "vpcId": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + }, + "required": [ + "region" + ], + "type": "object" + }, + "v1EksClusterConfigEndpointAccess": { + "description": "EndpointAccess specifies how control plane endpoints are accessible", + "properties": { + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDRs": { + "description": "PrivateCIDRs specifies which blocks can access the private endpoint", + "items": { + "type": "string" + }, + "type": "array" + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "PublicCIDRs specifies which blocks can access the public endpoint", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1EksFargateProfiles": { + "description": "Fargate profiles", + "properties": { + "fargateProfiles": { + "items": { + "$ref": "#/definitions/v1FargateProfile" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1EksMachineCloudConfigEntity": { + "properties": { + "awsLaunchTemplate": { + "$ref": "#/definitions/v1AwsLaunchTemplate" + }, + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "capacityType": { + "default": "on-demand", + "description": "EC2 instance capacity type", + "enum": [ + "on-demand", + "spot" + ], + "type": "string" + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "format": "int64", + "maximum": 2000, + "minimum": 1, + "type": "integer" + }, + "spotMarketOptions": { + "$ref": "#/definitions/v1SpotMarketOptions", + "description": "SpotMarketOptions allows users to configure instances to be run using AWS Spot instances." + }, + "subnets": { + "items": { + "$ref": "#/definitions/v1EksSubnetEntity" + }, + "type": "array" + } + } + }, + "v1EksMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "awsLaunchTemplate": { + "$ref": "#/definitions/v1AwsLaunchTemplate" + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "items": { + "type": "string" + }, + "type": "array" + }, + "capacityType": { + "default": "on-demand", + "description": "EC2 instance capacity type", + "enum": [ + "on-demand", + "spot" + ], + "type": "string" + }, + "enableAwsLaunchTemplate": { + "description": "flag to know if aws launch template is enabled", + "type": "boolean" + }, + "instanceConfig": { + "$ref": "#/definitions/v1InstanceConfig" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "format": "int64", + "type": "integer" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "spotMarketOptions": { + "$ref": "#/definitions/v1SpotMarketOptions", + "description": "SpotMarketOptions allows users to configure instances to be run using AWS Spot instances." + }, + "subnetIds": { + "additionalProperties": { + "type": "string" + }, + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + }, + "required": [ + "isControlPlane" + ], + "type": "object" + }, + "v1EksMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1EksMachineCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + } + }, + "v1EksSubnetEntity": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + }, + "v1EncryptionConfig": { + "description": "EncryptionConfig specifies the encryption configuration for the EKS clsuter.", + "properties": { + "isEnabled": { + "description": "Is encryption configuration enabled for the cluster", + "type": "boolean" + }, + "provider": { + "description": "Provider specifies the ARN or alias of the CMK (in AWS KMS)", + "type": "string" + }, + "resources": { + "description": "Resources specifies the resources to be encrypted", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1Event": { + "description": "Describes the component event details", + "properties": { + "involvedObject": { + "$ref": "#/definitions/v1ObjectReference", + "description": "Describes object involved in event generation", + "type": "object" + }, + "message": { + "description": "Describes message associated with the event", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta", + "type": "object" + }, + "reason": { + "description": "Describes the reason for the event", + "type": "string" + }, + "relatedObject": { + "$ref": "#/definitions/v1EventRelatedObject", + "description": "Describes object related to the event", + "type": "object" + }, + "severity": { + "description": "Describes the gravitas for the event", + "type": "string" + }, + "source": { + "$ref": "#/definitions/v1EventSource", + "description": "Describes the origin for the event", + "type": "object" + } + }, + "type": "object" + }, + "v1EventRelatedObject": { + "description": "Object for which the event is related", + "properties": { + "kind": { + "enum": [ + "spectrocluster", + "edgehost" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1EventSource": { + "description": "Describes the origin for the event", + "properties": { + "component": { + "description": "Describes the component where event originated", + "type": "string" + }, + "host": { + "description": "Describes the host where event originated", + "type": "string" + } + }, + "type": "object" + }, + "v1Events": { + "description": "An array of component events items", + "properties": { + "items": { + "description": "Describes a list of returned component events", + "items": { + "$ref": "#/definitions/v1Event" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData", + "description": "Describes the meta information about the component event lists" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1EventsObjectsEntity": { + "properties": { + "resourceType": { + "type": "string" + }, + "resourceUid": { + "type": "string" + } + }, + "required": [ + "resourceType", + "resourceUid" + ], + "type": "object" + }, + "v1EventsRelatedObjectsEntity": { + "properties": { + "relatedObjectUids": { + "description": "List of uids of the related object", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "relatedObjectUids" + ], + "type": "object" + }, + "v1FargateProfile": { + "description": "FargateProfile defines the desired state of FargateProfile", + "properties": { + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to AWS resources managed by the AWS provider, in addition to the ones added by default.", + "type": "object" + }, + "name": { + "description": "name specifies the profile name.", + "type": "string" + }, + "selectors": { + "description": "Selectors specify fargate pod selectors.", + "items": { + "$ref": "#/definitions/v1FargateSelector" + }, + "type": "array" + }, + "subnetIds": { + "description": "SubnetIDs specifies which subnets are used for the auto scaling group of this nodegroup.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1FargateSelector": { + "description": "FargateSelector specifies a selector for pods that should run on this fargate pool", + "properties": { + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Labels specifies which pod labels this selector should match.", + "type": "object" + }, + "namespace": { + "description": "Namespace specifies which namespace this selector should match.", + "type": "string" + } + }, + "required": [ + "namespace" + ], + "type": "object" + }, + "v1Feature": { + "description": "Feature response", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1FeatureSpec" + } + }, + "type": "object" + }, + "v1FeatureFlagPing": { + "properties": { + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "v1FeatureSpec": { + "description": "Feature spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "key": { + "description": "Feature key", + "type": "string" + } + } + }, + "v1FeatureUpdate": { + "description": "Feature update spec", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1FeatureUpdateSpec" + } + } + }, + "v1FeatureUpdateSpec": { + "description": "Feature update spec", + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + } + } + }, + "v1Features": { + "properties": { + "items": { + "description": "List of features", + "items": { + "$ref": "#/definitions/v1Feature" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1FileUploadResponse": { + "description": "File upload response", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1FilterArray": { + "properties": { + "beginsWith": { + "items": { + "type": "string" + }, + "type": "array", + "x-nullable": true + }, + "eq": { + "items": { + "type": "string" + }, + "type": "array", + "x-nullable": true + }, + "ignoreCase": { + "default": true, + "type": "boolean" + }, + "ne": { + "items": { + "type": "string" + }, + "type": "array", + "x-nullable": true + } + }, + "type": "object" + }, + "v1FilterIntRange": { + "properties": { + "eq": { + "format": "int32", + "type": "integer", + "x-nullable": true + }, + "gt": { + "format": "int32", + "type": "integer", + "x-nullable": true + }, + "gte": { + "format": "int32", + "type": "integer", + "x-nullable": true + }, + "lt": { + "format": "int32", + "type": "integer", + "x-nullable": true + }, + "lte": { + "format": "int32", + "type": "integer", + "x-nullable": true + }, + "ne": { + "format": "int32", + "type": "integer", + "x-nullable": true + } + }, + "type": "object" + }, + "v1FilterMetadata": { + "description": "Filter metadata object", + "properties": { + "filterType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1FilterNumberRange": { + "properties": { + "eq": { + "type": "number", + "x-nullable": true + }, + "gt": { + "type": "number", + "x-nullable": true + }, + "gte": { + "type": "number", + "x-nullable": true + }, + "lt": { + "type": "number", + "x-nullable": true + }, + "lte": { + "type": "number", + "x-nullable": true + }, + "ne": { + "type": "number", + "x-nullable": true + } + }, + "type": "object" + }, + "v1FilterString": { + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "contains": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "ignoreCase": { + "default": true, + "type": "boolean" + }, + "ne": { + "type": "string", + "x-nullable": true + } + }, + "type": "object" + }, + "v1FilterSummary": { + "description": "Filter summary object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1FilterSummarySpec" + } + }, + "type": "object" + }, + "v1FilterSummarySpec": { + "properties": { + "filterType": { + "type": "string" + } + } + }, + "v1FilterVersionString": { + "properties": { + "beginsWith": { + "type": "string", + "x-nullable": true + }, + "eq": { + "type": "string", + "x-nullable": true + }, + "gt": { + "type": "string", + "x-nullable": true + }, + "lt": { + "type": "string", + "x-nullable": true + }, + "ne": { + "type": "string", + "x-nullable": true + } + }, + "type": "object" + }, + "v1FiltersMetadata": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1FilterMetadata" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1FiltersSummary": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1FilterSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1FipsSettings": { + "description": "FIPS configuration", + "properties": { + "fipsClusterFeatureConfig": { + "$ref": "#/definitions/v1NonFipsConfig" + }, + "fipsClusterImportConfig": { + "$ref": "#/definitions/v1NonFipsConfig" + }, + "fipsPackConfig": { + "$ref": "#/definitions/v1NonFipsConfig" + } + } + }, + "v1FreemiumUsage": { + "properties": { + "usage": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1FreemiumUsageLimit": { + "properties": { + "activeClusters": { + "type": "integer", + "x-omitempty": false + }, + "overageUsage": { + "type": "number", + "x-omitempty": false + }, + "usage": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1GPUConfig": { + "properties": { + "addresses": { + "additionalProperties": { + "type": "string" + }, + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object" + }, + "deviceModel": { + "description": "DeviceModel is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "numGPUs": { + "description": "NumGPUs is the number of GPUs", + "format": "int32", + "type": "integer" + }, + "vendorName": { + "description": "VendorName is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + }, + "type": "object" + }, + "v1GPUDeviceSpec": { + "properties": { + "addresses": { + "additionalProperties": { + "type": "string" + }, + "description": "Addresses is a map of PCI device entry name to its addresses.\nExample entry would be \"11:00.0 VGA compatible controller [0300]: NVIDIA\nCorporation Device [10de:1eb1] (rev a1)\"- \u003e 0000_11_00_0\" The address is\nBDF (Bus Device Function) identifier format seperated by underscores. The\nfirst 4 bits are almost always 0000. In the above example 11 is Bus, 00\nis Device,0 is function. The values of these addreses are expected in hexadecimal\nformat\n", + "type": "object" + }, + "model": { + "description": "Model is the model of GPU, for a given vendor, for eg., TU104GL [Tesla T4]", + "type": "string" + }, + "vendor": { + "description": "Vendor is the GPU vendor, for eg., NVIDIA or AMD", + "type": "string" + } + }, + "type": "object" + }, + "v1GcpAccount": { + "description": "GCP account information", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1GcpAccountSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1GcpAccountEntity": { + "description": "GCP account information", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1GcpAccountEntitySpec" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1GcpAccountEntitySpec": { + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + }, + "type": "object" + }, + "v1GcpAccountNameValidateSpec": { + "description": "Gcp cloud account name validate spec", + "properties": { + "bucketName": { + "description": "Bucket name in the GCP", + "type": "string" + }, + "credentials": { + "$ref": "#/definitions/v1GcpAccountValidateSpec" + }, + "projectId": { + "description": "ProjectId in the GCP", + "type": "string" + } + }, + "required": [ + "credentials", + "bucketName" + ], + "type": "object" + }, + "v1GcpAccountSpec": { + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileName": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + }, + "type": "object" + }, + "v1GcpAccountValidateSpec": { + "description": "Gcp cloud account entity which takes json credentials or reference to the file where credentials are stored", + "properties": { + "jsonCredentials": { + "description": "Gcp cloud account json credentials", + "type": "string" + }, + "jsonCredentialsFileUid": { + "description": "Reference of the credentials stored in the file", + "type": "string" + } + }, + "type": "object" + }, + "v1GcpAccounts": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1GcpAccount" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1GcpCloudAccountValidateEntity": { + "description": "Gcp cloud account spec", + "properties": { + "spec": { + "$ref": "#/definitions/v1GcpAccountValidateSpec" + } + }, + "type": "object" + }, + "v1GcpCloudClusterConfigEntity": { + "description": "Gcp cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1GcpClusterConfig" + } + }, + "type": "object" + }, + "v1GcpCloudConfig": { + "description": "GcpCloudConfig is the Schema for the gcpcloudconfigs API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1GcpCloudConfigSpec" + }, + "status": { + "$ref": "#/definitions/v1GcpCloudConfigStatus" + } + }, + "type": "object" + }, + "v1GcpCloudConfigSpec": { + "description": "GcpCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cloudAccountRef should point to the secret which contains GcpCloudAccount" + }, + "clusterConfig": { + "$ref": "#/definitions/v1GcpClusterConfig" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1GcpMachinePoolConfig" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1GcpCloudConfigStatus": { + "description": "GcpCloudConfigStatus defines the observed state of GcpCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "description": "spectroAnsibleProvisioner: should be added only once, subsequent recocile will use the same provisioner SpectroAnsiblePacker bool `json:\"spectroAnsiblePacker,omitempty\"`", + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "images": { + "$ref": "#/definitions/v1GcpImage", + "description": "Images array items should be 1-to-1 mapping to Spec.MachinePoolConfig" + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "roleDigest": { + "additionalProperties": { + "type": "string" + }, + "description": "this map will be for ansible roles present in each pack", + "type": "object" + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + }, + "type": "object" + }, + "v1GcpClusterConfig": { + "description": "Cluster level configuration for gcp cloud and applicable for all the machine pools", + "properties": { + "managedClusterConfig": { + "$ref": "#/definitions/v1GcpManagedClusterConfig" + }, + "network": { + "description": "NetworkName if empty would create VPC Network in auto mode. If provided, custom VPC network will be used", + "type": "string" + }, + "project": { + "description": "Name of the project in which cluster is to be deployed", + "type": "string" + }, + "region": { + "description": "GCP region for the cluster", + "type": "string" + } + }, + "required": [ + "project", + "region" + ], + "type": "object" + }, + "v1GcpImage": { + "description": "Refers to GCP image", + "properties": { + "name": { + "type": "string" + }, + "os": { + "type": "string" + }, + "region": { + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1GcpImageUrlEntity": { + "description": "Gcp image url entity", + "properties": { + "imageFamily": { + "description": "The name of the image family to which this image belongs", + "type": "string" + }, + "imageUrl": { + "description": "Server-defined URL for the resource", + "type": "string" + }, + "name": { + "description": "Name of the resource", + "type": "string" + } + }, + "type": "object" + }, + "v1GcpInstanceTypes": { + "description": "Retrieves a list of GCP instance types", + "properties": { + "instanceTypes": { + "description": "List of GCP instance types", + "items": { + "$ref": "#/definitions/v1InstanceType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1GcpMachine": { + "description": "GCP cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1GcpMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + }, + "type": "object" + }, + "v1GcpMachinePoolCloudConfigEntity": { + "properties": { + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "instanceType": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "format": "int64", + "type": "integer" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnets": { + "items": { + "$ref": "#/definitions/v1GcpSubnetEntity" + }, + "type": "array" + } + }, + "required": [ + "instanceType" + ], + "type": "object" + }, + "v1GcpMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "instanceConfig": { + "$ref": "#/definitions/v1InstanceConfig" + }, + "instanceType": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "format": "int64", + "type": "integer" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "subnet": { + "description": "Subnet specifies the subnetwork to use for given instance. If not specified, the first subnet from the cluster region and network is used", + "type": "string" + }, + "subnetIds": { + "additionalProperties": { + "type": "string" + }, + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"us-west-2d\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first private subnet from the AZ will be picked up for deployment", + "type": "object" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + }, + "required": [ + "isControlPlane", + "instanceType" + ], + "type": "object" + }, + "v1GcpMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1GcpMachinePoolCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + }, + "v1GcpMachineSpec": { + "description": "GCP cloud VM definition spec", + "properties": { + "image": { + "type": "string" + }, + "instanceConfig": { + "$ref": "#/definitions/v1InstanceConfig" + }, + "instanceType": { + "type": "string" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1GcpNic" + }, + "type": "array" + }, + "project": { + "type": "string" + }, + "region": { + "type": "string" + }, + "rootDeviceSize": { + "format": "int64", + "type": "integer" + }, + "zone": { + "type": "string" + } + }, + "required": [ + "instanceType" + ], + "type": "object" + }, + "v1GcpMachines": { + "description": "GCP machine list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1GcpMachine" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1GcpManagedClusterConfig": { + "description": "GCP managed cluster config", + "properties": { + "enableAutoPilot": { + "description": "EnableAutopilot indicates whether to enable autopilot for this GKE cluster", + "type": "boolean" + }, + "location": { + "description": "Can be Region or Zone", + "type": "string" + } + }, + "type": "object" + }, + "v1GcpNetwork": { + "description": "GCP network enity is a virtual version of a physical network", + "properties": { + "name": { + "description": "GCP network name", + "type": "string" + }, + "subnets": { + "description": "List of GCP subnet", + "items": { + "$ref": "#/definitions/v1GcpSubnet" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1GcpNetworks": { + "description": "List of GCP networks", + "properties": { + "networks": { + "items": { + "$ref": "#/definitions/v1GcpNetwork" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1GcpNic": { + "description": "GCP network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "publicIp": { + "type": "string" + } + }, + "type": "object" + }, + "v1GcpProject": { + "description": "GCP project organizes all Google Cloud resources", + "properties": { + "id": { + "description": "GCP project id", + "type": "string" + }, + "name": { + "description": "GCP project name", + "type": "string" + } + }, + "type": "object" + }, + "v1GcpProjects": { + "description": "List of GCP Projects", + "properties": { + "projects": { + "description": "List of GCP Projects", + "items": { + "$ref": "#/definitions/v1GcpProject" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1GcpRegion": { + "description": "Geographical region made up of zones where you can host your GCP resources", + "properties": { + "name": { + "description": "GCP region name", + "type": "string" + }, + "status": { + "description": "GCP region status", + "type": "string" + } + }, + "type": "object" + }, + "v1GcpRegions": { + "description": "List of GCP Regions", + "properties": { + "regions": { + "items": { + "$ref": "#/definitions/v1GcpRegion" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1GcpStorageConfig": { + "description": "GCP storage config object", + "properties": { + "bucketName": { + "description": "GCP storage bucket name", + "type": "string" + }, + "credentials": { + "$ref": "#/definitions/v1.GcpAccountEntitySpec", + "description": "GCP cloud account credentials" + }, + "projectId": { + "description": "GCP project id", + "type": "string" + } + }, + "required": [ + "bucketName", + "credentials" + ], + "type": "object" + }, + "v1GcpStorageTypes": { + "description": "List of GCP storage types", + "properties": { + "storageTypes": { + "items": { + "$ref": "#/definitions/v1StorageType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1GcpSubnet": { + "description": "Subnets are regional resources, and have IP address ranges associated with them", + "properties": { + "id": { + "description": "GCP subnet id", + "type": "string" + }, + "name": { + "description": "GCP subnet name", + "type": "string" + } + }, + "type": "object" + }, + "v1GcpSubnetEntity": { + "properties": { + "az": { + "type": "string" + }, + "id": { + "type": "string" + } + } + }, + "v1GcpZone": { + "description": "A zone is a deployment area for Google Cloud resources within a region", + "properties": { + "name": { + "description": "GCP zone name", + "type": "string" + } + }, + "type": "object" + }, + "v1GcpZones": { + "description": "List of GCP zones", + "properties": { + "zones": { + "items": { + "$ref": "#/definitions/v1GcpZone" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1GenericCloudClusterConfigEntity": { + "description": "Generic cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1GenericClusterConfig" + } + }, + "type": "object" + }, + "v1GenericCloudConfig": { + "description": "Generic CloudConfig for all cloud types", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1GenericCloudConfigSpec" + } + } + }, + "v1GenericCloudConfigSpec": { + "description": "Generic CloudConfig spec for all cloud types", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "Cloud account reference is optional and dynamically handled based on the kind" + }, + "clusterConfig": { + "$ref": "#/definitions/v1GenericClusterConfig" + }, + "edgeHostRefs": { + "description": "Appliances (Edge Host) uids", + "items": { + "$ref": "#/definitions/v1ObjectReference" + }, + "type": "array" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1GenericMachinePoolConfig" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1GenericClusterConfig": { + "description": "Generic cluster config", + "properties": { + "instanceType": { + "$ref": "#/definitions/v1GenericInstanceType" + }, + "region": { + "description": "cluster region information", + "type": "string" + } + }, + "type": "object" + }, + "v1GenericInstanceType": { + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB", + "format": "int32", + "type": "integer" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "format": "int64", + "type": "integer" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1GenericMachine": { + "description": "Generic cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1GenericMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + } + }, + "v1GenericMachinePoolConfig": { + "properties": { + "instanceType": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "rootDeviceSize": { + "description": "Size of root volume in GB. Default is 30GB", + "format": "int64", + "type": "integer" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + }, + "required": [ + "isControlPlane" + ], + "type": "object" + }, + "v1GenericMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1GenericClusterConfig" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + } + }, + "v1GenericMachineSpec": { + "description": "Generic cloud VM definition spec", + "properties": { + "hostName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "$ref": "#/definitions/v1GenericInstanceType" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1GenericNic" + }, + "type": "array" + }, + "sshKeyName": { + "type": "string" + } + } + }, + "v1GenericMachines": { + "description": "Generic machine list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1GenericMachine" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1GenericNic": { + "description": "Generic network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "publicIp": { + "type": "string" + } + }, + "type": "object" + }, + "v1GeolocationLatlong": { + "description": "Geolocation Latlong entity", + "properties": { + "latitude": { + "description": "Latitude of a resource", + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "longitude": { + "description": "Longitude of a resource", + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1GitRepoFileContent": { + "properties": { + "content": { + "type": "string" + }, + "name": { + "type": "string" + }, + "path": { + "type": "string" + }, + "repoName": { + "type": "string" + }, + "sha": { + "type": "string" + } + }, + "type": "object" + }, + "v1GrpcClientMonitoringData": { + "properties": { + "clientUid": { + "type": "string" + }, + "receivedBroadcastCount": { + "type": "integer" + }, + "receivedPublishedCount": { + "type": "integer" + }, + "sentBroadcastCount": { + "type": "integer" + }, + "sentPublishedCount": { + "type": "integer" + }, + "subjects": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1GrpcConfiguration": { + "description": "Describes the response that contains the grpc configuration to establish connection", + "properties": { + "preferredServer": { + "$ref": "#/definitions/v1GrpcEndpoint" + }, + "servers": { + "items": { + "$ref": "#/definitions/v1GrpcEndpoint" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1GrpcEndpoint": { + "properties": { + "endpoint": { + "description": "Describes the URL where the client has to connect to the grpc server", + "type": "string" + }, + "tls": { + "description": "Describes the Grpc tls config which client will use to make a request to the grpc server", + "properties": { + "caCert": { + "type": "string" + }, + "enabled": { + "type": "boolean" + }, + "insecureSkipVerify": { + "type": "boolean" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1GrpcServerMonitoringData": { + "properties": { + "clients": { + "additionalProperties": { + "$ref": "#/definitions/v1GrpcClientMonitoringData" + }, + "type": "object" + }, + "isError": { + "type": "boolean" + }, + "messageLogs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "subjects": { + "additionalProperties": { + "$ref": "#/definitions/v1GrpcSubjectMonitoringData" + }, + "type": "object" + }, + "totalClients": { + "type": "integer" + }, + "totalSubjects": { + "type": "integer" + } + }, + "type": "object" + }, + "v1GrpcServersMonitoringData": { + "properties": { + "servers": { + "additionalProperties": { + "$ref": "#/definitions/v1GrpcServerMonitoringData" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1GrpcSubjectMonitoringData": { + "properties": { + "broadcastCount": { + "type": "integer" + }, + "clients": { + "items": { + "type": "string" + }, + "type": "array" + }, + "publishedCount": { + "type": "integer" + }, + "subject": { + "type": "string" + } + }, + "type": "object" + }, + "v1HealthCheck": { + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1HealthLocks": { + "properties": { + "expiredLocks": { + "items": { + "$ref": "#/definitions/v1Lock" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1HealthPing": { + "properties": { + "msg": { + "type": "string" + } + }, + "type": "object" + }, + "v1HelmChartOption": { + "description": "If chart options are provided then the specified chart is validated first and synced immediately. If the specified chart is not found in the specified registry then creation is cancelled.", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1HelmRegistries": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1HelmRegistry" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1HelmRegistriesSummary": { + "description": "Helm Registries Summary", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1HelmRegistrySummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1HelmRegistry": { + "description": "Helm registry information", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1HelmRegistrySpec" + }, + "status": { + "$ref": "#/definitions/v1HelmRegistryStatus" + } + }, + "type": "object" + }, + "v1HelmRegistryCreateOption": { + "description": "Helm registry create options", + "properties": { + "charts": { + "items": { + "$ref": "#/definitions/v1HelmChartOption" + }, + "type": "array", + "uniqueItems": true + }, + "skipSync": { + "type": "boolean" + } + }, + "type": "object" + }, + "v1HelmRegistryEntity": { + "description": "Helm registry information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1HelmRegistrySpecEntity" + } + }, + "type": "object" + }, + "v1HelmRegistrySpec": { + "description": "Helm registry credentials spec", + "properties": { + "auth": { + "$ref": "#/definitions/v1RegistryAuth" + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "registryUid": { + "description": "Helm registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + }, + "required": [ + "endpoint", + "auth" + ], + "type": "object" + }, + "v1HelmRegistrySpecEntity": { + "description": "Helm registry credentials spec", + "properties": { + "auth": { + "$ref": "#/definitions/v1RegistryAuth" + }, + "createOption": { + "$ref": "#/definitions/v1HelmRegistryCreateOption" + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "scope": { + "type": "string" + } + }, + "required": [ + "endpoint", + "auth" + ], + "type": "object" + }, + "v1HelmRegistrySpecSummary": { + "description": "Helm Registry spec summary", + "properties": { + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "scope": { + "type": "string" + } + }, + "type": "object" + }, + "v1HelmRegistryStatus": { + "description": "Status of the helm registry", + "properties": { + "helmSyncStatus": { + "$ref": "#/definitions/v1RegistrySyncStatus" + } + }, + "type": "object" + }, + "v1HelmRegistryStatusSummary": { + "description": "Helm registry status summary", + "properties": { + "sync": { + "$ref": "#/definitions/v1RegistrySyncStatus" + } + } + }, + "v1HelmRegistrySummary": { + "description": "Helm Registry summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1HelmRegistrySpecSummary" + }, + "status": { + "$ref": "#/definitions/v1HelmRegistryStatusSummary" + } + }, + "type": "object" + }, + "v1HostClusterConfig": { + "properties": { + "clusterEndpoint": { + "$ref": "#/definitions/v1HostClusterEndpoint", + "description": "host cluster configuration" + }, + "clusterGroup": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cluster group reference" + }, + "hostCluster": { + "$ref": "#/definitions/v1ObjectReference", + "description": "host cluster reference" + }, + "isHostCluster": { + "default": false, + "description": "is enabled as host cluster", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1HostClusterConfigEntity": { + "properties": { + "hostClusterConfig": { + "$ref": "#/definitions/v1HostClusterConfig" + } + }, + "type": "object" + }, + "v1HostClusterConfigResponse": { + "properties": { + "clusterGroup": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cluster group reference" + } + } + }, + "v1HostClusterEndpoint": { + "properties": { + "config": { + "$ref": "#/definitions/v1HostClusterEndpointConfig" + }, + "type": { + "description": "is enabled as host cluster", + "enum": [ + "Ingress", + "LoadBalancer" + ], + "type": "string" + } + } + }, + "v1HostClusterEndpointConfig": { + "properties": { + "ingressConfig": { + "$ref": "#/definitions/v1IngressConfig" + }, + "loadBalancerConfig": { + "$ref": "#/definitions/v1LoadBalancerConfig" + } + } + }, + "v1HttpPatch": { + "properties": { + "from": { + "description": "A path to the pointer from which reference will be taken", + "type": "string" + }, + "op": { + "description": "The operation to be performed", + "enum": [ + "add", + "remove", + "replace", + "move", + "copy" + ], + "type": "string" + }, + "path": { + "description": "A path to the pointer on which operation will be done", + "type": "string" + }, + "value": { + "description": "The value to be used within the operations.", + "type": "object" + } + }, + "required": [ + "op", + "path" + ], + "type": "object" + }, + "v1HubbleInfo": { + "properties": { + "apiEndpoint": { + "type": "string" + }, + "apiPort": { + "type": "string" + }, + "natsEndpoint": { + "type": "string" + }, + "uiEndpoint": { + "type": "string" + }, + "uiPort": { + "type": "string" + } + }, + "type": "object" + }, + "v1IPPool": { + "description": "IPPool defines static IPs available. Gateway, Prefix, Nameserver, if defined, will be default values for all Pools", + "properties": { + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "$ref": "#/definitions/v1Nameserver", + "description": "Nameserver provide information for dns resolvation" + }, + "pools": { + "description": "Pools contains the list of IP addresses pools", + "items": { + "$ref": "#/definitions/v1Pool" + }, + "type": "array" + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "format": "int32", + "type": "integer" + }, + "uid": { + "description": "UID is the UID of this IPPool, used by Hubble", + "type": "string" + } + }, + "type": "object" + }, + "v1IdentityProvider": { + "description": "Describes a predefined Identity Provider (IDP)", + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1IdentityProviders": { + "description": "Describes a list of predefined Identity Provider (IDP)", + "items": { + "$ref": "#/definitions/v1IdentityProvider" + }, + "type": "array", + "uniqueItems": true + }, + "v1ImportClusterConfig": { + "properties": { + "importMode": { + "description": "If the importMode is empty then cluster is imported with full permission mode. By default importMode is empty and cluster is imported in full permission mode.", + "enum": [ + "read-only" + ], + "type": "string" + }, + "proxy": { + "$ref": "#/definitions/v1ClusterProxySpec", + "description": "Cluster proxy settings" + } + }, + "type": "object" + }, + "v1ImportEdgeHostConfig": { + "properties": { + "edgeHostUid": { + "description": "Deprecated. Use 'edgeHostUids' field", + "type": "string" + }, + "edgeHostUids": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1InfraLBConfig": { + "properties": { + "apiServerLB": { + "$ref": "#/definitions/v1LoadBalancerSpec", + "description": "APIServerLB is the configuration for the control-plane load balancer." + } + }, + "type": "object" + }, + "v1IngressConfig": { + "description": "Ingress configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "host": { + "type": "string" + }, + "port": { + "format": "int64", + "type": "integer" + } + } + }, + "v1InstallerStatus": { + "description": "Spectro cluster installer status", + "properties": { + "clusterMigration": { + "$ref": "#/definitions/v1SpectroClusterMigration" + }, + "clusterState": { + "type": "string" + }, + "endpoint": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1InstanceConfig": { + "properties": { + "category": { + "type": "string" + }, + "cpuSet": { + "format": "int64", + "type": "integer" + }, + "diskGiB": { + "format": "int64", + "type": "integer" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB", + "format": "int64", + "type": "integer" + }, + "name": { + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine", + "format": "int32", + "type": "integer" + } + } + }, + "v1InstanceCost": { + "description": "Instance cost entity", + "properties": { + "price": { + "description": "Array of cloud instance price", + "items": { + "$ref": "#/definitions/v1InstancePrice" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1InstancePrice": { + "description": "Cloud instance price", + "properties": { + "onDemand": { + "description": "OnDemand price of instance", + "format": "double", + "type": "number" + }, + "os": { + "description": "Os associated with instance price. Allowed values - [linux, windows]", + "enum": [ + "linux", + "windows" + ], + "type": "string" + }, + "spot": { + "description": "Spot price of instance", + "format": "double", + "type": "number" + } + }, + "type": "object" + }, + "v1InstanceType": { + "description": "Cloud Instance type details", + "properties": { + "category": { + "description": "Category of instance type", + "type": "string", + "x-go-name": "Category" + }, + "cost": { + "$ref": "#/definitions/v1InstanceCost" + }, + "cpu": { + "description": "Cpu of instance type", + "format": "double", + "type": "number", + "x-go-name": "Cpu" + }, + "gpu": { + "description": "Gpu of instance type", + "format": "double", + "type": "number", + "x-go-name": "Gpu" + }, + "memory": { + "description": "Memory of instance type", + "format": "double", + "type": "number", + "x-go-name": "Memory" + }, + "nonSupportedZones": { + "description": "Non supported zones of the instance in a particular region", + "items": { + "type": "string" + }, + "type": "array" + }, + "price": { + "description": "Price of instance type", + "format": "double", + "type": "number", + "x-go-name": "Price" + }, + "supportedArchitectures": { + "description": "Supported architecture of the instance", + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "description": "Type of instance type", + "type": "string", + "x-go-name": "Type" + } + }, + "type": "object" + }, + "v1Invoice": { + "description": "Invoice object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1InvoiceSpec" + }, + "status": { + "$ref": "#/definitions/v1InvoiceStatus" + } + } + }, + "v1InvoiceBillingPeriod": { + "description": "Invoice billing period object", + "properties": { + "end": { + "$ref": "#/definitions/v1Time" + }, + "start": { + "$ref": "#/definitions/v1Time" + } + } + }, + "v1InvoiceCredits": { + "description": "Invoice credits object", + "properties": { + "alloyFreeCredits": { + "description": "Credits allocated for import clusters", + "format": "int64", + "type": "number" + }, + "pureFreeCredits": { + "description": "Credits allocated for managed clusters", + "format": "int64", + "type": "number" + } + } + }, + "v1InvoicePlan": { + "description": "Invoice plan object", + "properties": { + "freeCredits": { + "description": "List of free credits", + "items": { + "$ref": "#/definitions/v1InvoicePlanCredit" + }, + "type": "array" + }, + "plantype": { + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ], + "type": "string" + }, + "slaCredits": { + "description": "List of SLA credits", + "items": { + "$ref": "#/definitions/v1InvoicePlanCredit" + }, + "type": "array" + } + } + }, + "v1InvoicePlanCredit": { + "description": "Invoice plan credit object", + "properties": { + "planCredit": { + "$ref": "#/definitions/v1PlanCredit" + }, + "totalCpuCoreHours": { + "description": "Total used cpu core hours", + "format": "int64", + "type": "number" + } + } + }, + "v1InvoiceProduct": { + "description": "Product invoice object", + "properties": { + "alloy": { + "$ref": "#/definitions/v1InvoiceProductData" + }, + "pure": { + "$ref": "#/definitions/v1InvoiceProductData" + } + } + }, + "v1InvoiceProductData": { + "description": "Product invoice data", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "format": "int64", + "type": "number" + }, + "amount": { + "description": "Total amount", + "format": "float64", + "type": "number" + }, + "billableCredits": { + "description": "Credits to be billed", + "format": "float64", + "type": "number" + }, + "breachedCredits": { + "description": "Credits that are exceeds the allocated credits", + "format": "float64", + "type": "number" + }, + "discount": { + "description": "Applied discount", + "format": "int64", + "type": "number" + }, + "freeCredits": { + "description": "Allocated free credits", + "format": "int64", + "type": "number" + }, + "overageLimitPercentage": { + "description": "Allowed overage limit in percentage", + "format": "int8", + "type": "number" + }, + "tierName": { + "description": "Tier name", + "type": "string" + }, + "tierPrice": { + "description": "Tier price", + "format": "float64", + "type": "number" + }, + "totalUsedCredits": { + "description": "Total used credits", + "format": "float64", + "type": "number" + }, + "usedCredits": { + "description": "Used credits", + "format": "float64", + "type": "number" + } + } + }, + "v1InvoiceProject": { + "description": "Invoice project object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "format": "float64", + "type": "number" + }, + "projectName": { + "description": "Name of the project", + "type": "string" + }, + "projectUid": { + "description": "Project identifier", + "type": "string" + }, + "usage": { + "$ref": "#/definitions/v1ProjectUsage", + "description": "Usage by the project" + } + } + }, + "v1InvoiceRetryRequest": { + "description": "Retry invoice request object", + "properties": { + "customerId": { + "description": "Customer invoice uid", + "type": "string" + }, + "invoiceUid": { + "description": "Invoice uid", + "type": "string" + }, + "paymentMethodId": { + "description": "Payment method uid", + "type": "string" + } + } + }, + "v1InvoiceSpec": { + "description": "Invoice specification", + "properties": { + "address": { + "$ref": "#/definitions/v1Address" + }, + "billingPeriod": { + "$ref": "#/definitions/v1InvoiceBillingPeriod" + }, + "credits": { + "$ref": "#/definitions/v1InvoiceCredits" + }, + "envType": { + "description": "Environment type [Trial,MonthlyOnDemand,AnnualSubscription,OnPrem]", + "type": "string" + }, + "month": { + "$ref": "#/definitions/v1Time", + "description": "Month for which invoice is generated" + }, + "paymentUnit": { + "enum": [ + "usd" + ], + "type": "string" + }, + "plan": { + "$ref": "#/definitions/v1InvoicePlan" + } + } + }, + "v1InvoiceState": { + "description": "Invoice state object", + "properties": { + "paymentMsg": { + "description": "Payment status message", + "type": "string" + }, + "state": { + "enum": [ + "Paid", + "PaymentPending", + "PaymentInProgress", + "PaymentFailed" + ], + "type": "string" + }, + "timestamp": { + "$ref": "#/definitions/v1Time", + "description": "Time on which the state has been updated" + } + } + }, + "v1InvoiceStatus": { + "description": "Invoice Status", + "properties": { + "billableAmount": { + "description": "Total billable amount", + "format": "float64", + "type": "number" + }, + "productInvoice": { + "$ref": "#/definitions/v1InvoiceProduct" + }, + "projects": { + "description": "List of project invoices", + "items": { + "$ref": "#/definitions/v1InvoiceProject" + }, + "type": "array" + }, + "states": { + "description": "List of invoice states", + "items": { + "$ref": "#/definitions/v1InvoiceState" + }, + "type": "array", + "uniqueItems": true + }, + "stripeInvoiceId": { + "description": "Stripe invoice uid", + "type": "string" + } + } + }, + "v1Invoices": { + "description": "List of invoices", + "properties": { + "invoices": { + "items": { + "$ref": "#/definitions/v1Invoice" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "invoices" + ], + "type": "object" + }, + "v1IpPoolEntity": { + "description": "IP Pool entity definition", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "pool": { + "$ref": "#/definitions/v1Pool" + }, + "priavetGatewayUid": { + "type": "string" + }, + "restrictToSingleCluster": { + "description": "if true, restricts this IP pool to be used by single cluster at any time", + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "status": { + "$ref": "#/definitions/v1IpPoolStatus" + } + }, + "type": "object" + }, + "v1IpPoolInputEntity": { + "description": "IP Pool input entity definition", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "pool": { + "$ref": "#/definitions/v1Pool" + }, + "restrictToSingleCluster": { + "description": "if true, restricts this IP pool to be used by single cluster at any time", + "type": "boolean" + } + }, + "required": [ + "pool" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1IpPoolStatus": { + "description": "IP Pool status", + "properties": { + "allottedIps": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "associatedClusters": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "inUse": { + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1IpPools": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1IpPoolEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1JWKResponse": { + "properties": { + "alg": { + "description": "The \"alg\" (algorithm) parameter identifies the algorithm intended for use with the key", + "type": "string" + }, + "e": { + "type": "string" + }, + "key_ops": { + "description": "The \"key_ops\" (key operations) parameter identifies the operation(s) for which the key is intended to be used", + "type": "string" + }, + "kid": { + "description": "The \"kid\" (key ID) parameter is used to match a specific key", + "type": "string" + }, + "kty": { + "description": "The \"kty\" (key type) parameter identifies the cryptographic algorithm family used with the key, such as \"RSA\" or \"EC\"", + "type": "string" + }, + "n": { + "type": "string" + }, + "use": { + "description": "The \"use\" (public key use) parameter identifies the intended use of the public key", + "type": "string" + } + }, + "type": "object" + }, + "v1JWKSetResponse": { + "properties": { + "keys": { + "description": "The value of the \"keys\" parameter is an array of JWK values", + "items": { + "$ref": "#/definitions/v1JWKResponse" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1JetAuthKey": { + "properties": { + "authKey": { + "type": "string" + } + }, + "type": "object" + }, + "v1JetAuthKeyResponse": { + "properties": { + "authKey": { + "type": "string" + } + }, + "type": "object" + }, + "v1JetServiceLogin": { + "description": "jet service login input", + "properties": { + "authKey": { + "description": "authToken helps in two step verification for the authorization.", + "type": "string" + }, + "edgeHostUid": { + "type": "string" + }, + "hostClusterUid": { + "type": "string" + }, + "isSystem": { + "type": "boolean" + }, + "jetUid": { + "type": "string" + }, + "overlordUid": { + "type": "string" + }, + "serviceVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1KubeBenchEntity": { + "description": "KubeBench response", + "properties": { + "reports": { + "additionalProperties": { + "$ref": "#/definitions/v1KubeBenchReportEntity" + }, + "type": "object" + }, + "requestUid": { + "type": "string" + }, + "status": { + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ], + "type": "string" + } + }, + "required": [ + "requestUid", + "status", + "reports" + ] + }, + "v1KubeBenchLog": { + "description": "Compliance Scan KubeBench Log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "v1KubeBenchLogEntity": { + "description": "KubeBench log", + "properties": { + "description": { + "type": "string" + }, + "expected": { + "type": "string" + }, + "remediation": { + "type": "string" + }, + "state": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "v1KubeBenchReport": { + "description": "Compliance Scan KubeBench Report", + "properties": { + "fail": { + "format": "int32", + "type": "integer" + }, + "info": { + "format": "int32", + "type": "integer" + }, + "logs": { + "items": { + "$ref": "#/definitions/v1KubeBenchLog" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "pass": { + "format": "int32", + "type": "integer" + }, + "time": { + "$ref": "#/definitions/v1Time" + }, + "type": { + "type": "string" + }, + "warn": { + "format": "int32", + "type": "integer" + } + } + }, + "v1KubeBenchReportEntity": { + "description": "KubeBench report", + "properties": { + "fail": { + "format": "int32", + "type": "integer" + }, + "info": { + "format": "int32", + "type": "integer" + }, + "logs": { + "items": { + "$ref": "#/definitions/v1KubeBenchLogEntity" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "pass": { + "format": "int32", + "type": "integer" + }, + "time": { + "$ref": "#/definitions/v1Time" + }, + "type": { + "type": "string" + }, + "warn": { + "format": "int32", + "type": "integer" + } + } + }, + "v1KubeHunterEntity": { + "description": "KubeHunter response", + "properties": { + "reports": { + "additionalProperties": { + "$ref": "#/definitions/v1KubeHunterReportEntity" + }, + "type": "object" + }, + "requestUid": { + "type": "string" + }, + "status": { + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ], + "type": "string" + } + }, + "required": [ + "requestUid", + "status", + "reports" + ] + }, + "v1KubeHunterLog": { + "description": "Compliance Scan KubeHunter Log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + }, + "v1KubeHunterLogEntity": { + "description": "KubeHunter log", + "properties": { + "description": { + "type": "string" + }, + "evidence": { + "type": "string" + }, + "reference": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "testId": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + }, + "v1KubeHunterReport": { + "description": "Compliance Scan KubeHunter Report", + "properties": { + "logs": { + "items": { + "$ref": "#/definitions/v1KubeHunterLog" + }, + "type": "array" + }, + "time": { + "$ref": "#/definitions/v1Time" + }, + "vulnerabilites": { + "$ref": "#/definitions/v1KubeHunterVulnerabilities" + } + } + }, + "v1KubeHunterReportEntity": { + "description": "KubeHunter report", + "properties": { + "logs": { + "items": { + "$ref": "#/definitions/v1KubeHunterLogEntity" + }, + "type": "array" + }, + "time": { + "$ref": "#/definitions/v1Time" + }, + "vulnerabilities": { + "$ref": "#/definitions/v1KubeHunterVulnerabilityDataEntity" + } + } + }, + "v1KubeHunterVulnerabilities": { + "description": "Compliance Scan KubeHunter Vulnerabilities", + "properties": { + "high": { + "format": "int32", + "type": "integer" + }, + "low": { + "format": "int32", + "type": "integer" + }, + "medium": { + "format": "int32", + "type": "integer" + } + } + }, + "v1KubeHunterVulnerabilityDataEntity": { + "description": "KubeHunter vulnerability data", + "properties": { + "high": { + "format": "int32", + "type": "integer" + }, + "low": { + "format": "int32", + "type": "integer" + }, + "medium": { + "format": "int32", + "type": "integer" + } + } + }, + "v1KubeMeta": { + "description": "Spectro cluster kube meta", + "properties": { + "hasKubeConfig": { + "type": "boolean", + "x-omitempty": false + }, + "hasKubeConfigClient": { + "type": "boolean", + "x-omitempty": false + }, + "hasManifest": { + "type": "boolean", + "x-omitempty": false + }, + "kubernetesVersion": { + "type": "string" + } + }, + "type": "object" + }, + "v1LibvirtCloudClusterConfigEntity": { + "description": "Libvirt cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1LibvirtClusterConfig" + } + }, + "type": "object" + }, + "v1LibvirtCloudConfig": { + "description": "LibvirtCloudConfig is the Schema for the libvirtcloudconfigs API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1LibvirtCloudConfigSpec" + }, + "status": { + "$ref": "#/definitions/v1LibvirtCloudConfigStatus" + } + }, + "type": "object" + }, + "v1LibvirtCloudConfigSpec": { + "description": "LibvirtCloudConfigSpec defines the desired state of LibvirtCloudConfig", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1LibvirtClusterConfig" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1LibvirtMachinePoolConfig" + }, + "type": "array" + } + }, + "required": [ + "clusterConfig", + "machinePoolConfig" + ], + "type": "object" + }, + "v1LibvirtCloudConfigStatus": { + "properties": { + "conditions": { + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "nodeImages": { + "description": "NodeImages are the list of images generated on all the LibvirtHosts", + "items": { + "$ref": "#/definitions/v1LibvirtImage" + }, + "type": "array" + }, + "sourceImageId": { + "description": "SourceImageId can be from packref's annotations or from pack.json", + "type": "string" + } + }, + "type": "object" + }, + "v1LibvirtClusterConfig": { + "properties": { + "controlPlaneEndpoint": { + "$ref": "#/definitions/v1LibvirtControlPlaneEndPoint", + "description": "ControlPlaneEndpoint is the control plane endpoint, which can be an IP or FQDN" + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list", + "items": { + "type": "string" + }, + "type": "array" + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys to access the vms as a 'spectro' user", + "items": { + "type": "string" + }, + "type": "array" + }, + "staticIp": { + "description": "StaticIP indicates if IP allocation type is static IP. DHCP is the default allocation type", + "type": "boolean" + } + }, + "type": "object" + }, + "v1LibvirtControlPlaneEndPoint": { + "properties": { + "ddnsSearchDomain": { + "description": "DDNSSearchDomain is the search domain used for resolving IP addresses when the EndpointType is DDNS. This search domain is appended to the generated Hostname to obtain the complete DNS name for the endpoint. If Host is already a DDNS FQDN, DDNSSearchDomain is not required", + "type": "string" + }, + "host": { + "description": "Host is FQDN(DDNS) or IP", + "type": "string" + }, + "type": { + "description": "Type indicates DDNS or VIP", + "type": "string" + } + }, + "type": "object" + }, + "v1LibvirtDiskSpec": { + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "managed": { + "description": "Managed indicates if the disk is a persistent or not. By default its false indicating all disks are ephemeral.", + "type": "boolean" + }, + "sizeInGB": { + "description": "SizeInGB is the target size in GB of the disk to be added", + "format": "int32", + "type": "integer" + } + }, + "required": [ + "sizeInGB" + ], + "type": "object" + }, + "v1LibvirtHostIdentity": { + "properties": { + "caCert": { + "description": "CACert is the client CA certificate", + "type": "string" + }, + "mode": { + "description": "Mode indicates a system or session connection to the host", + "type": "string" + }, + "socketPath": { + "description": "SocketPath is an optional path to the socket on the host, if not using defaults", + "type": "string" + }, + "sshSecret": { + "$ref": "#/definitions/v1EdgeHostSSHSecret", + "description": "SSHSecrets to the secret containing ssh-username" + } + }, + "type": "object" + }, + "v1LibvirtImage": { + "description": "LibvirtImage is the Image generated on the LibvirtHost", + "properties": { + "hostID": { + "description": "HostID is the ID of the LibvirtHost", + "type": "string" + }, + "imageName": { + "description": "ImageName is the name of the Libvirt image", + "type": "string" + }, + "storagePool": { + "description": "StoragePool is the name of the storagePool where is image is located", + "type": "string" + } + }, + "type": "object" + }, + "v1LibvirtInstanceType": { + "description": "LibvirtInstanceType defines the instance configuration for a virtual machine", + "properties": { + "cpuPassthroughSpec": { + "$ref": "#/definitions/v1CPUPassthroughSpec", + "description": "Defines CPU Passthrough Spec. A not null value enables CPU Passthrough for the libvirt domain. Further cache passthrough can be enabled with the CPU passthrough spec." + }, + "cpuset": { + "description": "CPUSet defines cpuset for an instance which allows allocation specific set of cpus E.g cpuset=\"1-4,^3,6\" See https://libvirt.org/formatdomain.html#cpu-allocation", + "type": "string" + }, + "gpuConfig": { + "$ref": "#/definitions/v1GPUConfig", + "description": "GPU configuration" + }, + "memoryInMB": { + "description": "MemoryinMB is the memory in megabytes", + "format": "int32", + "type": "integer" + }, + "numCPUs": { + "description": "NumCPUs is the number of CPUs", + "format": "int32", + "type": "integer" + } + }, + "required": [ + "numCPUs", + "memoryInMB" + ], + "type": "object" + }, + "v1LibvirtMachine": { + "description": "Libvirt cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1LibvirtMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + } + }, + "v1LibvirtMachinePoolCloudConfigEntity": { + "properties": { + "instanceType": { + "$ref": "#/definitions/v1LibvirtInstanceType" + }, + "nonRootDisksInGB": { + "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "items": { + "$ref": "#/definitions/v1LibvirtDiskSpec" + }, + "type": "array" + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "items": { + "$ref": "#/definitions/v1LibvirtPlacementEntity" + }, + "type": "array", + "uniqueItems": true + }, + "rootDiskInGB": { + "description": "RootDiskInGB is the size of a vm's root disk, in GiB", + "format": "int32", + "type": "integer" + }, + "xslTemplate": { + "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", + "type": "string" + } + }, + "required": [ + "instanceType", + "placements", + "rootDiskInGB" + ] + }, + "v1LibvirtMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "instanceType": { + "$ref": "#/definitions/v1LibvirtInstanceType", + "description": "InstanceType defines the instance configuration of the vms in the machine pool" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "nonRootDisksInGB": { + "description": "NonRootDisksInGB is the list of additional disks, if required, in GB", + "items": { + "$ref": "#/definitions/v1LibvirtDiskSpec" + }, + "type": "array" + }, + "placements": { + "description": "Placements defines the configurations of the failureDomains(hosts) for the machine pool", + "items": { + "$ref": "#/definitions/v1LibvirtPlacementConfig" + }, + "type": "array" + }, + "rootDiskInGB": { + "description": "RootDiskInGB is the size of a vm's root disk, in GB", + "format": "int32", + "type": "integer" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + }, + "xslTemplate": { + "description": "XSLTemplate defines a base64-encoded raw xsl template which will be included in the machine definition", + "type": "string" + } + }, + "required": [ + "instanceType", + "placements", + "rootDiskInGB" + ], + "type": "object" + }, + "v1LibvirtMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1LibvirtMachinePoolCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + }, + "type": "object" + }, + "v1LibvirtMachineSpec": { + "description": "libvirt cloud VM definition spec", + "properties": { + "disks": { + "items": { + "$ref": "#/definitions/v1LibvirtDiskSpec" + }, + "type": "array" + }, + "edgeHostUid": { + "type": "string" + }, + "failureDomain": { + "type": "string" + }, + "imageName": { + "type": "string" + }, + "instanceType": { + "$ref": "#/definitions/v1LibvirtInstanceType" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1LibvirtNicSpec" + }, + "type": "array" + }, + "targetStoragePool": { + "type": "string" + } + }, + "type": "object" + }, + "v1LibvirtMachines": { + "description": "Libvirt machine list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1LibvirtMachine" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1LibvirtNetworkSpec": { + "description": "LibvirtNetworkSpec defines the network configuration for a virtual machine", + "properties": { + "networkName": { + "description": "NetworkName of the libvirt network where this machine will be connected", + "type": "string" + }, + "networkType": { + "description": "NetworkType specifies the type of network", + "enum": [ + "default", + "bridge" + ], + "type": "string" + } + }, + "required": [ + "networkName", + "networkType" + ], + "type": "object" + }, + "v1LibvirtNicSpec": { + "description": "Libvirt network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "macAddress": { + "type": "string" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "macAddress" + ], + "type": "object" + }, + "v1LibvirtPlacementConfig": { + "properties": { + "dataStoragePool": { + "description": "DataStoragePool is the storage pool from which additional disks are assigned", + "type": "string" + }, + "gpuDevices": { + "description": "GPU Devices is the list of LibvirtHost GPU devices, to be used for this placement", + "items": { + "$ref": "#/definitions/v1GPUDeviceSpec" + }, + "type": "array" + }, + "hostAddress": { + "description": "HostAddress is a FQDN or IP address of the LibvirtHost", + "type": "string" + }, + "hostIdentity": { + "$ref": "#/definitions/v1LibvirtHostIdentity", + "description": "HostIdentity is the identity to access the LibvirtHost" + }, + "hostUid": { + "description": "HostUid is the ID of the LibvirtHost", + "type": "string" + }, + "networks": { + "description": "Networks defines the network specifications of the vms in the machine pool", + "items": { + "$ref": "#/definitions/v1LibvirtNetworkSpec" + }, + "type": "array" + }, + "sourceStoragePool": { + "description": "SourceStoragePool is the storage pool for the vm image", + "type": "string" + }, + "targetStoragePool": { + "description": "TargetStoragePool is the optional storage pool from which additional disks are assigned. If not specified, the sourceStoragePool is also used as the targetStoragePool", + "type": "string" + } + }, + "required": [ + "hostUid", + "hostAddress", + "networks", + "sourceStoragePool" + ], + "type": "object" + }, + "v1LibvirtPlacementEntity": { + "description": "Libvirt placement config", + "properties": { + "dataStoragePool": { + "type": "string" + }, + "gpuDevices": { + "description": "GPUDevices defines an array of gpu device for a specific edge host. This will be overridden by edge host GPU devices if configured during registration.", + "items": { + "$ref": "#/definitions/v1GPUDeviceSpec" + }, + "type": "array" + }, + "hostUid": { + "type": "string" + }, + "networks": { + "items": { + "$ref": "#/definitions/v1LibvirtNetworkSpec" + }, + "type": "array" + }, + "sourceStoragePool": { + "type": "string" + }, + "targetStoragePool": { + "type": "string" + } + }, + "required": [ + "hostUid" + ], + "type": "object" + }, + "v1LifecycleConfig": { + "properties": { + "pause": { + "default": false, + "description": "enable pause life cycle config", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1LifecycleConfigEntity": { + "properties": { + "lifecycleConfig": { + "$ref": "#/definitions/v1LifecycleConfig" + } + }, + "type": "object" + }, + "v1LifecycleStatus": { + "properties": { + "msg": { + "description": "error or success msg of lifecycle", + "type": "string" + }, + "status": { + "description": "lifecycle status", + "enum": [ + "Pausing", + "Paused", + "Resuming", + "Running", + "Error" + ], + "type": "string" + } + } + }, + "v1ListMetaData": { + "description": "ListMeta describes metadata for the resource listing", + "properties": { + "continue": { + "description": "Next token for the pagination. Next token is equal to empty string indicates end of result set.", + "type": "string", + "x-omitempty": false + }, + "count": { + "description": "Total count of the resources which might change during pagination based on the resources addition or deletion", + "type": "integer", + "x-omitempty": false + }, + "limit": { + "description": "Number of records feteched", + "type": "integer", + "x-omitempty": false + }, + "offset": { + "description": "The next offset for the pagination. Starting index for which next request will be placed.", + "type": "integer", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1LoadBalancerConfig": { + "description": "Load balancer configuration for exposing the virtual cluster's kube-apiserver", + "properties": { + "externalIPs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "externalTrafficPolicy": { + "type": "string" + }, + "loadBalancerSourceRanges": { + "items": { + "type": "string" + }, + "type": "array" + } + } + }, + "v1LoadBalancerService": { + "properties": { + "host": { + "description": "IP or Host from svc.Status.LoadBalancerStatus.Ingress", + "type": "string" + }, + "name": { + "description": "name of the loadbalancer service", + "type": "string" + }, + "ports": { + "description": "port this service exposed", + "items": { + "$ref": "#/definitions/v1ServicePort" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1LoadBalancerSpec": { + "description": "LoadBalancerSpec defines an Azure load balancer.", + "properties": { + "apiServerLBStaticIP": { + "type": "string" + }, + "ipAllocationMethod": { + "default": "Dynamic", + "enum": [ + "Static", + "Dynamic" + ], + "type": "string" + }, + "privateDNSName": { + "type": "string" + }, + "type": { + "default": "Public", + "description": "Load Balancer type", + "enum": [ + "Internal", + "Public" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1LocationType": { + "default": "s3", + "description": "Location type", + "enum": [ + "s3", + "gcp", + "minio" + ], + "type": "string" + }, + "v1Lock": { + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta", + "type": "object", + "x-omitempty": false + }, + "spec": { + "properties": { + "expireAt": { + "$ref": "#/definitions/v1Time", + "x-omitempty": false + }, + "key": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1Locks": { + "items": { + "$ref": "#/definitions/v1Lock" + }, + "type": "array", + "uniqueItems": true + }, + "v1Login": { + "description": "Login input", + "properties": { + "emailId": { + "type": "string" + } + }, + "type": "object" + }, + "v1LoginBannerSettings": { + "properties": { + "Message": { + "description": "Login banner message displayed to the user", + "type": "string", + "x-omitempty": false + }, + "isEnabled": { + "description": "Set to 'true' if login banner has to be displayed for user", + "type": "boolean", + "x-omitempty": false + }, + "title": { + "description": "Banner title displayed to the user", + "type": "string", + "x-omitempty": false + } + } + }, + "v1LoginResponse": { + "description": "Returns the allowed login method and information with the organization details", + "properties": { + "appEnv": { + "description": "Describes the env type. Possible values [ saas, self-hosted, quick-start, enterprise, airgap]", + "type": "string" + }, + "authType": { + "description": "Describes the default mode of authentication. Possible values [password, sso]", + "enum": [ + "password", + "sso" + ], + "type": "string" + }, + "orgName": { + "description": "Organization name.", + "type": "string" + }, + "redirectUrl": { + "description": "Describes the default redirect Url for authentication. If authType is sso, it will have tenant configured saml/oidc idp url else it will be users organization url", + "type": "string", + "x-omitempty": false + }, + "rootDomain": { + "description": "Describes the domain url on which the saas is available", + "type": "string" + }, + "securityMode": { + "description": "Describes which security mode is enabled", + "type": "string" + }, + "ssoLogins": { + "$ref": "#/definitions/v1SsoLogins", + "description": "Just Inside. Describes the allowed social logins" + }, + "totalTenants": { + "description": "Describes the total number of tenant present in the system", + "format": "int64", + "type": "number" + } + }, + "type": "object" + }, + "v1LogoutResponse": { + "description": "Logout response specifying the redirect url", + "properties": { + "redirectUrl": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1MaasAccount": { + "description": "Maas cloud account information", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1MaasCloudAccount" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1MaasAccounts": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1MaasAccount" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1MaasCloudAccount": { + "properties": { + "apiEndpoint": { + "type": "string" + }, + "apiKey": { + "type": "string" + }, + "preferredSubnets": { + "description": "list of preferred subnets order in the list reflects order in which subnets will be selected for ip address selection in apiserver dns endpoint this way user can specify external or preferable subnet \"10.11.130.0/24,10.10.10.0/24\"", + "items": { + "default": "", + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "apiKey", + "apiEndpoint" + ], + "type": "object" + }, + "v1MaasCloudClusterConfigEntity": { + "description": "Maas cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1MaasClusterConfig" + } + }, + "type": "object" + }, + "v1MaasCloudConfig": { + "description": "MaasCloudConfig is the Schema for the maascloudconfigs API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1MaasCloudConfigSpec" + }, + "status": { + "$ref": "#/definitions/v1MaasCloudConfigStatus" + } + }, + "type": "object" + }, + "v1MaasCloudConfigSpec": { + "description": "MaasCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cloudAccountRef should point to the secret which contains MaasCloudAccount" + }, + "clusterConfig": { + "$ref": "#/definitions/v1MaasClusterConfig" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1MaasMachinePoolConfig" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1MaasCloudConfigStatus": { + "description": "MaasCloudConfigStatus defines the observed state of MaasCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "properties": { + "ansibleRoleDigest": { + "description": "For mold controller to identify if is there any changes in Pack", + "type": "string" + }, + "conditions": { + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "nodeImage": { + "$ref": "#/definitions/v1MaasImage" + }, + "roleDigest": { + "additionalProperties": { + "type": "string" + }, + "description": "this map will be for ansible roles present in eack pack", + "type": "object" + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "description": "PackerVariableDigest string `json:\"packerDigest,omitempty\"` If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + }, + "type": "object" + }, + "v1MaasClusterConfig": { + "description": "Cluster level configuration for MAAS cloud and applicable for all the machine pools", + "properties": { + "domain": { + "description": "Domain name of the cluster to be provisioned", + "type": "string" + }, + "sshKeys": { + "description": "SSH keys specifies a list of ssh authorized keys for the 'spectro' user", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "domain" + ], + "type": "object" + }, + "v1MaasDomain": { + "description": "Maas domain", + "properties": { + "name": { + "description": "Name of Maas domain", + "type": "string" + } + }, + "type": "object" + }, + "v1MaasDomains": { + "description": "List of Maas domains", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1MaasDomain" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1MaasImage": { + "description": "Name of the image", + "properties": { + "name": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1MaasInstanceType": { + "properties": { + "minCPU": { + "description": "Minimum CPU cores", + "format": "int32", + "type": "integer" + }, + "minMemInMB": { + "description": "Minimum memory in MiB", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1MaasMachine": { + "description": "Maas cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1MaasMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + }, + "type": "object" + }, + "v1MaasMachineConfigEntity": { + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "items": { + "type": "string" + }, + "type": "array" + }, + "instanceType": { + "$ref": "#/definitions/v1MaasInstanceType" + }, + "resourcePool": { + "type": "string" + } + }, + "type": "object" + }, + "v1MaasMachinePoolCloudConfigEntity": { + "properties": { + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "instanceType": { + "$ref": "#/definitions/v1MaasInstanceType" + }, + "resourcePool": { + "description": "the resource pool", + "type": "string" + }, + "tags": { + "description": "Tags in maas environment", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "instanceType", + "resourcePool" + ], + "type": "object" + }, + "v1MaasMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "instanceType": { + "$ref": "#/definitions/v1MaasInstanceType", + "description": "InstanceType defines the required CPU, Memory" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "resourcePool": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "tags": { + "description": "Tags in maas environment", + "items": { + "type": "string" + }, + "type": "array" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + }, + "required": [ + "instanceType" + ], + "type": "object" + }, + "v1MaasMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1MaasMachinePoolCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + }, + "v1MaasMachineSpec": { + "description": "Maas cloud VM definition spec", + "properties": { + "az": { + "type": "string" + }, + "hostname": { + "type": "string" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1MaasNic" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1MaasMachines": { + "description": "List of MAAS machines", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1MaasMachine" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1MaasNic": { + "description": "Maas network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "publicIp": { + "type": "string" + } + }, + "type": "object" + }, + "v1MaasPool": { + "description": "Maas pool", + "properties": { + "description": { + "description": "Description of Maas domain", + "type": "string" + }, + "name": { + "description": "Name of Maas pool", + "type": "string" + } + }, + "type": "object" + }, + "v1MaasPools": { + "description": "List of Maas pools", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1MaasPool" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1MaasSubnet": { + "description": "Maas subnet", + "properties": { + "id": { + "description": "Id of Maas subnet", + "type": "integer" + }, + "name": { + "description": "Name of Maas subnet", + "type": "string" + }, + "space": { + "description": "Space associated with Maas subnet", + "type": "string" + }, + "vlans": { + "$ref": "#/definitions/v1MaasVlan" + } + }, + "type": "object" + }, + "v1MaasSubnets": { + "description": "List of Maas subnets", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1MaasSubnet" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1MaasTag": { + "description": "Maas tag", + "properties": { + "comment": { + "description": "Comment on Maas tag", + "type": "string" + }, + "definition": { + "description": "Definition of Maas tag", + "type": "string" + }, + "kernelOpts": { + "description": "Kernel Opts on Maas tag", + "type": "string" + }, + "name": { + "description": "Name of Maas tag", + "type": "string" + }, + "resourceUri": { + "description": "Description of Maas tag", + "type": "string" + } + }, + "type": "object" + }, + "v1MaasTags": { + "description": "List of Maas tags", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1MaasTag" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1MaasVlan": { + "description": "Maas vlan entity", + "properties": { + "fabric": { + "description": "Fabric associated with Maas Vlan", + "type": "string" + }, + "id": { + "description": "Id of Maas Vlan", + "type": "integer" + }, + "name": { + "description": "Name of Maas Vlan", + "type": "string" + } + }, + "type": "object" + }, + "v1MaasZone": { + "description": "Maas zone", + "properties": { + "description": { + "description": "Description of Maas domain", + "type": "string" + }, + "name": { + "description": "Name of Maas zone", + "type": "string" + } + }, + "type": "object" + }, + "v1MaasZones": { + "description": "List of Maas zones", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1MaasZone" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1MachineCertificate": { + "description": "K8 Certificates for control plane nodes", + "properties": { + "certificateAuthorities": { + "description": "Applicable certificate authorities", + "items": { + "$ref": "#/definitions/v1CertificateAuthority" + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1MachineCertificates": { + "description": "K8 Certificates for all the cluster's control plane nodes", + "properties": { + "machineCertificates": { + "items": { + "$ref": "#/definitions/v1MachineCertificate" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1MachineHealth": { + "description": "Machine health state", + "properties": { + "conditions": { + "items": { + "$ref": "#/definitions/v1MachineHealthCondition" + }, + "type": "array" + }, + "lastHeartBeatTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1MachineHealthCheckConfig": { + "properties": { + "healthCheckMaxUnhealthy": { + "description": "HealthCheckMaxUnhealthy is the value above which, if current nodes are unhealthy remediation will not be triggered Can be an absolute int64 number or a percentage string Default value is 100%, i.e by default it is disabled", + "type": "string" + }, + "networkReadyHealthCheckDuration": { + "description": "NetworkReadyHealthCheckDuration is the timeout to check for the network availability. If the network is not available in the given available time, beyond the timeout check a node will be killed and a new node will be created. Default time is 10m", + "type": "string" + }, + "nodeReadyHealthCheckDuration": { + "description": "NodeReadyHealthCheckDuration is the timeout to check for the node ready state. If the node is not ready within the time out set, the node will be deleted and a new node will be launched. Default time is 10m", + "type": "string" + } + }, + "type": "object" + }, + "v1MachineHealthCondition": { + "description": "Machine health condition", + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "v1MachineMaintenance": { + "properties": { + "action": { + "description": "Machine maintenance mode action", + "enum": [ + "cordon", + "uncordon" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1MachineMaintenanceStatus": { + "description": "Machine maintenance status", + "properties": { + "action": { + "type": "string" + }, + "message": { + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1MachineManagementConfig": { + "properties": { + "osPatchConfig": { + "$ref": "#/definitions/v1OsPatchConfig", + "description": "OS patch config contains properties to patch node os with latest security packages. \nIf OsPatchConfig is not provided then node os will not be patched with latest security updates.\nNote: For edge based cluster (like edge-native type) the osPatchConfig is NOT applicable, the values will be ignored.\n" + } + }, + "type": "object" + }, + "v1MachinePoolConfigEntity": { + "description": "Machine pool configuration for the cluster", + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional labels to be part of the machine pool", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "isControlPlane": { + "description": "Whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "Labels for this machine pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "Max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "Min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "size": { + "description": "Size of the pool, number of nodes/machines", + "format": "int32", + "type": "integer" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "Rolling update strategy for this machine pool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "If IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + }, + "required": [ + "name", + "size", + "labels" + ], + "type": "object" + }, + "v1MachinePoolMeta": { + "properties": { + "cloudType": { + "type": "string" + }, + "healthy": { + "description": "number of healthy machines", + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "infraProfileTemplate": { + "$ref": "#/definitions/v1ClusterProfileTemplateMeta", + "description": "InfraClusterProfile contains OS/Kernel for this NodePool" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "maintenanceMode": { + "description": "number of machines under maintenance", + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1MachinePoolProperties": { + "description": "Machine pool specific properties", + "properties": { + "archType": { + "$ref": "#/definitions/v1ArchType", + "description": "Architecture type of the pool. Default value is 'amd64'", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1MachinePoolRate": { + "description": "Machine pool estimated rate information", + "properties": { + "name": { + "type": "string" + }, + "nodesCount": { + "format": "int32", + "type": "integer" + }, + "rate": { + "$ref": "#/definitions/v1CloudRate" + } + }, + "type": "object" + }, + "v1MachinePoolsMachineUids": { + "properties": { + "machinePools": { + "additionalProperties": { + "$ref": "#/definitions/v1MachineUids" + }, + "type": "object" + } + } + }, + "v1MachineUids": { + "properties": { + "machineUids": { + "items": { + "type": "string" + }, + "type": "array" + } + } + }, + "v1Macro": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "v1Macros": { + "properties": { + "macros": { + "items": { + "$ref": "#/definitions/v1Macro" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ManagedDisk": { + "properties": { + "storageAccountType": { + "type": "string" + } + }, + "type": "object" + }, + "v1Manifest": { + "description": "Manifest object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ManifestPublishedSpec" + } + } + }, + "v1ManifestData": { + "description": "Published manifest object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "digest": { + "description": "Manifest digest", + "type": "string" + } + }, + "type": "object" + }, + "v1ManifestEntities": { + "properties": { + "items": { + "description": "Manifests array", + "items": { + "$ref": "#/definitions/v1ManifestEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ManifestEntity": { + "description": "Manifest object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ManifestSpec" + } + } + }, + "v1ManifestInputEntity": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + } + } + }, + "v1ManifestPublishedSpec": { + "description": "Manifest spec", + "properties": { + "published": { + "$ref": "#/definitions/v1ManifestData" + } + } + }, + "v1ManifestRefInputEntities": { + "description": "Pack manifests input params", + "properties": { + "manifests": { + "description": "Pack manifests array", + "items": { + "$ref": "#/definitions/v1ManifestRefInputEntity" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ManifestRefInputEntity": { + "description": "Manifest request payload", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + }, + "v1ManifestRefUpdateEntity": { + "description": "Manifest update request payload", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + }, + "required": [ + "name" + ] + }, + "v1ManifestSpec": { + "description": "Manifest spec", + "properties": { + "draft": { + "$ref": "#/definitions/v1ManifestData" + }, + "published": { + "$ref": "#/definitions/v1ManifestData" + } + }, + "type": "object" + }, + "v1ManifestSummary": { + "description": "Manifest object", + "properties": { + "content": { + "description": "Manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Manifest name", + "type": "string" + }, + "uid": { + "description": "Manifest uid", + "type": "string" + } + } + }, + "v1Memory": { + "properties": { + "sizeInMB": { + "description": "memory size in bytes", + "format": "int64", + "type": "integer" + } + }, + "type": "object" + }, + "v1MetricAggregation": { + "description": "Aggregation values", + "properties": { + "avg": { + "type": "number", + "x-omitempty": false + }, + "count": { + "format": "int64", + "type": "number", + "x-omitempty": false + }, + "max": { + "type": "number", + "x-omitempty": false + }, + "min": { + "type": "number", + "x-omitempty": false + }, + "sum": { + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1MetricMetadata": { + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1MetricPoint": { + "description": "Metric Info", + "properties": { + "avg": { + "type": "number" + }, + "count": { + "format": "int64", + "type": "number" + }, + "max": { + "type": "number" + }, + "min": { + "type": "number" + }, + "sum": { + "type": "number" + }, + "timestamp": { + "format": "int64", + "type": "number" + }, + "value": { + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1MetricTimeSeries": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1Metrics" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1MetricTimeSeriesList": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1MetricsList" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1Metrics": { + "properties": { + "aggregation": { + "$ref": "#/definitions/v1MetricAggregation" + }, + "kind": { + "type": "string" + }, + "points": { + "items": { + "$ref": "#/definitions/v1MetricPoint" + }, + "type": "array", + "uniqueItems": true + }, + "unit": { + "type": "string" + } + }, + "type": "object" + }, + "v1MetricsList": { + "properties": { + "metadata": { + "$ref": "#/definitions/v1MetricMetadata" + }, + "metrics": { + "items": { + "$ref": "#/definitions/v1Metrics" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1MfaAuthenticationExtensions": { + "additionalProperties": { + "type": "object" + }, + "type": "object" + }, + "v1MfaAuthenticatorSelection": { + "properties": { + "authenticatorAttachment": { + "type": "string" + }, + "requireResidentKey": { + "type": "boolean" + }, + "residentKey": { + "type": "string" + }, + "userVerification": { + "type": "string" + } + }, + "type": "object" + }, + "v1MfaConveyancePreference": { + "enum": [ + "none", + "indirect", + "direct", + "enterprise" + ], + "type": "string" + }, + "v1MfaCredentialCreationRequest": { + "properties": { + "_type": { + "type": "string" + }, + "authenticatorAttachment": { + "type": "string" + }, + "clientExtensionResults": { + "additionalProperties": { + "type": "object" + }, + "type": "object" + }, + "deviceName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "rawId": { + "$ref": "#/definitions/URLEncodedBase64" + }, + "response": { + "properties": { + "attestationObject": { + "$ref": "#/definitions/URLEncodedBase64" + }, + "clientDataJSON": { + "$ref": "#/definitions/URLEncodedBase64" + }, + "transports": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "transports": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1MfaCredentialDescriptor": { + "properties": { + "attestationType": { + "type": "string" + }, + "id": { + "$ref": "#/definitions/urlEncodedBase64" + }, + "transports": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "v1MfaCredentialParameter": { + "properties": { + "alg": { + "type": "integer" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "v1MfaDeviceMeta": { + "properties": { + "creationTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "deviceName": { + "type": "string" + } + }, + "type": "object" + }, + "v1MfaDeviceName": { + "properties": { + "deviceName": { + "type": "string" + } + }, + "type": "object" + }, + "v1MfaDevices": { + "items": { + "$ref": "#/definitions/v1MfaDeviceMeta" + }, + "type": "array" + }, + "v1MfaLoginStart": { + "properties": { + "publicKey": { + "$ref": "#/definitions/v1MfaPublicKeyCredentialRequestOptions" + } + }, + "type": "object" + }, + "v1MfaPublicKeyCredentialCreationOptions": { + "properties": { + "attestation": { + "$ref": "#/definitions/v1MfaConveyancePreference" + }, + "authenticatorSelection": { + "$ref": "#/definitions/v1MfaAuthenticatorSelection" + }, + "challenge": { + "$ref": "#/definitions/URLEncodedBase64" + }, + "excludeCredentials": { + "items": { + "$ref": "#/definitions/v1MfaCredentialDescriptor" + }, + "type": "array" + }, + "extensions": { + "$ref": "#/definitions/v1MfaAuthenticationExtensions" + }, + "pubKeyCredParams": { + "items": { + "$ref": "#/definitions/v1MfaCredentialParameter" + }, + "type": "array" + }, + "rp": { + "$ref": "#/definitions/v1MfaRelyingPartyEntity" + }, + "timeout": { + "type": "integer" + }, + "user": { + "$ref": "#/definitions/v1MfaUserEntity" + } + }, + "type": "object" + }, + "v1MfaPublicKeyCredentialRequestOptions": { + "properties": { + "allowCredentials": { + "items": { + "$ref": "#/definitions/v1MfaCredentialDescriptor" + }, + "type": "array" + }, + "challenge": { + "$ref": "#/definitions/urlEncodedBase64" + }, + "extensions": { + "$ref": "#/definitions/v1MfaAuthenticationExtensions" + }, + "rpId": { + "type": "string" + }, + "timeout": { + "type": "integer" + }, + "userVerification": { + "type": "string" + } + }, + "type": "object" + }, + "v1MfaRegistrationStart": { + "properties": { + "publicKey": { + "$ref": "#/definitions/v1MfaPublicKeyCredentialCreationOptions" + } + }, + "type": "object" + }, + "v1MfaRelyingPartyEntity": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1MfaUserEntity": { + "properties": { + "displayName": { + "type": "string" + }, + "id": { + "type": "object" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1MgmtApp": { + "description": "Spectro application management data", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1MgmtAppSpec" + }, + "status": { + "$ref": "#/definitions/v1MgmtAppStatus" + } + }, + "type": "object" + }, + "v1MgmtAppContainersState": { + "properties": { + "running": { + "properties": { + "startedAt": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "terminated": { + "properties": { + "exitCode": { + "type": "integer" + }, + "finishedAt": { + "$ref": "#/definitions/v1Time" + }, + "reason": { + "type": "string" + }, + "signal": { + "type": "integer" + }, + "startedAt": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "waiting": { + "properties": { + "reason": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1MgmtAppContainersStatus": { + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "numberOfRestarts": { + "type": "integer" + }, + "state": { + "$ref": "#/definitions/v1MgmtAppContainersState" + } + }, + "type": "object" + }, + "v1MgmtAppCronJobStatus": { + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "lastScheduleTime": { + "$ref": "#/definitions/v1Time" + }, + "lastSuccessfulRunTime": { + "$ref": "#/definitions/v1Time" + }, + "messages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "pods": { + "additionalProperties": { + "$ref": "#/definitions/v1MgmtAppPodsStatus" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1MgmtAppEnvHealthStatus": { + "properties": { + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "namespaces": { + "additionalProperties": { + "$ref": "#/definitions/v1MgmtAppNameSpaceStatus" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1MgmtAppHealth": { + "properties": { + "isHealthy": { + "type": "boolean" + }, + "podHealth": { + "items": { + "$ref": "#/definitions/v1MgmtPodHealth" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1MgmtAppNameSpaceStatus": { + "properties": { + "cronJobs": { + "additionalProperties": { + "$ref": "#/definitions/v1MgmtAppCronJobStatus" + }, + "type": "object" + }, + "deployments": { + "additionalProperties": { + "$ref": "#/definitions/v1MgmtAppObjectStatus" + }, + "type": "object" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "statefulSets": { + "additionalProperties": { + "$ref": "#/definitions/v1MgmtAppObjectStatus" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1MgmtAppObjectStatus": { + "properties": { + "availableReplicas": { + "type": "integer" + }, + "creationTime": { + "$ref": "#/definitions/v1Time" + }, + "desiredReplicaCount": { + "type": "integer" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "pods": { + "additionalProperties": { + "$ref": "#/definitions/v1MgmtAppPodsStatus" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1MgmtAppPodsStatus": { + "properties": { + "containers": { + "additionalProperties": { + "$ref": "#/definitions/v1MgmtAppContainersStatus" + }, + "type": "object" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "messages": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "pvcs": { + "additionalProperties": { + "$ref": "#/definitions/v1MgmtAppPvcStatus" + }, + "type": "object" + }, + "reason": { + "type": "string" + }, + "startTime": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1MgmtAppPvcStatus": { + "properties": { + "claimName": { + "type": "string" + }, + "creationTime": { + "$ref": "#/definitions/v1Time" + }, + "isHealthy": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1MgmtAppSpec": { + "description": "spectro application management specifications", + "properties": { + "appEnv": { + "type": "string" + }, + "cloudType": { + "type": "string" + }, + "installedVersion": { + "type": "string" + }, + "latestVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + } + } + }, + "v1MgmtAppStatus": { + "description": "spectro application management status", + "properties": { + "appVersions": { + "items": { + "$ref": "#/definitions/v1AppVersion" + }, + "type": "array", + "uniqueItems": true + }, + "isFailed": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string" + }, + "messageLogs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "state": { + "type": "string" + }, + "upgradeHistory": { + "items": { + "$ref": "#/definitions/v1SpectroMgmtUpgrade" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1MgmtAppUpgrade": { + "properties": { + "spec": { + "properties": { + "currentVersion": { + "type": "string", + "x-omitempty": false + }, + "previousVersion": { + "type": "string", + "x-omitempty": false + }, + "toBeUpgradedVersion": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "status": { + "properties": { + "action": { + "type": "string", + "x-omitempty": false + }, + "states": { + "properties": { + "imageUpdate": { + "$ref": "#/definitions/v1MgmtUpgradeState", + "x-omitempty": false, + "x-order": 1 + }, + "spectroClusterUpdate": { + "$ref": "#/definitions/v1MgmtUpgradeState", + "x-omitempty": false, + "x-order": 0 + }, + "spectroServiceResume": { + "$ref": "#/definitions/v1MgmtUpgradeState", + "x-omitempty": false, + "x-order": 4 + }, + "spectroVersionConfigMapUpdate": { + "$ref": "#/definitions/v1MgmtUpgradeState", + "x-omitempty": false, + "x-order": 3 + }, + "spectroVersionServiceSuspend": { + "$ref": "#/definitions/v1MgmtUpgradeState", + "x-omitempty": false, + "x-order": 2 + } + }, + "type": "object" + }, + "upgradeStatus": { + "type": "string", + "x-omitempty": false + }, + "versionHistory": { + "items": { + "type": "string" + }, + "type": "array", + "x-omitempty": false + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1MgmtAppVersion": { + "description": "spectro application management version", + "properties": { + "version": { + "properties": { + "appEnv": { + "type": "string" + }, + "cloudType": { + "type": "string" + }, + "installedVersion": { + "type": "string" + }, + "latestVersion": { + "type": "string" + } + }, + "type": "object" + } + } + }, + "v1MgmtBackupSpec": { + "description": "backup spec", + "properties": { + "backupUid": { + "type": "string" + }, + "mode": { + "type": "string" + }, + "modeUid": { + "type": "string" + }, + "proxy": { + "description": "proxy information if applicable", + "type": "string" + }, + "scheduleTime": { + "$ref": "#/definitions/v1Time" + }, + "scheduleType": { + "default": "Automated", + "enum": [ + "OnDemand", + "Automated" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1MgmtDbCollectionIndexInfo": { + "description": "Database info", + "properties": { + "key": { + "additionalProperties": { + "type": "integer" + } + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1MgmtDbCollectionInfo": { + "description": "Database info", + "properties": { + "count": { + "type": "integer" + }, + "indexes": { + "items": { + "$ref": "#/definitions/v1MgmtDbCollectionIndexInfo" + }, + "type": "array" + }, + "isCapped": { + "type": "boolean" + }, + "isReadOnly": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "storageSize": { + "type": "integer" + }, + "totalIndexSize": { + "type": "integer" + } + }, + "type": "object" + }, + "v1MgmtDbHealth": { + "properties": { + "databases": { + "items": { + "$ref": "#/definitions/v1MgmtDbInfo" + }, + "type": "array" + }, + "totalIndexSize": { + "type": "integer" + }, + "totalSize": { + "type": "integer" + } + }, + "type": "object" + }, + "v1MgmtDbInfo": { + "description": "Database info", + "properties": { + "collections": { + "items": { + "$ref": "#/definitions/v1MgmtDbCollectionInfo" + }, + "type": "array" + }, + "isEmpty": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "size": { + "type": "integer" + }, + "totalIndexSize": { + "type": "integer" + } + }, + "type": "object" + }, + "v1MgmtDeleteBackupFtpEntity": { + "description": "delete backups based on retention period", + "properties": { + "fileTransferConfig": { + "$ref": "#/definitions/v1MgmtFileTransferFtpEntity" + }, + "retentionPeriod": { + "type": "integer" + } + }, + "type": "object" + }, + "v1MgmtDeleteBackupS3Entity": { + "description": "delete backups based on retention period", + "properties": { + "fileTransferConfig": { + "$ref": "#/definitions/v1MgmtFileTransferS3Entity" + }, + "retentionPeriod": { + "type": "integer" + } + }, + "type": "object" + }, + "v1MgmtErrLog": { + "properties": { + "ref": { + "type": "string" + }, + "spec": { + "$ref": "#/definitions/v1MgmtErrSpec" + } + }, + "type": "object" + }, + "v1MgmtErrLogs": { + "items": { + "$ref": "#/definitions/v1MgmtErrLog" + }, + "type": "array", + "uniqueItems": true + }, + "v1MgmtErrSpec": { + "properties": { + "causes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "data": { + "type": "string" + }, + "debug": { + "additionalProperties": { + "type": "object" + }, + "type": "object" + }, + "errCode": { + "type": "string" + }, + "errMsg": { + "type": "string" + }, + "stackTraces": { + "items": { + "type": "string" + }, + "type": "array" + }, + "userCtx": { + "properties": { + "projectUid": { + "type": "string" + }, + "serviceResUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "userUid": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1MgmtFileTransferFtpEntity": { + "description": "file transfer details", + "properties": { + "backupSpec": { + "$ref": "#/definitions/v1MgmtBackupSpec" + }, + "ftp": { + "$ref": "#/definitions/v1MgmtFtpConfig" + } + }, + "type": "object" + }, + "v1MgmtFileTransferS3Entity": { + "description": "file transfer details", + "properties": { + "backupSpec": { + "$ref": "#/definitions/v1MgmtBackupSpec" + }, + "s3": { + "$ref": "#/definitions/v1MgmtS3Config" + } + }, + "type": "object" + }, + "v1MgmtFtpConfig": { + "description": "ftp config", + "properties": { + "directory": { + "type": "string" + }, + "password": { + "type": "string" + }, + "server": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "v1MgmtHash": { + "properties": { + "hash": { + "type": "string" + } + }, + "required": [ + "hash" + ], + "type": "object" + }, + "v1MgmtListBackupFtpEntity": { + "description": "list ftp backups", + "properties": { + "fileTransferConfig": { + "$ref": "#/definitions/v1MgmtFileTransferFtpEntity" + } + }, + "type": "object" + }, + "v1MgmtListBackupS3Entity": { + "description": "list s3 backups", + "properties": { + "fileTransferConfig": { + "$ref": "#/definitions/v1MgmtFileTransferS3Entity" + } + }, + "type": "object" + }, + "v1MgmtMigrateEntity": { + "description": "SystemAdmin", + "properties": { + "db": { + "type": "string" + }, + "host": { + "type": "string" + }, + "isServiceRecord": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "uri": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "v1MgmtMigrationStatuses": { + "description": "SystemAdmin", + "properties": { + "finishTime": { + "$ref": "#/definitions/v1Time" + }, + "folderName": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "items": { + "type": "string" + }, + "type": "array" + }, + "startTime": { + "$ref": "#/definitions/v1Time" + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "status": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1MgmtMsgBrokerReinitStatus": { + "properties": { + "failures": { + "items": { + "$ref": "#/definitions/v1MgmtMsgBrokerReinitStatusEntity" + }, + "type": "array" + }, + "success": { + "items": { + "$ref": "#/definitions/v1MgmtMsgBrokerReinitStatusEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1MgmtMsgBrokerReinitStatusEntity": { + "properties": { + "account": { + "type": "string" + }, + "isSuccess": { + "type": "boolean" + }, + "message": { + "type": "string" + } + }, + "type": "object" + }, + "v1MgmtPodHealth": { + "description": "SystemAdmin", + "properties": { + "isHealthy": { + "type": "boolean" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1MgmtS3Config": { + "description": "s3 config", + "properties": { + "accessKey": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "directory": { + "type": "string" + }, + "region": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + }, + "type": "object" + }, + "v1MgmtUpgradeState": { + "properties": { + "description": { + "type": "string", + "x-omitempty": false + }, + "details": { + "items": { + "type": "string" + }, + "type": "array", + "x-omitempty": false + }, + "endTimestamp": { + "$ref": "#/definitions/v1Time", + "x-omitempty": false + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "message": { + "type": "string", + "x-omitempty": false + }, + "startTimestamp": { + "$ref": "#/definitions/v1Time", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1MonthlyUsage": { + "description": "Monthly usage object", + "properties": { + "month": { + "$ref": "#/definitions/v1Time", + "description": "Month of usage" + }, + "tenantUsages": { + "description": "List of tenants usage", + "items": { + "$ref": "#/definitions/v1TenantUsage" + }, + "type": "array", + "uniqueItems": true + }, + "usedAlloyCredits": { + "description": "Credits used by imported clusters", + "format": "float64", + "type": "number" + }, + "usedPureCredits": { + "description": "Credits used by managed clusters", + "format": "float64", + "type": "number" + } + } + }, + "v1MsgBrokerConnection": { + "properties": { + "account": { + "type": "string" + }, + "accountUid": { + "type": "string" + }, + "cid": { + "type": "integer" + }, + "cluster": { + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "cpu": { + "type": "number" + }, + "duplicationCount": { + "type": "integer" + }, + "iP": { + "type": "string" + }, + "idle": { + "type": "string" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "lang": { + "type": "string" + }, + "lastActivity": { + "$ref": "#/definitions/v1Time" + }, + "name": { + "type": "string" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingBytes": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "start": { + "$ref": "#/definitions/v1Time" + }, + "subscriptionList": { + "items": { + "type": "string" + }, + "type": "array" + }, + "subscriptions": { + "type": "integer" + }, + "tLSCipherSuite": { + "type": "string" + }, + "tLSVersion": { + "type": "string" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1MsgBrokerConnectionList": { + "items": { + "$ref": "#/definitions/v1MsgBrokerConnection" + }, + "type": "array" + }, + "v1MsgBrokerConnections": { + "properties": { + "connections": { + "items": { + "$ref": "#/definitions/v1MsgBrokerConnection" + }, + "type": "array", + "uniqueItems": true + }, + "limit": { + "type": "integer" + }, + "now": { + "$ref": "#/definitions/v1Time" + }, + "numOfConnections": { + "type": "integer" + }, + "offset": { + "type": "integer" + }, + "serverId": { + "type": "string" + }, + "totalConnections": { + "type": "integer" + } + }, + "type": "object" + }, + "v1MsgBrokerHealth": { + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta", + "type": "object" + }, + "spec": { + "$ref": "#/definitions/v1MsgBrokerNodesHealthSpec", + "type": "object" + }, + "status": { + "$ref": "#/definitions/v1MsgBrokerNodesHealthStatus", + "type": "object" + } + }, + "type": "object" + }, + "v1MsgBrokerNodeHealth": { + "properties": { + "allyPublishersByTenant": { + "additionalProperties": { + "$ref": "#/definitions/v1MsgBrokerConnectionList" + }, + "type": "object" + }, + "duplicateSubscribersCount": { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + "hubbleSubscribersByService": { + "additionalProperties": { + "$ref": "#/definitions/v1MsgBrokerConnectionList" + }, + "type": "object" + }, + "hubbleSubscribersByTenant": { + "additionalProperties": { + "$ref": "#/definitions/v1MsgBrokerConnectionList" + }, + "type": "object" + }, + "hubbleSubscribersByType": { + "additionalProperties": { + "$ref": "#/definitions/v1MsgBrokerConnectionList" + }, + "type": "object" + }, + "nodeId": { + "type": "string" + }, + "subscriberWithAbnormalRTT": { + "$ref": "#/definitions/v1MsgBrokerConnectionList" + }, + "subscribersWithAbnormalSubscriptions": { + "$ref": "#/definitions/v1MsgBrokerConnectionList" + }, + "uniqueSubscribers": { + "type": "integer" + }, + "unrecognizedClients": { + "$ref": "#/definitions/v1MsgBrokerConnectionList" + } + }, + "type": "object" + }, + "v1MsgBrokerNodeHealthSpec": { + "properties": { + "connections": { + "$ref": "#/definitions/v1MsgBrokerConnections", + "type": "object" + }, + "nodeId": { + "type": "string" + }, + "routes": { + "$ref": "#/definitions/v1MsgBrokerRoutes", + "type": "object" + }, + "variables": { + "$ref": "#/definitions/v1MsgBrokerVariables", + "type": "object" + } + }, + "type": "object" + }, + "v1MsgBrokerNodesHealthSpec": { + "properties": { + "nodes": { + "items": { + "$ref": "#/definitions/v1MsgBrokerNodeHealthSpec" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1MsgBrokerNodesHealthStatus": { + "properties": { + "nodes": { + "items": { + "$ref": "#/definitions/v1MsgBrokerNodeHealth" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1MsgBrokerRoutes": { + "properties": { + "numRoutes": { + "type": "integer" + }, + "routes": { + "items": { + "$ref": "#/definitions/v1NatsRoute" + }, + "type": "array" + }, + "serverId": { + "type": "string" + } + }, + "type": "object" + }, + "v1MsgBrokerVariables": { + "properties": { + "authRequired": { + "type": "boolean" + }, + "authTimeout": { + "type": "integer" + }, + "cluster": { + "properties": { + "addr": { + "type": "string" + }, + "authTimeout": { + "type": "integer" + }, + "clusterPort": { + "type": "integer" + }, + "urls": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "configLoadTime": { + "$ref": "#/definitions/v1Time" + }, + "connectUrls": { + "items": { + "type": "string" + }, + "type": "array" + }, + "connections": { + "type": "integer" + }, + "cores": { + "type": "integer" + }, + "cpu": { + "type": "number" + }, + "gitCommit": { + "type": "string" + }, + "go": { + "type": "string" + }, + "gomaxprocs": { + "type": "integer" + }, + "host": { + "type": "string" + }, + "httpHost": { + "type": "string" + }, + "httpPort": { + "type": "integer" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "leafNodes": { + "type": "integer" + }, + "maxConnections": { + "type": "integer" + }, + "maxControlLine": { + "type": "integer" + }, + "maxPayload": { + "type": "integer" + }, + "maxPending": { + "type": "integer" + }, + "mem": { + "type": "integer" + }, + "now": { + "$ref": "#/definitions/v1Time" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pingInterval": { + "type": "integer" + }, + "pingMax": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "proto": { + "type": "integer" + }, + "remotes": { + "type": "integer" + }, + "routes": { + "type": "integer" + }, + "serverId": { + "type": "string" + }, + "serverName": { + "type": "string" + }, + "slowConsumers": { + "type": "integer" + }, + "start": { + "$ref": "#/definitions/v1Time" + }, + "subscriptions": { + "type": "integer" + }, + "tlsRequired": { + "type": "boolean" + }, + "tlsTimeout": { + "type": "integer" + }, + "totalConnections": { + "type": "integer" + }, + "uptime": { + "type": "string" + }, + "version": { + "type": "string" + }, + "writeDeadline": { + "type": "integer" + } + }, + "type": "object" + }, + "v1MsgSubscriber": { + "description": "Message subscriber request", + "properties": { + "accountId": { + "type": "string" + }, + "publisher": { + "type": "string" + }, + "service": { + "type": "string" + }, + "userId": { + "type": "string" + } + }, + "type": "object" + }, + "v1Nameserver": { + "description": "Nameserver define search domains and nameserver addresses", + "properties": { + "addresses": { + "items": { + "type": "string" + }, + "type": "array" + }, + "search": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1NatsConfiguration": { + "description": "Describes the response that contains the nats configuration to establish credentials", + "properties": { + "connectionString": { + "description": "Describes the preCalculated connection string, can be used directly to make connection", + "type": "string" + }, + "enableTls": { + "description": "Describes the NATs application option to use a TLS based custom dialer. Its enabled when external Certificate is used over the existing one.", + "type": "boolean" + }, + "insecureTls": { + "description": "Describes the NATs tls option to skip verifying the client certificate", + "type": "boolean" + }, + "password": { + "description": "Describes the NATs user's password", + "type": "string" + }, + "scheme": { + "description": "Describes the NATs protocol for the connection. Eg- 'tls', 'nats'", + "type": "string" + }, + "tlsCertificate": { + "description": "Describes the NATs tls certificate used for making a secure connection", + "type": "string" + }, + "tlsKey": { + "description": "Describes the NATs tls certificate key used for making a secure connection", + "type": "string" + }, + "urls": { + "description": "Describes the URLs of the nats nodes used in nats HA setup where the client will connect", + "type": "string" + }, + "userName": { + "description": "Describes the NATs user name", + "type": "string" + } + }, + "type": "object" + }, + "v1NatsCredentialRequest": { + "description": "Describes the request for resource's nats credential", + "properties": { + "clusterUid": { + "description": "Deprecated. please use resourceUid", + "type": "string" + }, + "isSystem": { + "description": "Describes if its a system request", + "type": "boolean" + }, + "resourceUid": { + "description": "Describes the resource for which credentials has to be fetched", + "type": "string" + }, + "serviceName": { + "description": "Describes the service for which credentials has to be fetched. Possible values [ally, jet]", + "enum": [ + "ally", + "jet" + ], + "type": "string" + }, + "tenantUid": { + "description": "Describes the tenant of the resource", + "type": "string" + } + }, + "type": "object" + }, + "v1NatsCredentials": { + "description": "Describes the response that contains the nats credentials", + "properties": { + "allowedPublisher": { + "description": "Describes the subject on which client is allowed to publish", + "type": "string" + }, + "allowedSubcriber": { + "description": "Describes the subject on which client is allowed to subscribe", + "type": "string" + }, + "jwt": { + "description": "Describes the jwt token which will be used as an credential for the nats", + "type": "string" + }, + "seed": { + "description": "Describes the seed for the jwt", + "type": "string" + } + }, + "type": "object" + }, + "v1NatsRoute": { + "properties": { + "didSolicit": { + "type": "boolean" + }, + "inBytes": { + "type": "integer" + }, + "inMsgs": { + "type": "integer" + }, + "isConfigured": { + "type": "boolean" + }, + "outBytes": { + "type": "integer" + }, + "outMsgs": { + "type": "integer" + }, + "pendingSize": { + "type": "integer" + }, + "port": { + "type": "integer" + }, + "remoteId": { + "type": "string" + }, + "rid": { + "type": "integer" + }, + "rtt": { + "type": "string" + }, + "subscriptions": { + "type": "integer" + } + }, + "type": "object" + }, + "v1NestedCloudConfigStatus": { + "description": "Defines the status of virtual cloud config", + "properties": { + "conditions": { + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + } + }, + "type": "object" + }, + "v1Nic": { + "properties": { + "dns": { + "items": { + "type": "string" + }, + "type": "array" + }, + "gateway": { + "type": "string" + }, + "ip": { + "type": "string" + }, + "isDefault": { + "type": "boolean" + }, + "macAddr": { + "type": "string" + }, + "nicName": { + "type": "string" + }, + "subnet": { + "type": "string" + } + }, + "type": "object" + }, + "v1NodesAutoRemediationSettings": { + "properties": { + "disableNodesAutoRemediation": { + "type": "boolean", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1NonFipsConfig": { + "description": "Non-FIPS configuration", + "properties": { + "mode": { + "default": "nonFipsDisabled", + "description": "enable or disable the non FIPS complaint", + "enum": [ + "nonFipsEnabled", + "nonFipsDisabled" + ], + "type": "string" + } + } + }, + "v1Notification": { + "description": "Describes event notification and action definition", + "properties": { + "action": { + "$ref": "#/definitions/v1NotificationAction", + "description": "Describes actions for the notification", + "type": "object" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta", + "type": "object" + }, + "relatedObject": { + "$ref": "#/definitions/v1RelatedObject", + "type": "object" + }, + "source": { + "$ref": "#/definitions/v1NotificationSource", + "description": "Describes origin info for the notification", + "type": "object" + }, + "type": { + "description": "Describes type of notification. Possible values [NotificationPackUpdate, NotificationPackRegistryUpdate, NotificationNone]", + "enum": [ + "NotificationPackUpdate", + "NotificationPackRegistryUpdate", + "NotificationNone" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1NotificationAction": { + "description": "Describes actions for the notification", + "properties": { + "ack": { + "description": "Describes the acknowledgement status for the notification", + "type": "boolean", + "x-omitempty": false + }, + "actionMessage": { + "description": "Describes information related to notification action", + "type": "string" + }, + "actionType": { + "description": "Describes action type for the notification. Possible Values [NotifyActionPacksUpdate, NotifyActionClusterProfileUpdate, NotifyActionPackRegistryUpdate, NotifyActionClusterUpdate, NotifyActionNone]", + "enum": [ + "NotifyActionPacksUpdate", + "NotifyActionClusterProfileUpdate", + "NotifyActionPackRegistryUpdate", + "NotifyActionClusterUpdate", + "NotifyActionNone" + ], + "type": "string" + }, + "events": { + "additionalProperties": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "description": "Describes the events happened for the notifications", + "type": "object" + }, + "isDone": { + "description": "Describes the \"Done\" status for the notification", + "type": "boolean", + "x-omitempty": false + }, + "isInfo": { + "description": "Describes the notification as a information", + "type": "boolean", + "x-omitempty": false + }, + "link": { + "type": "string" + } + }, + "type": "object" + }, + "v1NotificationEvent": { + "description": "Describes notification event details", + "properties": { + "component": { + "description": "Describes component of notification event", + "type": "string" + }, + "digest": { + "description": "Describes notification event digest", + "type": "string" + }, + "message": { + "description": "Describes a information for the notification event", + "type": "string" + }, + "meta": { + "additionalProperties": { + "type": "string" + }, + "description": "Describes a event messages with meta digest as the key", + "type": "object" + }, + "type": { + "description": "Describes notification event type", + "enum": [ + "NotificationPackSync", + "NotificationClusterProfileSync" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1NotificationSource": { + "description": "Describes origin info for the notification", + "properties": { + "component": { + "description": "Describes component where notification originated", + "type": "string" + } + }, + "type": "object" + }, + "v1Notifications": { + "description": "Describe a list of generated notifications", + "properties": { + "items": { + "description": "Describe a list of generated notifications", + "items": { + "$ref": "#/definitions/v1Notification" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData", + "description": "Describes the meta information about the notification lists" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1OS": { + "properties": { + "family": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1ObjectEntity": { + "description": "Object identity meta", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ObjectMeta": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object" + }, + "creationTimestamp": { + "$ref": "#/definitions/v1Time", + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata" + }, + "deletionTimestamp": { + "$ref": "#/definitions/v1Time", + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object" + }, + "lastModifiedTimestamp": { + "$ref": "#/definitions/v1Time", + "description": "LastModifiedTimestamp is a timestamp representing the server time when this object was last modified. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + }, + "type": "object" + }, + "v1ObjectMetaInputEntity": { + "description": "ObjectMeta input entity for object creation", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + } + }, + "type": "object" + }, + "v1ObjectMetaInputEntitySchema": { + "description": "Resource metadata", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + } + }, + "required": [ + "metadata" + ], + "type": "object" + }, + "v1ObjectMetaUpdateEntity": { + "description": "ObjectMeta update entity with uid as input", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ObjectReference": { + "description": "ObjectReference contains enough information to let you inspect or modify the referred object.", + "properties": { + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", + "type": "string" + } + }, + "type": "object" + }, + "v1ObjectResReference": { + "description": "Object resource reference", + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ObjectScopeEntity": { + "description": "Object scope identity meta", + "properties": { + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ObjectTagsEntity": { + "description": "Object identity meta with tags", + "properties": { + "labels": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1OciImageRegistry": { + "description": "Oci Image Registry", + "properties": { + "baseContentPath": { + "description": "baseContentPath is the root path for the registry content", + "type": "string" + }, + "caCert": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "mirrorRegistries": { + "description": "mirrorRegistries contains the array of image sources like gcr.io, ghcr.io, docker.io", + "type": "string" + }, + "name": { + "type": "string" + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "v1OciRegistries": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1OciRegistry" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1OciRegistry": { + "description": "Oci registry information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1OciRegistrySpec" + }, + "status": { + "$ref": "#/definitions/v1OciRegistryStatusSummary" + } + }, + "type": "object" + }, + "v1OciRegistryAuth": { + "description": "Auth credentials of the oci registry", + "properties": { + "password": { + "description": "Password in the credentials", + "format": "password", + "type": "string" + }, + "username": { + "description": "Username in the credentials", + "type": "string" + } + }, + "type": "object" + }, + "v1OciRegistryEntity": { + "description": "Oci registry credentials", + "properties": { + "auth": { + "$ref": "#/definitions/v1RegistryAuth" + }, + "defaultRegion": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "providerType": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "v1OciRegistrySpec": { + "description": "Image registry spec", + "properties": { + "defaultRegion": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "isPrivate": { + "type": "boolean" + }, + "providerType": { + "type": "string" + }, + "registryType": { + "type": "string" + }, + "scope": { + "type": "string" + } + }, + "type": "object" + }, + "v1OciRegistryStatusSummary": { + "description": "OCI registry status summary", + "properties": { + "sync": { + "$ref": "#/definitions/v1RegistrySyncStatus" + } + } + }, + "v1OidcAuth": { + "properties": { + "oidcToken": { + "type": "string" + }, + "org": { + "type": "string" + } + }, + "type": "object" + }, + "v1OidcAuthLogin": { + "properties": { + "emailId": { + "type": "string" + }, + "password": { + "format": "password", + "type": "string" + } + }, + "type": "object" + }, + "v1OidcAuthorizationTokenResponse": { + "properties": { + "access_token": { + "type": "string" + }, + "error": { + "type": "string" + }, + "error_description": { + "type": "string" + }, + "expires_in": { + "type": "integer" + }, + "id_token": { + "type": "string" + }, + "raw": { + "type": "object" + }, + "refresh_token": { + "type": "string" + }, + "scope": { + "type": "string" + } + }, + "type": "object" + }, + "v1OidcLogins": { + "description": "loginsDetails", + "properties": { + "systemLogins": { + "items": { + "$ref": "#/definitions/v1SsoLogin" + }, + "type": "array", + "uniqueItems": true + }, + "tenantLogin": { + "properties": { + "authType": { + "type": "string" + }, + "redirectUrl": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1OidcRefreshToken": { + "description": "oidc request with token", + "properties": { + "token": { + "type": "string" + } + }, + "type": "object" + }, + "v1OpenIDProviderMetadataResponse": { + "properties": { + "authorization_endpoint": { + "description": "REQUIRED. URL of the OP's OAuth 2.0 Authorization Endpoint", + "type": "string" + }, + "claims_supported": { + "description": "RECOMMENDED. JSON array containing a list of the Claim Names of the Claims that the OpenID Provider MAY be able to supply values for", + "type": "string" + }, + "id_token_signing_alg_values_supported": { + "description": "REQUIRED. JSON array containing a list of the JWS signing algorithms (alg values) supported by the OP for the ID Token to encode the Claims in a JWT", + "type": "object" + }, + "issuer": { + "description": "REQUIRED. URL using the https scheme with no query or fragment component that the OP asserts as its Issuer Identifier", + "type": "string" + }, + "jwks_uri": { + "description": "REQUIRED. URL of the OP's JSON Web Key Set [JWK] document.", + "type": "string" + }, + "registration_endpoint": { + "description": "RECOMMENDED. URL of the OP's Dynamic Client Registration Endpoint", + "type": "string" + }, + "response_types_supported": { + "description": "REQUIRED. JSON array containing a list of the OAuth 2.0 response_type values that this OP supports", + "type": "string" + }, + "scopes_supported": { + "description": "RECOMMENDED. JSON array containing a list of the OAuth 2.0 [RFC6749] scope values that this server supports", + "type": "string" + }, + "subject_types_supported": { + "description": "REQUIRED. JSON array containing a list of the Subject Identifier types that this OP supports", + "type": "string" + }, + "token_endpoint": { + "description": "URL of the OP's OAuth 2.0 Token Endpoint", + "type": "string" + }, + "userinfo_endpoint": { + "description": "RECOMMENDED. URL of the OP's UserInfo Endpoint", + "type": "string" + } + }, + "type": "object" + }, + "v1OpenStackAccount": { + "description": "OpenStack account information", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1OpenStackCloudAccount" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1OpenStackAccounts": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1OpenStackAccount" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1OpenStackAz": { + "description": "OpenStack az entity", + "properties": { + "name": { + "description": "Name of OpenStack az", + "type": "string" + } + }, + "type": "object" + }, + "v1OpenStackAzs": { + "description": "List of OpenStack azs", + "properties": { + "azs": { + "items": { + "$ref": "#/definitions/v1OpenStackAz" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "azs" + ], + "type": "object" + }, + "v1OpenStackCloudAccount": { + "description": "auth-url,project,username,password,domain,cacert etc", + "properties": { + "caCert": { + "description": "Ca cert for OpenStack", + "type": "string" + }, + "defaultDomain": { + "description": "Default Domain name", + "type": "string" + }, + "defaultProject": { + "description": "Default Project name", + "type": "string" + }, + "identityEndpoint": { + "description": "Identity endpoint for OpenStack", + "type": "string" + }, + "insecure": { + "description": "For self signed certs in IdentityEndpoint", + "type": "boolean" + }, + "parentRegion": { + "description": "Parent region of OpenStack", + "type": "string" + }, + "password": { + "description": "Password of OpenStack account", + "type": "string" + }, + "username": { + "description": "Username of OpenStack account", + "type": "string" + } + }, + "required": [ + "identityEndpoint", + "username", + "password" + ], + "type": "object" + }, + "v1OpenStackCloudClusterConfigEntity": { + "description": "Openstack cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1OpenStackClusterConfig" + } + }, + "type": "object" + }, + "v1OpenStackCloudConfig": { + "description": "OpenStackCloudConfig is the Schema for the OpenStackcloudconfigs API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1OpenStackCloudConfigSpec" + }, + "status": { + "$ref": "#/definitions/v1OpenStackCloudConfigStatus" + } + }, + "type": "object" + }, + "v1OpenStackCloudConfigSpec": { + "description": "OpenStackCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cloudAccountRef should point to the secret which contains OpenStackCloudAccount" + }, + "clusterConfig": { + "$ref": "#/definitions/v1OpenStackClusterConfig" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1OpenStackMachinePoolConfig" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1OpenStackCloudConfigStatus": { + "description": "OpenStackCloudConfigStatus defines the observed state of OpenStackCloudConfig The cloudimage info built by Mold is stored here image should be mapped to a specific machinepool", + "properties": { + "conditions": { + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "nodeImage": { + "type": "string" + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "useCapiImage": { + "type": "boolean" + } + }, + "type": "object" + }, + "v1OpenStackClusterConfig": { + "description": "Cluster level configuration for OpenStack cloud and applicable for all the machine pools", + "properties": { + "bastionDisabled": { + "description": "Create bastion node option we have earlier supported creation of bastion by default", + "type": "boolean" + }, + "dnsNameservers": { + "description": "DNSNameservers is the list of nameservers for OpenStack Subnet being created. Set this value when you need create a new network/subnet while the access through DNS is required.", + "items": { + "type": "string" + }, + "type": "array" + }, + "domain": { + "$ref": "#/definitions/v1OpenStackResource" + }, + "network": { + "$ref": "#/definitions/v1OpenStackResource", + "description": "For static placement" + }, + "nodeCidr": { + "description": "For dynamic provision NodeCIDR is the OpenStack Subnet to be created. Cluster actuator will create a network, a subnet with NodeCIDR, and a router connected to this subnet. If you leave this empty, no network will be created.", + "type": "string" + }, + "project": { + "$ref": "#/definitions/v1OpenStackResource" + }, + "region": { + "type": "string" + }, + "sshKeyName": { + "type": "string" + }, + "subnet": { + "$ref": "#/definitions/v1OpenStackResource" + } + }, + "type": "object" + }, + "v1OpenStackDomain": { + "description": "OpenStack domain. A Domain is a collection of projects, users, and roles", + "properties": { + "description": { + "description": "Description is the description of the Domain", + "type": "string" + }, + "id": { + "description": "ID is the unique ID of the domain", + "type": "string" + }, + "name": { + "description": "Name is the name of the domain", + "type": "string" + } + }, + "type": "object" + }, + "v1OpenStackFlavor": { + "description": "OpenStack flavor entity. Flavor represent (virtual) hardware configurations for server resources", + "properties": { + "disk": { + "description": "Disk is the amount of root disk, measured in GB", + "type": "integer" + }, + "ephemeral": { + "description": "Ephemeral is the amount of ephemeral disk space, measured in GB", + "type": "integer" + }, + "id": { + "description": "ID is the flavor's unique ID", + "type": "string" + }, + "memory": { + "description": "Amount of memory, measured in MB", + "type": "integer" + }, + "name": { + "description": "Name is the name of the flavor", + "type": "string" + }, + "vcpus": { + "description": "VCPUs indicates how many (virtual) CPUs are available for this flavor", + "type": "integer" + } + }, + "type": "object" + }, + "v1OpenStackFlavors": { + "description": "List of OpenStack flavours", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1OpenStackFlavor" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1OpenStackKeypair": { + "description": "OpenStack keypair. KeyPair is an SSH key known to the OpenStack Cloud that is available to be injected into servers", + "properties": { + "name": { + "description": "Name is used to refer to this keypair from other services within this region", + "type": "string" + }, + "publicKey": { + "description": "PublicKey is the public key from this pair, in OpenSSH format", + "type": "string" + } + }, + "type": "object" + }, + "v1OpenStackKeypairs": { + "description": "List of OpenStack keypairs", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1OpenStackKeypair" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1OpenStackMachine": { + "description": "OpenStack cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1OpenStackMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + }, + "type": "object" + }, + "v1OpenStackMachineConfigEntity": { + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "items": { + "type": "string" + }, + "type": "array" + }, + "flavorConfig": { + "$ref": "#/definitions/v1OpenstackFlavorConfig" + } + }, + "required": [ + "flavorConfig" + ], + "type": "object" + }, + "v1OpenStackMachinePoolCloudConfigEntity": { + "properties": { + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "items": { + "type": "string" + }, + "type": "array" + }, + "diskGiB": { + "description": "Root disk size", + "format": "int32", + "type": "integer" + }, + "flavorConfig": { + "$ref": "#/definitions/v1OpenstackFlavorConfig" + }, + "subnet": { + "$ref": "#/definitions/v1OpenStackResource" + } + }, + "required": [ + "flavorConfig" + ], + "type": "object" + }, + "v1OpenStackMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "azs": { + "description": "for control plane pool, this will be the failure domains for kcp", + "items": { + "type": "string" + }, + "type": "array" + }, + "diskGiB": { + "description": "DiskGiB is used to configure rootVolume, the volume metadata to boot from", + "format": "int32", + "type": "integer" + }, + "flavor": { + "description": "Openstack flavor name, only return argument", + "type": "string" + }, + "flavorConfig": { + "$ref": "#/definitions/v1OpenstackFlavorConfig", + "description": "Openstack flavor configuration, input argument" + }, + "image": { + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "subnet": { + "$ref": "#/definitions/v1OpenStackResource" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + }, + "required": [ + "flavorConfig" + ], + "type": "object" + }, + "v1OpenStackMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1OpenStackMachinePoolCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + }, + "v1OpenStackMachineSpec": { + "description": "OpenStack cloud VM definition spec", + "properties": { + "az": { + "type": "string" + }, + "image": { + "type": "string" + }, + "instanceType": { + "$ref": "#/definitions/v1GenericInstanceType", + "description": "Instance flavor of the machine with cpu and memory info" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1OpenStackNic" + }, + "type": "array" + }, + "projectId": { + "type": "string" + }, + "securityGroups": { + "items": { + "type": "string" + }, + "type": "array" + }, + "sshKeyName": { + "type": "string" + } + }, + "required": [ + "instanceType", + "nics" + ], + "type": "object" + }, + "v1OpenStackMachines": { + "description": "OpenStack machine list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1OpenStackMachine" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1OpenStackNetwork": { + "description": "OpenStack network", + "properties": { + "description": { + "description": "Description of OpenStack network", + "type": "string" + }, + "id": { + "description": "Id of OpenStack network", + "type": "string" + }, + "name": { + "description": "Name of OpenStack network", + "type": "string" + }, + "subnets": { + "description": "Subnets associated with OpenStack network", + "items": { + "$ref": "#/definitions/v1OpenStackSubnet" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1OpenStackNetworks": { + "description": "List of OpenStack networks", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1OpenStackNetwork" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1OpenStackNic": { + "description": "OpenStack network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "networkName" + ], + "type": "object" + }, + "v1OpenStackProject": { + "description": "Project represents an OpenStack Identity Project", + "properties": { + "description": { + "description": "Description is the description of the project", + "type": "string" + }, + "domainId": { + "description": "DomainID is the domain ID the project belongs to", + "type": "string" + }, + "id": { + "description": "ID is the unique ID of the project", + "type": "string" + }, + "name": { + "description": "Name is the name of the project", + "type": "string" + }, + "parentProjectId": { + "description": "ParentID is the parent_id of the project", + "type": "string" + } + }, + "type": "object" + }, + "v1OpenStackProjects": { + "description": "Array of OpenStack projects", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1OpenStackProject" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1OpenStackRegion": { + "description": "OpenStack region entity", + "properties": { + "description": { + "description": "Description of OpenStack region", + "type": "string" + }, + "id": { + "description": "Id of OpenStack region", + "type": "string" + }, + "parentRegionId": { + "description": "Parent region id of OpenStack region", + "type": "string" + } + }, + "type": "object" + }, + "v1OpenStackRegions": { + "description": "List of OpenStack regions and domains", + "properties": { + "domains": { + "description": "List of OpenStack domains", + "items": { + "$ref": "#/definitions/v1OpenStackDomain" + }, + "type": "array", + "uniqueItems": true + }, + "regions": { + "description": "List of OpenStack regions", + "items": { + "$ref": "#/definitions/v1OpenStackRegion" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "regions", + "domains" + ], + "type": "object" + }, + "v1OpenStackResource": { + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1OpenStackSubnet": { + "description": "OpenStack subnet entity", + "properties": { + "description": { + "description": "Description for the network", + "type": "string" + }, + "id": { + "description": "UUID for the network", + "type": "string" + }, + "name": { + "description": "Human-readable name for the network. Might not be unique", + "type": "string" + } + }, + "type": "object" + }, + "v1OpenstackFlavorConfig": { + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB.", + "format": "int32", + "type": "integer" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB.", + "format": "int64", + "type": "integer" + }, + "name": { + "description": "Openstack flavor name", + "type": "string" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine.", + "format": "int32", + "type": "integer" + } + }, + "required": [ + "name" + ] + }, + "v1OrgState": { + "description": "Org state", + "properties": { + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1Organization": { + "description": "Describes user's organization details", + "properties": { + "authType": { + "description": "Describes user's enabled authorization mode", + "type": "string" + }, + "name": { + "description": "Describes user's organization name", + "type": "string" + }, + "redirectUrl": { + "description": "Describes user's organization authentication url", + "type": "string" + }, + "ssoLogins": { + "$ref": "#/definitions/v1SsoLogins", + "description": "Describes a list of allowed social logins for the organization" + } + }, + "type": "object" + }, + "v1Organizations": { + "description": "Returns a list of user's organizations details and login methods", + "properties": { + "organizations": { + "description": "Describes a list of user's organization", + "items": { + "$ref": "#/definitions/v1Organization" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1OsPatchConfig": { + "properties": { + "onDemandPatchAfter": { + "$ref": "#/definitions/v1Time", + "description": "OnDemandPatchAfter is the desired time for one time on-demand patch" + }, + "patchOnBoot": { + "description": "PatchOnBoot indicates need to do patch when node first boot up, only once", + "type": "boolean", + "x-omitempty": false + }, + "rebootIfRequired": { + "description": "Reboot once the OS patch is applied", + "type": "boolean", + "x-omitempty": false + }, + "schedule": { + "description": "The schedule at which security patches will be applied to OS. Schedule should be in Cron format, see https://en.wikipedia.org/wiki/Cron for more help.", + "type": "string" + } + }, + "type": "object" + }, + "v1OsPatchEntity": { + "properties": { + "osPatchConfig": { + "$ref": "#/definitions/v1OsPatchConfig" + } + }, + "type": "object" + }, + "v1OsType": { + "default": "Linux", + "enum": [ + "Linux", + "Windows" + ], + "type": "string" + }, + "v1OverloadSpec": { + "description": "Overload spec", + "properties": { + "cloudAccountUid": { + "type": "string", + "x-omitempty": false + }, + "ipAddress": { + "type": "string" + }, + "ipPools": { + "items": { + "$ref": "#/definitions/v1IpPoolEntity" + }, + "type": "array" + }, + "isSelfHosted": { + "type": "boolean" + }, + "isSystem": { + "type": "boolean" + }, + "spectroClusterUid": { + "type": "string", + "x-omitempty": false + }, + "tenantUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1OverloadStatus": { + "description": "Overload status", + "properties": { + "health": { + "$ref": "#/definitions/v1SpectroClusterHealthStatus" + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "isReady": { + "type": "boolean", + "x-omitempty": false + }, + "kubectlCommands": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "notifications": { + "$ref": "#/definitions/v1ClusterNotificationStatus" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1OverloadVsphereOva": { + "description": "Overload ova details", + "properties": { + "location": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1Overlord": { + "description": "Overlord defintiion", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1OverloadSpec" + }, + "status": { + "$ref": "#/definitions/v1OverloadStatus" + } + }, + "type": "object" + }, + "v1OverlordMaasAccountCreate": { + "properties": { + "account": { + "$ref": "#/definitions/v1MaasCloudAccount" + }, + "name": { + "description": "Name for the private gateway \u0026 cloud account", + "type": "string" + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordMaasAccountEntity": { + "properties": { + "account": { + "$ref": "#/definitions/v1MaasCloudAccount" + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordMaasCloudConfig": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1MaasClusterConfig" + }, + "clusterProfiles": { + "description": "Cluster profiles pack configuration for private gateway cluster", + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + }, + "clusterSettings": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "clusterSettings is the generic configuration related to a cluster like OS patch, Rbac, Namespace allocation" + }, + "machineConfig": { + "$ref": "#/definitions/v1MaasMachineConfigEntity" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + } + } + }, + "v1OverlordManifest": { + "description": "overlord manifest", + "properties": { + "manifest": { + "type": "string" + } + }, + "type": "object" + }, + "v1OverlordMigrateEntity": { + "properties": { + "sourceUid": { + "type": "string" + }, + "targetUid": { + "type": "string" + } + } + }, + "v1OverlordOpenStackAccountCreate": { + "properties": { + "account": { + "$ref": "#/definitions/v1OpenStackCloudAccount" + }, + "name": { + "description": "Name for the private gateway \u0026 cloud account", + "type": "string" + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordOpenStackAccountEntity": { + "properties": { + "account": { + "$ref": "#/definitions/v1OpenStackCloudAccount" + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordOpenStackCloudConfig": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1OpenStackClusterConfig" + }, + "clusterProfiles": { + "description": "Cluster profiles pack configuration for private gateway cluster", + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + }, + "clusterSettings": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "clusterSettings is the generic configuration related to a cluster like OS patch, Rbac, Namespace allocation" + }, + "machineConfig": { + "$ref": "#/definitions/v1OpenStackMachineConfigEntity" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + } + } + }, + "v1OverlordVsphereAccountCreate": { + "properties": { + "account": { + "$ref": "#/definitions/v1VsphereCloudAccount" + }, + "name": { + "description": "Name for the private gateway \u0026 cloud account", + "type": "string" + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordVsphereAccountEntity": { + "properties": { + "account": { + "$ref": "#/definitions/v1VsphereCloudAccount" + }, + "shareWithProjects": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1OverlordVsphereCloudConfig": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1VsphereOverlordClusterConfigEntity" + }, + "clusterProfiles": { + "description": "Cluster profiles pack configuration for private gateway cluster", + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + }, + "clusterSettings": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "clusterSettings is the generic configuration related to a cluster like OS patch, Rbac, Namespace allocation" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + } + } + }, + "v1Overlords": { + "description": "Array of Overlords", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1Overlord" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1PackConfig": { + "description": "Pack configuration", + "properties": { + "spec": { + "$ref": "#/definitions/v1PackConfigSpec" + } + }, + "type": "object" + }, + "v1PackConfigSpec": { + "properties": { + "associatedObject": { + "type": "string" + }, + "isValuesOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "manifests": { + "items": { + "$ref": "#/definitions/v1PackManifestRef" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "values": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1PackDependency": { + "description": "Pack template dependency", + "properties": { + "layer": { + "description": "Pack template dependency pack layer", + "type": "string" + }, + "name": { + "description": "Pack template dependency pack name", + "type": "string" + }, + "readOnly": { + "description": "If true then dependency pack values can't be overridden", + "type": "boolean" + } + }, + "type": "object" + }, + "v1PackDependencyMeta": { + "description": "Pack dependency metadata", + "properties": { + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + }, + "type": "object" + }, + "v1PackEntity": { + "description": "Pack object", + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "$ref": "#/definitions/v1PackType" + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + }, + "required": [ + "uid", + "name" + ], + "type": "object" + }, + "v1PackFilterSpec": { + "description": "Packs filter spec", + "properties": { + "addOnSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "addOnType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "displayName": { + "$ref": "#/definitions/v1FilterString" + }, + "environment": { + "description": "Pack supported cloud types", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "isFips": { + "description": "isFips compliant", + "type": "boolean" + }, + "layer": { + "description": "Pack layer", + "items": { + "$ref": "#/definitions/v1PackLayer" + }, + "type": "array", + "uniqueItems": true + }, + "name": { + "$ref": "#/definitions/v1FilterString" + }, + "registryUid": { + "description": "Pack registry uid", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "source": { + "description": "The source filter describes the creation origin/source of the pack. Ex. source can be \"spectrocloud\" or \"community\"", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "state": { + "description": "Pack state such as deprecated or disabled", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "type": { + "description": "Pack type", + "items": { + "$ref": "#/definitions/v1PackType" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1PackImportEntity": { + "description": "Pack import request payload", + "properties": { + "layer": { + "description": "Pack layer [ \"os\", \"k8s\", \"cni\", \"csi\", \"addon\" ]", + "type": "string" + }, + "manifests": { + "description": "Pack manifests array", + "items": { + "$ref": "#/definitions/v1PackManifestImportEntity" + }, + "type": "array" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registry": { + "$ref": "#/definitions/v1PackRegistryImportEntity" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "description": "Pack type [ \"spectro\", \"helm\", \"manifest\", \"oci\" ]", + "type": "string" + }, + "values": { + "description": "Pack values are the customizable configurations for the pack", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + }, + "type": "object" + }, + "v1PackInputEntity": { + "description": "Pack request payload", + "properties": { + "pack": { + "$ref": "#/definitions/v1PackManifestEntity" + } + } + }, + "v1PackLayer": { + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ], + "type": "string" + }, + "v1PackManifestEntity": { + "description": "Pack request payload", + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "items": { + "$ref": "#/definitions/v1ManifestInputEntity" + }, + "type": "array" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "$ref": "#/definitions/v1PackType" + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1PackManifestImportEntity": { + "description": "Pack manifest import objct", + "properties": { + "content": { + "description": "Pack manifest content in yaml", + "type": "string" + }, + "name": { + "description": "Pack manifest name", + "type": "string" + } + }, + "type": "object" + }, + "v1PackManifestRef": { + "properties": { + "digest": { + "type": "string" + }, + "isOverridden": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "parentUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1PackManifestUpdateEntity": { + "description": "Pack input entity with values to overwrite and manifests for the intial creation", + "properties": { + "layer": { + "description": "Pack layer", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "items": { + "$ref": "#/definitions/v1ManifestRefUpdateEntity" + }, + "type": "array" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tag": { + "description": "Pack tag", + "type": "string" + }, + "type": { + "$ref": "#/definitions/v1PackType" + }, + "uid": { + "description": "Pack uid", + "type": "string" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1PackManifests": { + "properties": { + "items": { + "description": "Manifests array", + "items": { + "$ref": "#/definitions/v1Manifest" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1PackManifestsSpec": { + "description": "Pack manifests spec", + "properties": { + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object" + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "items": { + "type": "string" + }, + "type": "array" + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "$ref": "#/definitions/v1PackLayer" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "items": { + "$ref": "#/definitions/v1ManifestSummary" + }, + "type": "array" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "items": { + "$ref": "#/definitions/v1PackPreset" + }, + "type": "array" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "items": { + "$ref": "#/definitions/v1PackSchema" + }, + "type": "array" + }, + "type": { + "$ref": "#/definitions/v1PackType" + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + }, + "type": "object" + }, + "v1PackMetadata": { + "description": "Pack metadata object", + "properties": { + "apiVersion": { + "description": "Pack api version", + "type": "string" + }, + "kind": { + "description": "Pack kind", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1PackMetadataSpec" + } + }, + "type": "object" + }, + "v1PackMetadataList": { + "description": "List of packs metadata", + "properties": { + "items": { + "description": "Packs metadata array", + "items": { + "$ref": "#/definitions/v1PackMetadata" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1PackMetadataSpec": { + "description": "Pack metadata spec", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "items": { + "type": "string" + }, + "type": "array" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "$ref": "#/definitions/v1PackLayer" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "registries": { + "description": "Pack registries array", + "items": { + "$ref": "#/definitions/v1RegistryPackMetadata" + }, + "type": "array" + }, + "type": { + "$ref": "#/definitions/v1PackType" + } + }, + "type": "object" + }, + "v1PackParamsEntity": { + "description": "Pack params request payload", + "properties": { + "references": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1PackPreset": { + "description": "PackPreset defines the preset pack values", + "properties": { + "add": { + "type": "string", + "x-omitempty": false + }, + "displayName": { + "type": "string", + "x-omitempty": false + }, + "group": { + "type": "string", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "remove": { + "items": { + "type": "string" + }, + "type": "array", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1PackReadme": { + "properties": { + "readme": { + "description": "Readme describes the documentation of the specified pack", + "type": "string" + } + } + }, + "v1PackRef": { + "description": "PackRef server/name:tag to point to a pack PackRef is used when construct a ClusterProfile PackSpec is used for UI to render the parameters form ClusterProfile will not know inner details of a pack ClusterProfile only contain pack name:tag, and the param values user entered for it", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations is used to allow packref to add more arbitrary information one example is to add git reference for values.yaml", + "type": "object" + }, + "digest": { + "description": "digest is used to specify the version should be installed by palette when pack upgrade available, change this digest to trigger upgrade", + "type": "string" + }, + "inValidReason": { + "type": "string" + }, + "isInvalid": { + "description": "pack is invalid when the associated tag is deleted from the registry", + "type": "boolean" + }, + "layer": { + "enum": [ + "kernel", + "os", + "k8s", + "cni", + "csi", + "addon" + ], + "type": "string" + }, + "logo": { + "description": "path to the pack logo", + "type": "string" + }, + "manifests": { + "items": { + "$ref": "#/definitions/v1ObjectReference" + }, + "type": "array" + }, + "name": { + "description": "pack name", + "type": "string" + }, + "packUid": { + "description": "PackUID is Hubble packUID, not palette Pack.UID It is used by Hubble only.", + "type": "string" + }, + "params": { + "additionalProperties": { + "type": "string" + }, + "description": "params passed as env variables to be consumed at installation time", + "type": "object" + }, + "presets": { + "items": { + "$ref": "#/definitions/v1PackPreset" + }, + "type": "array" + }, + "registryUid": { + "description": "pack registry uid", + "type": "string" + }, + "schema": { + "items": { + "$ref": "#/definitions/v1PackSchema" + }, + "type": "array" + }, + "server": { + "description": "pack registry server or helm repo", + "type": "string" + }, + "tag": { + "description": "pack tag", + "type": "string" + }, + "type": { + "description": "type of the pack", + "enum": [ + "spectro", + "helm", + "manifest" + ], + "type": "string" + }, + "values": { + "description": "values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + }, + "version": { + "description": "pack version", + "type": "string" + } + }, + "required": [ + "layer", + "name" + ], + "type": "object" + }, + "v1PackRefSummary": { + "description": "Pack ref summary", + "properties": { + "addonType": { + "type": "string" + }, + "annotations": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "displayName": { + "type": "string" + }, + "layer": { + "$ref": "#/definitions/v1PackLayer" + }, + "logoUrl": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packUid": { + "type": "string" + }, + "tag": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1PackRefSummaryResponse": { + "description": "Pack summary response", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1PackRefSummarySpec" + } + }, + "type": "object" + }, + "v1PackRefSummarySpec": { + "description": "Pack summary spec", + "properties": { + "macros": { + "$ref": "#/definitions/v1PackResolvedValues" + }, + "pack": { + "$ref": "#/definitions/v1PackSummarySpec" + }, + "registry": { + "$ref": "#/definitions/v1RegistryMetadata" + } + } + }, + "v1PackRegistries": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1PackRegistry" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1PackRegistriesSummary": { + "description": "Pack Registries Summary", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1PackRegistrySummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1PackRegistry": { + "description": "Pack registry information", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1PackRegistrySpec" + }, + "status": { + "$ref": "#/definitions/v1PackRegistryStatus" + } + }, + "type": "object" + }, + "v1PackRegistryImportEntity": { + "description": "Pack registry import entity", + "properties": { + "matchingRegistries": { + "items": { + "$ref": "#/definitions/v1PackRegistryMetadata" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1PackRegistryMetadata" + } + }, + "type": "object" + }, + "v1PackRegistryMetadata": { + "description": "Pack registry metadata", + "properties": { + "isPrivate": { + "description": "If true then pack registry is private and is not accessible for the pack sync", + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "description": "Pack registry kind [ \"pack\", \"helm\", \"oci\" ]", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "providerType": { + "description": "OCI registry provider type [ \"helm\", \"pack\", \"zarf\" ]", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + }, + "type": "object" + }, + "v1PackRegistrySpec": { + "description": "Pack registry credentials spec", + "properties": { + "auth": { + "$ref": "#/definitions/v1RegistryAuth" + }, + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + }, + "private": { + "type": "boolean", + "x-omitempty": false + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "scope": { + "type": "string" + } + }, + "required": [ + "endpoint", + "auth" + ], + "type": "object" + }, + "v1PackRegistrySpecSummary": { + "description": "Pack Registry spec summary", + "properties": { + "endpoint": { + "type": "string" + }, + "private": { + "type": "boolean", + "x-omitempty": false + }, + "scope": { + "type": "string" + } + }, + "type": "object" + }, + "v1PackRegistryStatus": { + "description": "Status of the pack registry", + "properties": { + "packSyncStatus": { + "$ref": "#/definitions/v1RegistrySyncStatus" + } + }, + "type": "object" + }, + "v1PackRegistryStatusSummary": { + "description": "Pack registry status summary", + "properties": { + "sync": { + "$ref": "#/definitions/v1RegistrySyncStatus" + } + }, + "type": "object" + }, + "v1PackRegistrySummary": { + "description": "Pack Registry summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1PackRegistrySpecSummary" + }, + "status": { + "$ref": "#/definitions/v1PackRegistryStatusSummary" + } + }, + "type": "object" + }, + "v1PackResolvedValues": { + "description": "Pack resolved values", + "properties": { + "resolved": { + "additionalProperties": { + "type": "string" + }, + "description": "Pack resolved values map", + "type": "object" + } + } + }, + "v1PackSchema": { + "description": "PackSchema defines the schema definition, hints for the pack values", + "properties": { + "format": { + "type": "string", + "x-omitempty": false + }, + "hints": { + "items": { + "type": "string" + }, + "type": "array", + "x-omitempty": false + }, + "listOptions": { + "items": { + "type": "string" + }, + "type": "array", + "x-omitempty": false + }, + "name": { + "type": "string", + "x-omitempty": false + }, + "readonly": { + "type": "boolean", + "x-omitempty": false + }, + "regex": { + "type": "string", + "x-omitempty": false + }, + "required": { + "type": "boolean", + "x-omitempty": false + }, + "type": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1PackSortFields": { + "description": "Packs sort by fields", + "enum": [ + "name", + "type", + "layer", + "addOnType", + "displayName" + ], + "type": "string", + "x-nullable": true + }, + "v1PackSortSpec": { + "description": "Packs sort spec", + "properties": { + "field": { + "$ref": "#/definitions/v1PackSortFields" + }, + "order": { + "$ref": "#/definitions/v1SortOrder" + } + } + }, + "v1PackSummaries": { + "description": "List of packs", + "properties": { + "items": { + "description": "Packs array", + "items": { + "$ref": "#/definitions/v1PackSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1PackSummary": { + "description": "Pack summary object", + "properties": { + "apiVersion": { + "description": "Pack api version", + "type": "string" + }, + "kind": { + "description": "Pack kind", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1PackSummarySpec" + }, + "status": { + "$ref": "#/definitions/v1PackSummaryStatus" + } + }, + "type": "object" + }, + "v1PackSummarySpec": { + "description": "Pack object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object" + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "items": { + "type": "string" + }, + "type": "array" + }, + "digest": { + "description": "Pack digest", + "type": "string" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "eol": { + "description": "Pack end of life, date format: yyyy-MM-dd", + "type": "string" + }, + "group": { + "description": "Pack group", + "type": "string" + }, + "layer": { + "$ref": "#/definitions/v1PackLayer" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "manifests": { + "description": "Pack manifests are additional content as part of the cluster profile", + "items": { + "$ref": "#/definitions/v1ObjectReference" + }, + "type": "array" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "items": { + "$ref": "#/definitions/v1PackPreset" + }, + "type": "array" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "items": { + "$ref": "#/definitions/v1PackSchema" + }, + "type": "array" + }, + "template": { + "$ref": "#/definitions/v1PackTemplate" + }, + "type": { + "$ref": "#/definitions/v1PackType" + }, + "values": { + "description": "Pack values", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + }, + "type": "object" + }, + "v1PackSummaryStatus": { + "description": "Pack status", + "type": "object" + }, + "v1PackTagEntity": { + "description": "Pack object", + "properties": { + "addonSubType": { + "description": "Pack add-on sub type such as monitoring, db etc", + "type": "string" + }, + "addonType": { + "description": "Pack add-on type such as logging, monitoring, security etc", + "type": "string" + }, + "cloudTypes": { + "description": "Pack supported cloud types", + "items": { + "type": "string" + }, + "type": "array" + }, + "displayName": { + "description": "Pack display name", + "type": "string" + }, + "layer": { + "$ref": "#/definitions/v1PackLayer" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "packValues": { + "description": "Pack values array", + "items": { + "$ref": "#/definitions/v1PackUidValues" + }, + "type": "array" + }, + "registryUid": { + "description": "Pack registry uid", + "type": "string" + }, + "tags": { + "description": "Pack version tags array", + "items": { + "$ref": "#/definitions/v1PackTags" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1PackTags": { + "properties": { + "group": { + "description": "Pack group", + "type": "string" + }, + "packUid": { + "description": "Pack uid", + "type": "string" + }, + "parentTags": { + "description": "Pack version parent tags", + "items": { + "type": "string" + }, + "type": "array" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "version": { + "description": "Pack version", + "type": "string" + } + }, + "type": "object" + }, + "v1PackTemplate": { + "description": "Pack template configuration", + "properties": { + "manifest": { + "description": "Pack template manifest content", + "type": "string" + }, + "parameters": { + "$ref": "#/definitions/v1PackTemplateParameters" + }, + "values": { + "description": "Pack template values", + "type": "string" + } + } + }, + "v1PackTemplateParameter": { + "description": "Pack template parameter", + "properties": { + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "displayName": { + "description": "Pack template parameter display name", + "type": "string" + }, + "format": { + "description": "Pack template parameter format", + "type": "string" + }, + "hidden": { + "description": "Pack template parameter hidden flag, if true then the parameter is hidden in the UI", + "type": "boolean" + }, + "listOptions": { + "description": "Pack template parameter list options as string array", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "description": "Pack template parameter name", + "type": "string" + }, + "optional": { + "description": "Pack template parameter optional flag, if true then the parameter value is not mandatory", + "type": "boolean" + }, + "options": { + "additionalProperties": { + "$ref": "#/definitions/v1PackTemplateParameterOption", + "type": "object" + }, + "description": "Pack template parameter options array", + "type": "object" + }, + "readOnly": { + "description": "Pack template parameter readonly flag, if true then the parameter value can't be overridden", + "type": "boolean" + }, + "regex": { + "description": "Pack template parameter regex, if set then parameter value must match with specified regex", + "type": "string" + }, + "targetKey": { + "description": "Pack template parameter target key which is mapped to the key defined in the pack values", + "type": "string" + }, + "type": { + "description": "Pack template parameter data type", + "type": "string" + }, + "value": { + "description": "Pack template parameter value", + "type": "string" + } + } + }, + "v1PackTemplateParameterOption": { + "description": "Pack template parameter option", + "properties": { + "dependencies": { + "description": "Pack template parameter dependencies", + "items": { + "$ref": "#/definitions/v1PackDependency" + }, + "type": "array" + }, + "description": { + "description": "Pack template parameter description", + "type": "string" + }, + "label": { + "description": "Pack template parameter label", + "type": "string" + } + }, + "type": "object" + }, + "v1PackTemplateParameters": { + "description": "Pack template parameters", + "properties": { + "inputParameters": { + "description": "Pack template input parameters array", + "items": { + "$ref": "#/definitions/v1PackTemplateParameter" + }, + "type": "array" + }, + "outputParameters": { + "description": "Pack template output parameters array", + "items": { + "$ref": "#/definitions/v1PackTemplateParameter" + }, + "type": "array" + } + } + }, + "v1PackType": { + "default": "spectro", + "enum": [ + "spectro", + "helm", + "manifest", + "oci" + ], + "type": "string" + }, + "v1PackUidValues": { + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object" + }, + "dependencies": { + "description": "Pack dependencies array", + "items": { + "$ref": "#/definitions/v1PackDependencyMeta" + }, + "type": "array" + }, + "packUid": { + "description": "Pack uid", + "type": "string" + }, + "presets": { + "description": "Pack presets are the set of configurations applied on user selection of presets", + "items": { + "$ref": "#/definitions/v1PackPreset" + }, + "type": "array" + }, + "readme": { + "description": "Readme describes the documentation of the specified pack", + "type": "string" + }, + "schema": { + "description": "Pack schema contains constraints such as data type, format, hints for the pack values", + "items": { + "$ref": "#/definitions/v1PackSchema" + }, + "type": "array" + }, + "template": { + "$ref": "#/definitions/v1PackTemplate" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters", + "type": "string" + } + }, + "type": "object" + }, + "v1PackUpdateEntity": { + "description": "Pack update request payload", + "properties": { + "pack": { + "$ref": "#/definitions/v1PackEntity" + } + } + }, + "v1PackValuesEntity": { + "description": "Pack values entity to refer the existing pack for the values override", + "properties": { + "manifests": { + "description": "Pack manifests are additional content as part of the profile", + "items": { + "$ref": "#/definitions/v1ManifestRefUpdateEntity" + }, + "type": "array" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "tag": { + "description": "Pack version tag", + "type": "string" + }, + "type": { + "$ref": "#/definitions/v1PackType" + }, + "values": { + "description": "Pack values represents the values.yaml used as input parameters either Params OR Values should be used, not both If both applied at the same time, will only use Values", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1PacksFilterSpec": { + "description": "Packs filter spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1PackFilterSpec" + }, + "sort": { + "items": { + "$ref": "#/definitions/v1PackSortSpec" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1PairingCode": { + "description": "Pairing code response", + "properties": { + "pairingCode": { + "type": "string" + } + }, + "type": "object" + }, + "v1Partition": { + "properties": { + "fileSystemType": { + "type": "string" + }, + "freeSpace": { + "format": "int32", + "type": "integer" + }, + "mountPoint": { + "type": "string" + }, + "totalSpace": { + "format": "int32", + "type": "integer" + }, + "usedSpace": { + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1PasswordsBlockListEntity": { + "description": "List of block listed passwords", + "properties": { + "passwords": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1PaymentIntent": { + "description": "Payment setup object", + "properties": { + "clientSecret": { + "description": "Payment client secret", + "type": "string" + }, + "paymentIntentId": { + "description": "Payment intent id", + "type": "string" + }, + "status": { + "description": "Status of payment intent", + "type": "string" + } + } + }, + "v1PaymentMethod": { + "description": "Payment method object", + "properties": { + "card": { + "$ref": "#/definitions/v1Card" + }, + "customerId": { + "description": "Customer uid", + "type": "string" + }, + "firstName": { + "description": "First name of the user", + "type": "string" + }, + "lastName": { + "description": "Last name of the user", + "type": "string" + }, + "paymentMethodId": { + "description": "Payment method uid", + "type": "string" + } + } + }, + "v1PaymentMethods": { + "description": "Payment Method list", + "properties": { + "defaultPaymentMethod": { + "description": "Default payment method", + "type": "string" + }, + "paymentMethods": { + "description": "List of payment method", + "items": { + "$ref": "#/definitions/v1PaymentMethod" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1PaymentPlan": { + "description": "Stripe price detail object", + "properties": { + "billingScheme": { + "description": "Billing scheme", + "type": "string" + }, + "currency": { + "description": "Unit of currency", + "type": "string" + }, + "id": { + "description": "Stripe payment plan id", + "type": "string" + }, + "name": { + "description": "Name of the stripe plan", + "type": "string" + }, + "productId": { + "description": "Product identifier", + "type": "string" + }, + "type": { + "description": "Type of payment plan", + "type": "string" + }, + "unitAmount": { + "description": "Unit amount for the product", + "format": "int64", + "type": "number" + } + } + }, + "v1PaymentPlans": { + "description": "Payment plan object model", + "properties": { + "stripePlanDetails": { + "description": "List of Stripe plan details", + "items": { + "$ref": "#/definitions/v1PaymentPlan" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "stripePlanDetails" + ], + "type": "object" + }, + "v1PaymentSecrets": { + "description": "payment secrets", + "properties": { + "publishableKey": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + }, + "v1PaymentSubscription": { + "description": "Payment subscription object", + "properties": { + "customerId": { + "description": "Customer uid", + "type": "string" + }, + "paymentIntent": { + "$ref": "#/definitions/v1PaymentIntent", + "description": "Payment intent" + }, + "paymentMethodIds": { + "description": "List of payment method uids", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "planType": { + "description": "Plan type", + "type": "string" + }, + "priceId": { + "description": "Price uid", + "type": "string" + }, + "subscriptionId": { + "description": "Subscription uid", + "type": "string" + }, + "subscriptionState": { + "description": "Plan subscription state", + "type": "string" + } + } + }, + "v1PcgSelfHostedParams": { + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1PcgServiceKubectlCommands": { + "description": "Array of kubectl commands", + "properties": { + "kubectlCommands": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "overlordUid": { + "type": "string" + } + }, + "required": [ + "kubectlCommands" + ], + "type": "object" + }, + "v1PcgsSummary": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1Overlord" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1Permission": { + "description": "Permission information", + "properties": { + "name": { + "type": "string" + }, + "permissions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "scope": { + "$ref": "#/definitions/v1Scope" + } + }, + "type": "object" + }, + "v1Permissions": { + "description": "Array of permissions", + "items": { + "$ref": "#/definitions/v1Permission" + }, + "type": "array" + }, + "v1Plan": { + "description": "Plan", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1PlanSpec" + }, + "status": { + "$ref": "#/definitions/v1PlanStatus" + } + } + }, + "v1PlanAddFreeCreditUpdate": { + "description": "Plan add free credit update entity", + "properties": { + "credit": { + "$ref": "#/definitions/v1PlanCreditEntity" + } + } + }, + "v1PlanAddSlaCreditUpdate": { + "description": "Plan add sla credit update entity", + "properties": { + "credit": { + "$ref": "#/definitions/v1PlanCreditEntity" + } + } + }, + "v1PlanChangeUpdate": { + "description": "Plan change update entity", + "properties": { + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "plan expiry time" + }, + "isPaymentGateway": { + "type": "boolean" + }, + "planLimit": { + "$ref": "#/definitions/v1PlanLimit" + }, + "start": { + "$ref": "#/definitions/v1Time", + "description": "plan start time" + }, + "tierPrice": { + "$ref": "#/definitions/v1TierPrice" + }, + "type": { + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ], + "type": "string" + } + }, + "required": [ + "type", + "start", + "expiry" + ] + }, + "v1PlanCost": { + "description": "Plan Cost", + "properties": { + "discount": { + "format": "float", + "type": "number", + "x-omitempty": false + }, + "price": { + "format": "float", + "type": "number", + "x-omitempty": false + } + } + }, + "v1PlanCpuCoreHoursUsages": { + "properties": { + "hourlyUsages": { + "items": { + "$ref": "#/definitions/v1ResourceUsage" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1PlanCredit": { + "description": "Plan Credit", + "properties": { + "cpuCoreHours": { + "format": "int64", + "type": "number", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "credit expiry time" + }, + "name": { + "type": "string" + }, + "start": { + "$ref": "#/definitions/v1Time", + "description": "credit start time" + }, + "type": { + "enum": [ + "Pure", + "Alloy" + ], + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "v1PlanCreditEntity": { + "description": "Plan Credit entity for create/update request", + "properties": { + "cpuCoreHours": { + "format": "int64", + "type": "number", + "x-omitempty": false + }, + "expiry": { + "$ref": "#/definitions/v1Time" + }, + "name": { + "type": "string" + }, + "start": { + "$ref": "#/definitions/v1Time" + }, + "type": { + "enum": [ + "Pure", + "Alloy" + ], + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "v1PlanCreditUpdate": { + "description": "Plan credit update entity", + "properties": { + "credit": { + "$ref": "#/definitions/v1PlanCreditEntity" + } + } + }, + "v1PlanExpiry": { + "description": "Plan expiry", + "properties": { + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "plan expiry time" + } + }, + "required": [ + "expiry" + ] + }, + "v1PlanLimit": { + "description": "Monthly Plan Limit", + "properties": { + "alloy": { + "$ref": "#/definitions/v1PlanLimitSpec" + }, + "isOnDemand": { + "description": "is onDemand plan and has no limit", + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "$ref": "#/definitions/v1PlanLimitSpec" + } + } + }, + "v1PlanLimitSpec": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "format": "int64", + "type": "integer", + "x-omitempty": false + }, + "overageLimitPercentage": { + "default": 25, + "description": "overage limit in percentage", + "format": "int8", + "type": "integer", + "x-omitempty": false + }, + "warnLimitPercentage": { + "default": 90, + "description": "warning limit in percentage", + "format": "int8", + "type": "integer", + "x-omitempty": false + } + } + }, + "v1PlanLimitUpdate": { + "description": "Plan limit change update entity", + "properties": { + "planLimit": { + "$ref": "#/definitions/v1PlanLimit" + } + }, + "required": [ + "planLimit" + ] + }, + "v1PlanMonthlyUsage": { + "description": "Plan monthly usage entity", + "properties": { + "dailyUsages": { + "items": { + "$ref": "#/definitions/v1ResourceUsage" + }, + "type": "array", + "uniqueItems": true + }, + "month": { + "$ref": "#/definitions/v1Time", + "description": "usage month" + }, + "planLimit": { + "$ref": "#/definitions/v1PlanLimit" + }, + "planType": { + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ], + "type": "string" + }, + "planUid": { + "type": "string" + }, + "totalMonthlyUsage": { + "$ref": "#/definitions/v1TotalResourceUsage" + } + } + }, + "v1PlanMonthlyUsages": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1PlanMonthlyUsage" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1PlanRenewal": { + "description": "Plan Renewal", + "properties": { + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "credit expiry time" + }, + "planLimit": { + "$ref": "#/definitions/v1PlanLimit" + }, + "start": { + "$ref": "#/definitions/v1Time", + "description": "credit start time" + }, + "type": { + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ], + "type": "string" + } + }, + "required": [ + "type", + "start", + "expiry" + ] + }, + "v1PlanRenewalUpdate": { + "description": "Plan add renawal update entity", + "properties": { + "renewal": { + "$ref": "#/definitions/v1PlanRenewal" + } + } + }, + "v1PlanSpec": { + "description": "Plan specifications", + "properties": { + "cost": { + "$ref": "#/definitions/v1PlanCost" + }, + "developerCredits": { + "$ref": "#/definitions/v1DeveloperCredit" + }, + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "plan expiry time" + }, + "freeCredits": { + "items": { + "$ref": "#/definitions/v1PlanCredit" + }, + "type": "array" + }, + "planLimit": { + "$ref": "#/definitions/v1PlanLimit" + }, + "renewal": { + "$ref": "#/definitions/v1PlanRenewal" + }, + "slaCredits": { + "items": { + "$ref": "#/definitions/v1PlanCredit" + }, + "type": "array" + }, + "start": { + "$ref": "#/definitions/v1Time", + "description": "plan start time" + }, + "tierPricing": { + "$ref": "#/definitions/v1TierPrice" + }, + "type": { + "enum": [ + "Trial", + "MonthlyOnDemand", + "AnnualSubscription" + ], + "type": "string" + } + }, + "required": [ + "type", + "start", + "expiry" + ] + }, + "v1PlanStatus": { + "properties": { + "changeLogs": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1Plans": { + "description": "Array of Plans", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1Plan" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1PlansUsageComputeSpec": { + "description": "Plans usage compute spec", + "properties": { + "startTime": { + "$ref": "#/definitions/v1Time" + }, + "tenantUids": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1PodAntiAffinity": { + "description": "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "items": { + "$ref": "#/definitions/v1VmWeightedPodAffinityTerm" + }, + "type": "array" + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "items": { + "$ref": "#/definitions/v1VmPodAffinityTerm" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1Pool": { + "description": "Pool defines IP ranges or with CIDR for available IPs Gateway, Prefix and Nameserver if provided, will overwrite values in IPPool", + "properties": { + "end": { + "description": "End is the last IP address that can be rendered. It is used as a validation that the rendered IP is in bound.", + "type": "string" + }, + "gateway": { + "description": "Gateway is the gateway ip address", + "type": "string" + }, + "nameserver": { + "$ref": "#/definitions/v1Nameserver", + "description": "Nameserver provide information for dns resolvation" + }, + "prefix": { + "description": "Prefix is the mask of the network as integer (max 128)", + "format": "int32", + "type": "integer" + }, + "start": { + "description": "Start is the first ip address that can be rendered", + "type": "string" + }, + "subnet": { + "description": "Subnet is used to validate that the rendered IP is in bounds. eg: 192.168.0.0/24 If Start value is not given, start value is derived from the subnet ip incremented by 1 (start value is `192.168.0.1` for subnet `192.168.0.0/24`)", + "type": "string" + } + }, + "type": "object" + }, + "v1PriceRange": { + "description": "tier price range", + "properties": { + "discount": { + "format": "int64", + "type": "number" + }, + "startFrom": { + "format": "float64", + "type": "number" + }, + "unitAmount": { + "format": "float64", + "type": "number" + }, + "upTo": { + "format": "float64", + "type": "number" + }, + "upToInfinity": { + "type": "boolean" + } + } + }, + "v1PrivateCloudRateConfig": { + "description": "Private cloud rate config", + "properties": { + "cpuUnitPricePerHour": { + "format": "float64", + "type": "number" + }, + "gpuUnitPricePerHour": { + "format": "float64", + "type": "number" + }, + "memoryUnitPriceGiBPerHour": { + "format": "float64", + "type": "number" + }, + "storageUnitPriceGiBPerHour": { + "format": "float64", + "type": "number" + } + } + }, + "v1ProductUsage": { + "description": "Product usage", + "properties": { + "alloyUsage": { + "$ref": "#/definitions/v1SystemProductUsage" + }, + "pureUsage": { + "$ref": "#/definitions/v1SystemProductUsage" + } + } + }, + "v1ProfileMetaEntity": { + "description": "Cluster profile metadata request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1ClusterProfileSpecEntity" + } + }, + "required": [ + "metadata" + ], + "type": "object" + }, + "v1ProfileResolvedValues": { + "description": "Cluster profile resolved pack values", + "properties": { + "resolved": { + "additionalProperties": { + "type": "string" + }, + "description": "Cluster profile pack resolved values", + "type": "object" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + } + }, + "v1ProfileStatus": { + "properties": { + "hasUserMacros": { + "description": "If it is true then profile pack values has a reference to user defined macros", + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ProfileTemplateSummary": { + "description": "Edge host clusterprofile template summary", + "properties": { + "cloudType": { + "type": "string" + }, + "name": { + "type": "string" + }, + "packs": { + "items": { + "$ref": "#/definitions/v1PackRefSummary" + }, + "type": "array" + }, + "type": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1ProfileType": { + "default": "cluster", + "enum": [ + "cluster", + "infra", + "add-on", + "system" + ], + "type": "string" + }, + "v1Project": { + "description": "Project information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ProjectSpec" + }, + "status": { + "$ref": "#/definitions/v1ProjectStatus" + } + }, + "type": "object" + }, + "v1ProjectActiveAppDeployment": { + "description": "Active app deployment", + "properties": { + "appRef": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1ProjectActiveAppDeployments": { + "description": "Active app deployment", + "properties": { + "apps": { + "items": { + "$ref": "#/definitions/v1ProjectActiveAppDeployment" + }, + "type": "array" + }, + "count": { + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1ProjectActiveCluster": { + "description": "Active clusters", + "properties": { + "clusterRef": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1ProjectActiveClusters": { + "description": "Active clusters", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1ProjectActiveCluster" + }, + "type": "array" + }, + "count": { + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1ProjectActiveResources": { + "description": "Active project resources", + "properties": { + "appDeployments": { + "$ref": "#/definitions/v1ProjectActiveAppDeployments" + }, + "clusters": { + "$ref": "#/definitions/v1ProjectActiveClusters" + }, + "virtualClusters": { + "$ref": "#/definitions/v1ProjectActiveClusters" + } + }, + "type": "object" + }, + "v1ProjectAlertComponent": { + "description": "Project alert component", + "properties": { + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "supportedChannels": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ProjectAlertComponents": { + "description": "Supported project alerts component", + "properties": { + "components": { + "items": { + "$ref": "#/definitions/v1ProjectAlertComponent" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ProjectCleanUpStatus": { + "description": "Project cleanup status", + "properties": { + "cleanedResources": { + "items": { + "type": "string" + }, + "type": "array" + }, + "msg": { + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1ProjectCleanup": { + "description": "Project delete request payload", + "properties": { + "deletingClusterDurationThresholdInMin": { + "format": "int32", + "type": "integer" + }, + "provisioningClusterDurationThresholdInMin": { + "format": "int32", + "type": "integer" + } + } + }, + "v1ProjectClusterSettings": { + "properties": { + "nodesAutoRemediationSetting": { + "$ref": "#/definitions/v1NodesAutoRemediationSettings" + }, + "tenantClusterSettings": { + "$ref": "#/definitions/v1TenantClusterSettings" + } + } + }, + "v1ProjectEntity": { + "description": "Project information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ProjectEntitySpec" + } + }, + "type": "object" + }, + "v1ProjectEntitySpec": { + "description": "Project specifications", + "properties": { + "logoUid": { + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/v1TeamRoleMap" + }, + "type": "array", + "uniqueItems": true + }, + "users": { + "items": { + "$ref": "#/definitions/v1UserRoleMap" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ProjectFilterSortFields": { + "enum": [ + "name", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "type": "string", + "x-nullable": true + }, + "v1ProjectFilterSortSpec": { + "properties": { + "field": { + "$ref": "#/definitions/v1ProjectFilterSortFields" + }, + "order": { + "$ref": "#/definitions/v1SortOrder" + } + } + }, + "v1ProjectFilterSpec": { + "description": "Project filter spec", + "properties": { + "name": { + "$ref": "#/definitions/v1FilterString" + } + } + }, + "v1ProjectMeta": { + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ProjectMetadata": { + "description": "Project metadata", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectEntity" + } + } + }, + "v1ProjectPatch": { + "items": { + "$ref": "#/definitions/v1HttpPatch" + }, + "type": "array" + }, + "v1ProjectResourceUsage": { + "description": "project resource usage", + "properties": { + "alloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "project": { + "$ref": "#/definitions/v1ProjectMeta" + }, + "pureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + }, + "v1ProjectRolesEntity": { + "properties": { + "projects": { + "items": { + "$ref": "#/definitions/v1UidRoleSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ProjectRolesPatch": { + "properties": { + "projects": { + "items": { + "properties": { + "projectUid": { + "type": "string" + }, + "roles": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ProjectSpec": { + "description": "Project specifications", + "properties": { + "alerts": { + "items": { + "$ref": "#/definitions/v1Alert" + }, + "type": "array", + "uniqueItems": true + }, + "logoUrl": { + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/v1TeamRoleMap" + }, + "type": "array", + "uniqueItems": true + }, + "users": { + "items": { + "$ref": "#/definitions/v1UserRoleMap" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ProjectSpecSummary": { + "properties": { + "logoUrl": { + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "users": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ProjectStatus": { + "description": "Project status", + "properties": { + "cleanUpStatus": { + "$ref": "#/definitions/v1ProjectCleanUpStatus" + }, + "isDisabled": { + "type": "boolean" + } + } + }, + "v1ProjectStatusSummary": { + "description": "Project status summary", + "properties": { + "clustersHealth": { + "$ref": "#/definitions/v1SpectroClustersHealth" + }, + "status": { + "$ref": "#/definitions/v1ProjectStatus" + }, + "usage": { + "$ref": "#/definitions/v1ProjectUsageSummary" + } + }, + "type": "object" + }, + "v1ProjectSummary": { + "description": "Project summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "specSummary": { + "$ref": "#/definitions/v1ProjectSpecSummary", + "description": "Project spec summary" + }, + "status": { + "$ref": "#/definitions/v1ProjectStatusSummary", + "description": "Project status summary" + } + }, + "type": "object" + }, + "v1ProjectTeamsEntity": { + "properties": { + "teams": { + "items": { + "$ref": "#/definitions/v1TeamRoleMap" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ProjectUsage": { + "description": "Project usage object", + "properties": { + "alloy": { + "$ref": "#/definitions/v1ProjectUsageData" + }, + "pure": { + "$ref": "#/definitions/v1ProjectUsageData" + } + } + }, + "v1ProjectUsageData": { + "description": "Project usage data object", + "properties": { + "amount": { + "description": "Billing amount for the project", + "format": "float64", + "type": "number" + }, + "tierPrice": { + "description": "Tier price based on the usage", + "format": "float64", + "type": "number" + }, + "usedCredits": { + "description": "Project used credits", + "format": "float64", + "type": "number" + } + } + }, + "v1ProjectUsageSummary": { + "description": "Project usage summary", + "properties": { + "alloyCpuCores": { + "type": "number", + "x-omitempty": false + }, + "clusters": { + "items": { + "$ref": "#/definitions/v1ClusterUsageSummary" + }, + "type": "array" + }, + "pureCpuCores": { + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ProjectUsersEntity": { + "properties": { + "users": { + "items": { + "$ref": "#/definitions/v1UserRoleMap" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1Projects": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1Project" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ProjectsFilterSpec": { + "description": "Project filter summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1ProjectFilterSpec" + }, + "sort": { + "items": { + "$ref": "#/definitions/v1ProjectFilterSortSpec" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1ProjectsMetadata": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1ProjectMetadata" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ProjectsSummary": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1ProjectSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1ProjectsWorkspaces": { + "description": "List projects and its workspaces", + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + }, + "workspaces": { + "items": { + "$ref": "#/definitions/v1WorkspacesRoles" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1PublicCloudRateConfig": { + "description": "Public cloud rate config", + "properties": { + "computeOptimized": { + "$ref": "#/definitions/v1CloudInstanceRateConfig" + }, + "memoryOptimized": { + "$ref": "#/definitions/v1CloudInstanceRateConfig" + } + } + }, + "v1RateConfig": { + "description": "Rate config", + "properties": { + "aws": { + "$ref": "#/definitions/v1PublicCloudRateConfig" + }, + "azure": { + "$ref": "#/definitions/v1PublicCloudRateConfig" + }, + "coxedge": { + "$ref": "#/definitions/v1PublicCloudRateConfig" + }, + "custom": { + "items": { + "$ref": "#/definitions/v1CustomCloudRateConfig" + }, + "type": "array", + "uniqueItems": true + }, + "edge": { + "$ref": "#/definitions/v1PrivateCloudRateConfig" + }, + "edgeNative": { + "$ref": "#/definitions/v1PrivateCloudRateConfig" + }, + "gcp": { + "$ref": "#/definitions/v1PublicCloudRateConfig" + }, + "generic": { + "$ref": "#/definitions/v1PrivateCloudRateConfig" + }, + "libvirt": { + "$ref": "#/definitions/v1PrivateCloudRateConfig" + }, + "maas": { + "$ref": "#/definitions/v1PrivateCloudRateConfig" + }, + "openstack": { + "$ref": "#/definitions/v1PrivateCloudRateConfig" + }, + "vsphere": { + "$ref": "#/definitions/v1PrivateCloudRateConfig" + } + } + }, + "v1RegistriesMetadata": { + "description": "Pack Registries Metadata", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1RegistryMetadata" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1RegistryAuth": { + "description": "Auth credentials of the registry", + "properties": { + "password": { + "format": "password", + "type": "string" + }, + "tls": { + "$ref": "#/definitions/v1TlsConfiguration" + }, + "token": { + "format": "password", + "type": "string" + }, + "type": { + "enum": [ + "noAuth", + "basic", + "token" + ], + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "v1RegistryConf": { + "description": "Registry configuration", + "properties": { + "auth": { + "$ref": "#/definitions/v1RegistryAuth" + }, + "endpoint": { + "type": "string" + } + }, + "type": "object" + }, + "v1RegistryConfigEntity": { + "description": "Registry configuration entity", + "properties": { + "config": { + "$ref": "#/definitions/v1RegistryConfiguration" + } + }, + "type": "object" + }, + "v1RegistryConfiguration": { + "description": "Registry configuration", + "properties": { + "auth": { + "$ref": "#/definitions/v1RegistryAuth" + }, + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1RegistryMetadata": { + "description": "Registry meta", + "properties": { + "isDefault": { + "type": "boolean", + "x-omitempty": false + }, + "isPrivate": { + "type": "boolean", + "x-omitempty": false + }, + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "scope": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1RegistryPackMetadata": { + "description": "Registry metadata information", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Pack annotations is used to allow pack to add more arbitrary configurations", + "type": "object" + }, + "latestPackUid": { + "description": "Latest pack uid", + "type": "string" + }, + "latestVersion": { + "description": "Pack latest version", + "type": "string" + }, + "logoUrl": { + "description": "Pack logo url", + "type": "string" + }, + "name": { + "description": "Pack registry name", + "type": "string" + }, + "scope": { + "description": "Pack registry scope", + "type": "string" + }, + "uid": { + "description": "Pack registry uid", + "type": "string" + } + } + }, + "v1RegistrySyncStatus": { + "description": "Status of the registry sync", + "properties": { + "lastRunTime": { + "$ref": "#/definitions/v1Time" + }, + "lastSyncedTime": { + "$ref": "#/definitions/v1Time" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "type": "object" + }, + "v1RelatedObject": { + "description": "Object for which the resource is related", + "properties": { + "kind": { + "enum": [ + "spectrocluster", + "machine", + "cloudconfig", + "clusterprofile", + "pack", + "appprofile", + "appdeployment", + "edgehost" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ReleaseDescription": { + "description": "spectro application management release description", + "properties": { + "details": { + "type": "string" + }, + "title": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1ReleaseVersion": { + "description": "spectro application management release version information", + "properties": { + "date": { + "$ref": "#/definitions/v1Time" + }, + "description": { + "type": "string" + }, + "releaseNotes": { + "items": { + "$ref": "#/definitions/v1ReleaseDescription" + }, + "type": "array" + }, + "version": { + "type": "string" + } + } + }, + "v1ResourceCloudCostSummary": { + "description": "Resource cloud cost summary information", + "properties": { + "data": { + "items": { + "$ref": "#/definitions/v1CloudCostDataPoint" + }, + "type": "array", + "uniqueItems": true + }, + "entity": { + "$ref": "#/definitions/v1ResourceReference" + }, + "total": { + "$ref": "#/definitions/v1ResourceTotalCloudCost" + } + }, + "type": "object" + }, + "v1ResourceConsumption": { + "description": "Resource consumption information", + "properties": { + "associatedResources": { + "items": { + "$ref": "#/definitions/v1ResourceReference" + }, + "type": "array" + }, + "data": { + "items": { + "$ref": "#/definitions/v1ResourceConsumptionDataPoint" + }, + "type": "array", + "uniqueItems": true + }, + "entity": { + "$ref": "#/definitions/v1ResourceReference" + }, + "total": { + "$ref": "#/definitions/v1ResourceTotalConsumptionData" + } + }, + "type": "object" + }, + "v1ResourceConsumptionData": { + "description": "Resource cosumption data", + "properties": { + "cpu": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "memory": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ResourceConsumptionDataPoint": { + "description": "Resource cosumption data point", + "properties": { + "allotted": { + "$ref": "#/definitions/v1ResourceConsumptionData" + }, + "timestamp": { + "format": "int64", + "type": "number" + }, + "usage": { + "$ref": "#/definitions/v1ResourceConsumptionData" + } + }, + "type": "object" + }, + "v1ResourceConsumptionFilter": { + "description": "Resource consumption filter", + "properties": { + "clouds": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "clusters": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "endTime": { + "$ref": "#/definitions/v1Time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "projects": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "startTime": { + "$ref": "#/definitions/v1Time" + }, + "workspaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1ResourceConsumptionOptions": { + "description": "Resource consumption options", + "properties": { + "enableSummaryView": { + "default": true, + "type": "boolean" + }, + "groupBy": { + "default": "namespace", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "cloud" + ], + "type": "string" + }, + "period": { + "default": 60, + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1ResourceConsumptionSpec": { + "description": "Resource consumption spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1ResourceConsumptionFilter" + }, + "options": { + "$ref": "#/definitions/v1ResourceConsumptionOptions" + } + }, + "type": "object" + }, + "v1ResourceCost": { + "description": "Resource Cost information", + "properties": { + "cloud": { + "$ref": "#/definitions/v1CloudCost" + }, + "total": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ResourceCostDataPoint": { + "description": "Resource cost data point", + "properties": { + "cpu": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "memory": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "storage": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "timestamp": { + "format": "int64", + "type": "number" + }, + "total": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ResourceCostSummary": { + "description": "Resource cost summary information", + "properties": { + "associatedResources": { + "items": { + "$ref": "#/definitions/v1ResourceReference" + }, + "type": "array" + }, + "data": { + "items": { + "$ref": "#/definitions/v1ResourceCostDataPoint" + }, + "type": "array", + "uniqueItems": true + }, + "entity": { + "$ref": "#/definitions/v1ResourceReference" + }, + "total": { + "$ref": "#/definitions/v1ResourceTotalCost" + } + }, + "type": "object" + }, + "v1ResourceCostSummaryFilter": { + "description": "Resource cost summary filter", + "properties": { + "clouds": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "clusters": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "endTime": { + "$ref": "#/definitions/v1Time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "projects": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "startTime": { + "$ref": "#/definitions/v1Time" + }, + "workspaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1ResourceCostSummaryOptions": { + "description": "Resource cost summary options", + "properties": { + "enableSummaryView": { + "default": true, + "type": "boolean" + }, + "groupBy": { + "default": "cluster", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "deployment", + "cloud" + ], + "type": "string" + }, + "period": { + "default": 60, + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1ResourceCostSummarySpec": { + "description": "Resource cost summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1ResourceCostSummaryFilter" + }, + "options": { + "$ref": "#/definitions/v1ResourceCostSummaryOptions" + } + }, + "type": "object" + }, + "v1ResourceEntity": { + "properties": { + "checks": { + "items": { + "type": "string" + }, + "type": "array" + }, + "data": { + "additionalProperties": { + "type": "object" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1ResourceGroup": { + "description": "Azure resource Group is a container that holds related resources for an Azure solution", + "properties": { + "id": { + "description": "The ID of the resource group", + "type": "string" + }, + "location": { + "description": "The location of the resource group. It cannot be changed after the resource group has been created", + "type": "string" + }, + "name": { + "description": "The type of the resource group", + "type": "string" + } + }, + "type": "object" + }, + "v1ResourceLimitType": { + "enum": [ + "user", + "project", + "apiKey", + "team", + "role", + "cloudaccount", + "clusterprofile", + "workspace", + "registry", + "privategateway", + "location", + "certificate", + "macro", + "sshkey", + "alert", + "spectrocluster", + "edgehost", + "appprofile", + "appdeployment", + "edgetoken", + "clustergroup", + "filter", + "systemadmin" + ], + "type": "string" + }, + "v1ResourceReference": { + "properties": { + "kind": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "required": [ + "uid" + ], + "type": "object" + }, + "v1ResourceRoles": { + "properties": { + "resourceRoles": { + "items": { + "$ref": "#/definitions/v1ResourceRolesEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ResourceRolesEntity": { + "properties": { + "filterRefs": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "projectUids": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "roles": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1ResourceRolesUpdateEntity": { + "properties": { + "filterRefs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "projectUids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "roles": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1ResourceTotalCloudCost": { + "description": "Resource total cloud cost information", + "properties": { + "compute": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "storage": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "total": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ResourceTotalConsumptionData": { + "description": "Resource total cosumption data", + "properties": { + "allotted": { + "$ref": "#/definitions/v1ResourceConsumptionData" + }, + "usage": { + "$ref": "#/definitions/v1ResourceConsumptionData" + } + }, + "type": "object" + }, + "v1ResourceTotalCost": { + "description": "Resource total cost information", + "properties": { + "cpu": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "memory": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "storage": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "total": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1ResourceUsage": { + "description": "ResourceUsage", + "properties": { + "projects": { + "items": { + "$ref": "#/definitions/v1ProjectResourceUsage" + }, + "type": "array", + "uniqueItems": true + }, + "timestamp": { + "$ref": "#/definitions/v1Time", + "description": "resource usage time" + }, + "totalAlloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "totalPureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + }, + "v1ResourceUsageDataPoint": { + "description": "Resource usage data point", + "properties": { + "baremetal": { + "$ref": "#/definitions/v1ResourceUsageMeteringDataPoint" + }, + "cpu": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "edgehost": { + "$ref": "#/definitions/v1ResourceUsageMeteringDataPoint" + }, + "memory": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "timestamp": { + "format": "int64", + "type": "number" + } + }, + "type": "object" + }, + "v1ResourceUsageMeteringDataPoint": { + "description": "min and max count for machines \u0026 edgehost for the given period", + "properties": { + "activeEdgehosts": { + "format": "int64", + "type": "number" + }, + "activeMachines": { + "format": "int64", + "type": "number" + }, + "maxEdgehosts": { + "format": "int64", + "type": "number" + }, + "maxMachines": { + "format": "int64", + "type": "number" + } + }, + "type": "object" + }, + "v1ResourceUsageSummary": { + "description": "Resource usage summary information", + "properties": { + "associatedResources": { + "items": { + "$ref": "#/definitions/v1ResourceReference" + }, + "type": "array" + }, + "data": { + "items": { + "$ref": "#/definitions/v1ResourceUsageDataPoint" + }, + "type": "array", + "uniqueItems": true + }, + "entity": { + "$ref": "#/definitions/v1ResourceReference" + } + }, + "type": "object" + }, + "v1ResourceUsageSummaryFilter": { + "description": "Resource usage summary filter", + "properties": { + "clouds": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "clusters": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "endTime": { + "$ref": "#/definitions/v1Time" + }, + "includeControlPlaneMachines": { + "type": "boolean" + }, + "includeMasterMachines": { + "description": "Deprecated. Use includeControlPlaneMachines", + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "pods": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "projects": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "startTime": { + "$ref": "#/definitions/v1Time" + }, + "workload": { + "$ref": "#/definitions/v1ResourceWorkloadFilter" + }, + "workspaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1ResourceUsageSummaryOptions": { + "description": "Resource usage summary options", + "properties": { + "enableSummaryView": { + "default": true, + "type": "boolean" + }, + "groupBy": { + "default": "cluster", + "enum": [ + "tenant", + "project", + "workspace", + "cluster", + "namespace", + "deployment", + "statefulset", + "daemonset", + "pod", + "cloud" + ], + "type": "string" + }, + "includeMeteringInfo": { + "default": false, + "type": "boolean" + }, + "period": { + "default": 60, + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1ResourceUsageSummarySpec": { + "description": "Resource usage summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1ResourceUsageSummaryFilter" + }, + "options": { + "$ref": "#/definitions/v1ResourceUsageSummaryOptions" + } + }, + "type": "object" + }, + "v1ResourceWorkloadFilter": { + "description": "Workload resource filter", + "properties": { + "names": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "type": { + "default": "all", + "enum": [ + "deployment", + "statefulset", + "daemonset", + "all" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1Resources": { + "properties": { + "resources": { + "additionalProperties": { + "$ref": "#/definitions/v1ResourceEntity", + "type": "object" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1ResourcesCloudCostSummary": { + "description": "Resources cloud cost summary information", + "properties": { + "resources": { + "items": { + "$ref": "#/definitions/v1ResourceCloudCostSummary" + }, + "type": "array" + }, + "total": { + "$ref": "#/definitions/v1ResourceTotalCloudCost" + } + }, + "type": "object" + }, + "v1ResourcesConsumption": { + "description": "Resources consumption information", + "properties": { + "cpuUnit": { + "type": "string" + }, + "memoryUnit": { + "type": "string" + }, + "resources": { + "items": { + "$ref": "#/definitions/v1ResourceConsumption" + }, + "type": "array" + }, + "total": { + "$ref": "#/definitions/v1ResourceTotalConsumptionData" + } + }, + "type": "object" + }, + "v1ResourcesCostSummary": { + "description": "Resources cost summary information", + "properties": { + "resources": { + "items": { + "$ref": "#/definitions/v1ResourceCostSummary" + }, + "type": "array" + }, + "total": { + "$ref": "#/definitions/v1ResourceTotalCost" + } + }, + "type": "object" + }, + "v1ResourcesUsageSummary": { + "description": "Resources usage summary information", + "properties": { + "cpuUnit": { + "type": "string" + }, + "memoryUnit": { + "type": "string" + }, + "resources": { + "items": { + "$ref": "#/definitions/v1ResourceUsageSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1RestoreStatusMeta": { + "description": "Restore status meta", + "properties": { + "isSucceeded": { + "type": "boolean" + }, + "msg": { + "type": "string" + }, + "restoreTime": { + "$ref": "#/definitions/v1Time" + } + } + }, + "v1Role": { + "description": "Role", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1RoleSpec" + }, + "status": { + "$ref": "#/definitions/v1RoleStatus" + } + } + }, + "v1RoleClone": { + "description": "Role clone specifications", + "properties": { + "metadata": { + "$ref": "#/definitions/v1RoleCloneMetadata" + } + } + }, + "v1RoleCloneMetadata": { + "description": "Role clone metadata", + "properties": { + "name": { + "type": "string" + } + } + }, + "v1RolePatch": { + "items": { + "$ref": "#/definitions/v1HttpPatch" + }, + "type": "array" + }, + "v1RoleSpec": { + "description": "Role specifications", + "properties": { + "permissions": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "scope": { + "$ref": "#/definitions/v1Scope" + }, + "type": { + "enum": [ + "system", + "user" + ], + "type": "string" + } + } + }, + "v1RoleStatus": { + "description": "Role status", + "properties": { + "isEnabled": { + "description": "Specifies if role account is enabled/disabled", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1Roles": { + "description": "Array of Roles", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1Role" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1S3StorageConfig": { + "description": "S3 storage config object", + "properties": { + "bucketName": { + "description": "S3 storage bucket name", + "type": "string" + }, + "caCert": { + "description": "CA Certificate", + "type": "string" + }, + "credentials": { + "$ref": "#/definitions/v1AwsCloudAccount", + "description": "AWS cloud account credentials" + }, + "region": { + "description": "AWS region name", + "type": "string" + }, + "s3ForcePathStyle": { + "default": true, + "type": "boolean" + }, + "s3Url": { + "description": "Custom hosted S3 URL", + "type": "string" + }, + "useRestic": { + "default": true, + "description": "Set to 'true', to use Restic plugin for the backup", + "type": "boolean" + } + }, + "required": [ + "bucketName", + "region", + "credentials" + ], + "type": "object" + }, + "v1SchedulerJob": { + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta", + "type": "object", + "x-omitempty": false + }, + "spec": { + "properties": { + "cycles": { + "type": "integer", + "x-omitempty": false + }, + "interval": { + "type": "integer", + "x-omitempty": false + } + }, + "type": "object" + }, + "status": { + "properties": { + "cycleNumber": { + "type": "integer", + "x-omitempty": false + }, + "error": { + "type": "string", + "x-omitempty": false + }, + "forceNextRun": { + "type": "boolean", + "x-omitempty": false + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "isDisabled": { + "type": "boolean", + "x-omitempty": false + }, + "isLocked": { + "type": "boolean", + "x-omitempty": false + }, + "lastRunTime": { + "$ref": "#/definitions/v1Time", + "x-omitempty": false + }, + "lastSuccessfulRunTime": { + "$ref": "#/definitions/v1Time", + "x-omitempty": false + }, + "nextRunTime": { + "$ref": "#/definitions/v1Time", + "x-omitempty": false + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SchedulerJobs": { + "items": { + "$ref": "#/definitions/v1SchedulerJob" + }, + "type": "array", + "uniqueItems": true + }, + "v1SchedulerJobsHealth": { + "items": { + "$ref": "#/definitions/v1SchedulerJob" + }, + "type": "array", + "uniqueItems": true + }, + "v1Scope": { + "enum": [ + "system", + "tenant", + "project", + "resource" + ], + "type": "string" + }, + "v1SearchFilterBoolCondition": { + "properties": { + "value": { + "type": "boolean" + } + } + }, + "v1SearchFilterCondition": { + "properties": { + "bool": { + "$ref": "#/definitions/v1SearchFilterBoolCondition" + }, + "date": { + "$ref": "#/definitions/v1SearchFilterDateCondition" + }, + "float": { + "$ref": "#/definitions/v1SearchFilterFloatCondition" + }, + "int": { + "$ref": "#/definitions/v1SearchFilterIntegerCondition" + }, + "keyValue": { + "$ref": "#/definitions/v1SearchFilterKeyValueCondition" + }, + "string": { + "$ref": "#/definitions/v1SearchFilterStringCondition" + } + } + }, + "v1SearchFilterConjunctionOperator": { + "enum": [ + "and", + "or" + ], + "type": "string", + "x-nullable": true + }, + "v1SearchFilterDateCondition": { + "properties": { + "match": { + "$ref": "#/definitions/v1SearchFilterDateConditionMatch" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "$ref": "#/definitions/v1SearchFilterDateOperator" + } + } + }, + "v1SearchFilterDateConditionMatch": { + "properties": { + "conjunction": { + "$ref": "#/definitions/v1SearchFilterConjunctionOperator" + }, + "values": { + "items": { + "$ref": "#/definitions/v1Time" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SearchFilterDateOperator": { + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte", + "range" + ], + "type": "string" + }, + "v1SearchFilterFloatCondition": { + "properties": { + "match": { + "$ref": "#/definitions/v1SearchFilterFloatConditionMatch" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "$ref": "#/definitions/v1SearchFilterIntegerOperator" + } + } + }, + "v1SearchFilterFloatConditionMatch": { + "properties": { + "conjunction": { + "$ref": "#/definitions/v1SearchFilterConjunctionOperator" + }, + "values": { + "items": { + "format": "float64", + "type": "number" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SearchFilterGroup": { + "properties": { + "conjunction": { + "$ref": "#/definitions/v1SearchFilterConjunctionOperator" + }, + "filters": { + "items": { + "$ref": "#/definitions/v1SearchFilterItem" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SearchFilterIntegerCondition": { + "properties": { + "match": { + "$ref": "#/definitions/v1SearchFilterIntegerConditionMatch" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "$ref": "#/definitions/v1SearchFilterIntegerOperator" + } + } + }, + "v1SearchFilterIntegerConditionMatch": { + "properties": { + "conjunction": { + "$ref": "#/definitions/v1SearchFilterConjunctionOperator" + }, + "values": { + "items": { + "type": "integer" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SearchFilterIntegerOperator": { + "enum": [ + "eq", + "gt", + "gte", + "lt", + "lte" + ], + "type": "string" + }, + "v1SearchFilterItem": { + "properties": { + "condition": { + "$ref": "#/definitions/v1SearchFilterCondition" + }, + "property": { + "type": "string" + }, + "type": { + "$ref": "#/definitions/v1SearchFilterPropertyType" + } + } + }, + "v1SearchFilterKeyValueCondition": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "key": { + "type": "string" + }, + "match": { + "$ref": "#/definitions/v1SearchFilterKeyValueConditionMatch" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "$ref": "#/definitions/v1SearchFilterStringOperator" + } + } + }, + "v1SearchFilterKeyValueConditionMatch": { + "properties": { + "conjunction": { + "$ref": "#/definitions/v1SearchFilterConjunctionOperator" + }, + "values": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SearchFilterKeyValueOperator": { + "enum": [ + "eq" + ], + "type": "string" + }, + "v1SearchFilterPropertyType": { + "enum": [ + "string", + "int", + "float", + "bool", + "date", + "keyValue" + ], + "type": "string" + }, + "v1SearchFilterSchemaSpec": { + "properties": { + "schema": { + "$ref": "#/definitions/v1SearchFilterSchemaSpecProperties" + } + } + }, + "v1SearchFilterSchemaSpecEnumValue": { + "properties": { + "displayValue": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "v1SearchFilterSchemaSpecProperties": { + "properties": { + "properties": { + "items": { + "$ref": "#/definitions/v1SearchFilterSchemaSpecProperty" + }, + "type": "array" + } + } + }, + "v1SearchFilterSchemaSpecProperty": { + "properties": { + "default": { + "type": "string", + "x-order": 6 + }, + "displayName": { + "type": "string", + "x-order": 2 + }, + "enum": { + "items": { + "type": "string" + }, + "type": "array", + "x-omitempty": true, + "x-order": 4 + }, + "enumValues": { + "items": { + "$ref": "#/definitions/v1SearchFilterSchemaSpecEnumValue" + }, + "type": "array", + "x-omitempty": true, + "x-order": 5 + }, + "hideDisplay": { + "type": "boolean", + "x-order": 1 + }, + "maxFloatVal": { + "format": "float64", + "type": "number", + "x-order": 10 + }, + "maxIntVal": { + "format": "int32", + "type": "integer", + "x-order": 8 + }, + "minFloatVal": { + "format": "float64", + "type": "number", + "x-order": 9 + }, + "minIntVal": { + "format": "int32", + "type": "integer", + "x-order": 7 + }, + "name": { + "type": "string", + "x-order": 0 + }, + "type": { + "type": "string", + "x-order": 3 + } + } + }, + "v1SearchFilterSortSpec": { + "properties": { + "field": { + "$ref": "#/definitions/v1SearchSortFields" + }, + "order": { + "$ref": "#/definitions/v1SortOrder" + } + } + }, + "v1SearchFilterSpec": { + "properties": { + "conjunction": { + "$ref": "#/definitions/v1SearchFilterConjunctionOperator" + }, + "filterGroups": { + "items": { + "$ref": "#/definitions/v1SearchFilterGroup" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SearchFilterStringCondition": { + "properties": { + "ignoreCase": { + "type": "boolean" + }, + "match": { + "$ref": "#/definitions/v1SearchFilterStringConditionMatch" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "$ref": "#/definitions/v1SearchFilterStringOperator" + } + } + }, + "v1SearchFilterStringConditionMatch": { + "properties": { + "conjunction": { + "$ref": "#/definitions/v1SearchFilterConjunctionOperator" + }, + "values": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SearchFilterStringOperator": { + "enum": [ + "eq", + "contains", + "beginsWith" + ], + "type": "string" + }, + "v1SearchFilterSummarySpec": { + "description": "Spectro cluster search filter summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1SearchFilterSpec" + }, + "sort": { + "items": { + "$ref": "#/definitions/v1SearchFilterSortSpec" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SearchSortFields": { + "enum": [ + "environment", + "clusterName", + "clusterState", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "type": "string", + "x-nullable": true + }, + "v1SectroClusterK8sDashboardUrl": { + "description": "Service version information", + "properties": { + "url": { + "type": "string" + } + }, + "type": "object" + }, + "v1ServiceEncryptionKey": { + "description": "Returns the data encryption key for the session", + "properties": { + "encryptionKey": { + "description": "Encryption key to be used to decrypt the encrypted data in the response", + "type": "string" + } + }, + "type": "object" + }, + "v1ServiceImage": { + "description": "Service image entity", + "properties": { + "buildId": { + "type": "string" + }, + "image": { + "type": "string" + }, + "serviceName": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1ServiceManifest": { + "description": "Service manifest information", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ServiceManifestSpec" + } + }, + "type": "object" + }, + "v1ServiceManifestSpec": { + "properties": { + "manifests": { + "items": { + "$ref": "#/definitions/v1GitRepoFileContent" + }, + "type": "array", + "uniqueItems": true + }, + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1ServicePort": { + "properties": { + "port": { + "description": "The port that will be exposed by this service.", + "format": "int32", + "type": "integer" + }, + "protocol": { + "type": "string" + } + }, + "required": [ + "port" + ], + "type": "object" + }, + "v1ServiceSpec": { + "description": "ServiceSpec defines the specification of service registering edge", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1ServiceVersion": { + "description": "Service version information", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1ServiceVersionSpec" + } + }, + "type": "object" + }, + "v1ServiceVersionSpec": { + "properties": { + "latestVersion": { + "$ref": "#/definitions/v1GitRepoFileContent" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1ServicesImages": { + "properties": { + "serviceImages": { + "items": { + "$ref": "#/definitions/v1ServiceImage" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1SonobuoyEntity": { + "description": "Sonobuoy response", + "properties": { + "reports": { + "additionalProperties": { + "$ref": "#/definitions/v1SonobuoyReportEntity" + }, + "type": "object" + }, + "requestUid": { + "type": "string" + }, + "status": { + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ], + "type": "string" + } + }, + "required": [ + "requestUid", + "status", + "reports" + ] + }, + "v1SonobuoyLog": { + "description": "Compliance Scan Sonobuoy Log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1SonobuoyLogEntity": { + "description": "Sonobuoy log", + "properties": { + "description": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "output": { + "type": "string" + }, + "path": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1SonobuoyReport": { + "description": "Compliance Scan Sonobuoy Report", + "properties": { + "fail": { + "format": "int32", + "type": "integer" + }, + "logs": { + "items": { + "$ref": "#/definitions/v1SonobuoyLog" + }, + "type": "array" + }, + "node": { + "type": "string" + }, + "pass": { + "format": "int32", + "type": "integer" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "format": "int32", + "type": "integer" + } + } + }, + "v1SonobuoyReportEntity": { + "description": "Sonobuoy report", + "properties": { + "fail": { + "format": "int32", + "type": "integer" + }, + "logs": { + "items": { + "$ref": "#/definitions/v1SonobuoyLogEntity" + }, + "type": "array" + }, + "node": { + "type": "string" + }, + "pass": { + "format": "int32", + "type": "integer" + }, + "plugin": { + "type": "string" + }, + "status": { + "type": "string" + }, + "total": { + "format": "int32", + "type": "integer" + } + } + }, + "v1SortOrder": { + "default": "asc", + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + "v1SpcApply": { + "properties": { + "actionType": { + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ], + "type": "string" + }, + "canBeApplied": { + "description": "If it is true then Agent can apply the changes to the palette", + "type": "boolean", + "x-omitempty": false + }, + "crdDigest": { + "type": "string" + }, + "lastModifiedTime": { + "$ref": "#/definitions/v1Time" + }, + "patchAppliedTime": { + "$ref": "#/definitions/v1Time" + }, + "spcHash": { + "type": "string" + }, + "spcInfraHash": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpcApplySettings": { + "properties": { + "actionType": { + "enum": [ + "DownloadAndInstall", + "DownloadAndInstallLater" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1SpcPatchTimeEntity": { + "properties": { + "clusterHash": { + "type": "string" + }, + "patchTime": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1SpectroAppMgmtUpgrade": { + "description": "Spectro application management upgrade information", + "properties": { + "profiles": { + "items": { + "$ref": "#/definitions/v1ClusterProfileNotificationUpdateEntity" + }, + "type": "array", + "uniqueItems": true + }, + "version": { + "type": "string" + } + }, + "required": [ + "version" + ], + "type": "object" + }, + "v1SpectroAwsClusterEntity": { + "description": "AWS cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "$ref": "#/definitions/v1AwsClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1AwsMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroAwsClusterImportEntity": { + "description": "Spectro AWS cluster import request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1ImportClusterConfig" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroAwsClusterRateEntity": { + "description": "Spectro AWS cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1AwsClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1AwsMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroAzureClusterEntity": { + "description": "Azure cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "$ref": "#/definitions/v1AzureClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1AzureMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroAzureClusterImportEntity": { + "description": "Spectro Azure cluster import request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1ImportClusterConfig" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroAzureClusterRateEntity": { + "description": "Spectro Azure cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1AzureClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1AzureMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroCluster": { + "description": "SpectroCluster is the Schema for the spectroclusters API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1SpectroClusterSpec" + }, + "status": { + "$ref": "#/definitions/v1SpectroClusterStatus" + } + }, + "type": "object" + }, + "v1SpectroClusterActiveAppDeployment": { + "description": "Active app deployment", + "properties": { + "appRef": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterActiveCluster": { + "description": "Active clusters", + "properties": { + "clusterRef": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterActiveResources": { + "description": "Active cluster resources", + "properties": { + "appDeployments": { + "items": { + "$ref": "#/definitions/v1SpectroClusterActiveAppDeployment" + }, + "type": "array" + }, + "clusters": { + "items": { + "$ref": "#/definitions/v1SpectroClusterActiveCluster" + }, + "type": "array" + }, + "virtualClusters": { + "items": { + "$ref": "#/definitions/v1SpectroClusterActiveCluster" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroClusterAddOnService": { + "description": "Spectro cluster addon service", + "properties": { + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1SpectroClusterAddOnServiceSummary": { + "description": "Spectro cluster status summary", + "properties": { + "endpoint": { + "type": "string" + }, + "name": { + "type": "string" + } + } + }, + "v1SpectroClusterAssetEntity": { + "description": "Cluster asset", + "properties": { + "spec": { + "properties": { + "frpKubeconfig": { + "type": "string" + }, + "kubeconfig": { + "type": "string" + }, + "kubeconfigclient": { + "type": "string" + }, + "manifest": { + "type": "string" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroClusterAssetFrpKubeConfig": { + "description": "Cluster asset Frp Kube Config", + "properties": { + "frpKubeconfig": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterAssetKubeConfig": { + "description": "Cluster asset Kube Config", + "properties": { + "kubeconfig": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterAssetKubeConfigClient": { + "description": "Cluster asset Kube Config Client", + "properties": { + "kubeconfigclient": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterAssetManifest": { + "description": "Cluster asset", + "properties": { + "manifest": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterCloudCost": { + "description": "Spectro cluster cloud cost information", + "properties": { + "cost": { + "$ref": "#/definitions/v1ResourceCost" + }, + "data": { + "items": { + "$ref": "#/definitions/v1CloudCostDataPoint" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroClusterCloudCostSummaryFilter": { + "description": "Spectro cluster cloud cost summary filter", + "properties": { + "clouds": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "endTime": { + "$ref": "#/definitions/v1Time" + }, + "projects": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "startTime": { + "$ref": "#/definitions/v1Time" + }, + "workspaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1SpectroClusterCloudCostSummaryOptions": { + "description": "Spectro cluster cloud cost summary options", + "properties": { + "groupBy": { + "default": "project", + "enum": [ + "tenant", + "project", + "cloud", + "cluster" + ], + "type": "string" + }, + "period": { + "default": 1440, + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1SpectroClusterCloudCostSummarySpec": { + "description": "Spectro cluster cloud cost summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1SpectroClusterCloudCostSummaryFilter" + }, + "options": { + "$ref": "#/definitions/v1SpectroClusterCloudCostSummaryOptions" + } + }, + "type": "object" + }, + "v1SpectroClusterCost": { + "description": "Spectro cluster cost information", + "properties": { + "cloud": { + "$ref": "#/definitions/v1SpectroClusterCloudCost" + }, + "cost": { + "$ref": "#/definitions/v1ResourceCost" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterCostSummary": { + "properties": { + "cluster": { + "$ref": "#/definitions/v1SpectroClusterCost" + }, + "endTime": { + "$ref": "#/definitions/v1Time" + }, + "period": { + "format": "int32", + "type": "integer" + }, + "startTime": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1SpectroClusterFilterSpec": { + "description": "Spectro cluster filter spec", + "properties": { + "cloudAccounts": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "clusterName": { + "$ref": "#/definitions/v1FilterString" + }, + "clusterProfiles": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "clusterState": { + "$ref": "#/definitions/v1ClusterState", + "description": "Deprecated. Use clusterStates" + }, + "clusterStates": { + "items": { + "$ref": "#/definitions/v1ClusterState" + }, + "type": "array", + "uniqueItems": true + }, + "cpuUsage": { + "$ref": "#/definitions/v1FilterIntRange" + }, + "environment": { + "description": "Deprecated. Use environments", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "environments": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "healthState": { + "default": "all", + "enum": [ + "all", + "Healthy", + "UnHealthy" + ], + "type": "string" + }, + "isDeleted": { + "default": false, + "type": "boolean" + }, + "isHostCluster": { + "default": false, + "type": "boolean", + "x-omitempty": false + }, + "memoryUsage": { + "$ref": "#/definitions/v1FilterNumberRange" + }, + "metricPeriod": { + "default": 60, + "description": "Metric period in minutes defines latest metrics by period", + "format": "int32", + "type": "integer" + }, + "projectUids": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "tags": { + "$ref": "#/definitions/v1FilterArray" + } + } + }, + "v1SpectroClusterHealthCheck": { + "properties": { + "spec": { + "$ref": "#/definitions/v1SpectroClusterHealthCheckSpec", + "type": "object" + }, + "status": { + "$ref": "#/definitions/v1SpectroClusterHealthCheckStatus", + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroClusterHealthCheckSpec": { + "properties": { + "name": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "ownerName": { + "type": "string" + }, + "ownerUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterHealthCheckStatus": { + "properties": { + "machineHealthChecks": { + "items": { + "$ref": "#/definitions/v1HealthCheck" + }, + "type": "array" + }, + "msgBrokerHealthChecks": { + "items": { + "$ref": "#/definitions/v1HealthCheck" + }, + "type": "array" + }, + "spectroClusterHealthChecks": { + "items": { + "$ref": "#/definitions/v1HealthCheck" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroClusterHealthCondition": { + "description": "Spectro cluster health condition", + "properties": { + "message": { + "type": "string" + }, + "relatedObject": { + "$ref": "#/definitions/v1RelatedObject", + "type": "object" + }, + "type": { + "type": "string" + } + } + }, + "v1SpectroClusterHealthStatus": { + "description": "Spectro cluster health status", + "properties": { + "agentVersion": { + "type": "string" + }, + "conditions": { + "items": { + "$ref": "#/definitions/v1SpectroClusterHealthCondition" + }, + "type": "array", + "uniqueItems": true + }, + "lastHeartBeatTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "state": { + "type": "string" + } + } + }, + "v1SpectroClusterKubeCtlRedirect": { + "description": "Active resources of tenant", + "properties": { + "redirectUri": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterLocationInputEntity": { + "description": "Cluster location", + "properties": { + "location": { + "$ref": "#/definitions/v1ClusterLocation" + } + }, + "type": "object" + }, + "v1SpectroClusterMetaSummary": { + "description": "Spectro cluster meta summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "specSummary": { + "description": "Spectro cluster meta summary", + "properties": { + "archType": { + "description": "Architecture type of the cluster", + "items": { + "default": "amd64", + "enum": [ + "arm64", + "amd64" + ], + "type": "string" + }, + "type": "array" + }, + "cloudAccountUid": { + "type": "string" + }, + "cloudRegion": { + "type": "string" + }, + "cloudType": { + "type": "string" + }, + "clusterType": { + "type": "string" + }, + "importMode": { + "type": "string" + }, + "location": { + "$ref": "#/definitions/v1ClusterMetaSpecLocation" + }, + "projectMeta": { + "$ref": "#/definitions/v1ProjectMeta" + }, + "tags": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "status": { + "description": "Spectro cluster meta status summary", + "properties": { + "cost": { + "$ref": "#/definitions/v1ClusterMetaStatusCost" + }, + "fips": { + "$ref": "#/definitions/v1ClusterFips" + }, + "health": { + "$ref": "#/definitions/v1ClusterMetaStatusHealth" + }, + "state": { + "type": "string" + }, + "updates": { + "$ref": "#/definitions/v1ClusterMetaStatusUpdates" + } + } + } + }, + "type": "object" + }, + "v1SpectroClusterMetadataFilterSpec": { + "description": "Spectro cluster filter spec", + "properties": { + "environment": { + "type": "string" + }, + "includeVirtual": { + "default": false, + "type": "boolean" + }, + "isAlloy": { + "default": false, + "description": "isAlloy is renamed to isImported", + "type": "boolean" + }, + "isImportReadOnly": { + "default": true, + "type": "boolean" + }, + "isImported": { + "default": false, + "type": "boolean" + }, + "name": { + "$ref": "#/definitions/v1FilterString" + }, + "state": { + "type": "string" + } + } + }, + "v1SpectroClusterMetadataSpec": { + "description": "Spectro cluster metadata spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1SpectroClusterMetadataFilterSpec" + }, + "sort": { + "enum": [ + "environment", + "state", + "name" + ], + "type": "string", + "x-nullable": true + } + } + }, + "v1SpectroClusterMetrics": { + "description": "Spectro cluster metrics", + "properties": { + "cpu": { + "$ref": "#/definitions/v1ComputeMetrics" + }, + "memory": { + "$ref": "#/definitions/v1ComputeMetrics" + } + } + }, + "v1SpectroClusterMigration": { + "description": "Spectro cluster migration status", + "properties": { + "database": { + "$ref": "#/definitions/v1MgmtMigrationStatuses" + }, + "state": { + "type": "string", + "x-omitempty": false + }, + "tenant": { + "$ref": "#/definitions/v1SpectroTenantMigration" + } + }, + "type": "object" + }, + "v1SpectroClusterOidcClaims": { + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SpectroClusterOidcSpec": { + "properties": { + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "$ref": "#/definitions/v1SpectroClusterOidcClaims" + }, + "scopes": { + "items": { + "type": "string" + }, + "type": "array", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SpectroClusterPackCondition": { + "properties": { + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "enum": [ + "ReadyForInstall", + "Installed", + "Ready", + "Error", + "UpgradeAvailable", + "WaitingForOtherLayers" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterPackConfigList": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1PackConfig" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1SpectroClusterPackDiff": { + "description": "Cluster pack difference", + "properties": { + "current": { + "$ref": "#/definitions/v1PackRef" + }, + "diffConfigKeys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "target": { + "$ref": "#/definitions/v1PackRef" + } + }, + "type": "object" + }, + "v1SpectroClusterPackProperties": { + "description": "Cluster pack properties response", + "properties": { + "yaml": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SpectroClusterPackStatusEntity": { + "properties": { + "condition": { + "$ref": "#/definitions/v1SpectroClusterPackCondition", + "description": "Pack deployment status conditions" + }, + "endTime": { + "$ref": "#/definitions/v1Time", + "description": "Pack deployment end time" + }, + "name": { + "description": "Pack name", + "type": "string" + }, + "profileUid": { + "description": "Cluster profile uid", + "type": "string" + }, + "startTime": { + "$ref": "#/definitions/v1Time", + "description": "Pack deployment start time" + }, + "type": { + "$ref": "#/definitions/v1PackType" + }, + "version": { + "description": "pack version", + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterPacksEntity": { + "description": "Cluster entity for pack refs validate", + "properties": { + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroClusterPacksStatusEntity": { + "properties": { + "packs": { + "items": { + "$ref": "#/definitions/v1SpectroClusterPackStatusEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroClusterPolicies": { + "description": "Cluster policies", + "properties": { + "backupPolicy": { + "$ref": "#/definitions/v1ClusterBackupConfig" + }, + "scanPolicy": { + "$ref": "#/definitions/v1ClusterComplianceScheduleConfig" + } + }, + "type": "object" + }, + "v1SpectroClusterProfile": { + "description": "Cluster profile response", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1SpectroClusterProfileSpec" + } + }, + "type": "object" + }, + "v1SpectroClusterProfileEntity": { + "description": "Cluster profile request payload", + "properties": { + "packValues": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1PackValuesEntity" + }, + "type": "array", + "uniqueItems": true + }, + "replaceWithProfile": { + "description": "Cluster profile uid to be replaced with new profile", + "type": "string" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + }, + "variables": { + "items": { + "$ref": "#/definitions/v1SpectroClusterVariable" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroClusterProfileList": { + "properties": { + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfile" + }, + "type": "array" + } + }, + "required": [ + "profiles" + ], + "type": "object" + }, + "v1SpectroClusterProfileSpec": { + "description": "Cluster profile spec response", + "properties": { + "cloudType": { + "description": "Cluster profile cloud type", + "type": "string" + }, + "packs": { + "description": "Cluster profile packs array", + "items": { + "$ref": "#/definitions/v1ClusterProfilePacksEntity" + }, + "type": "array", + "uniqueItems": true + }, + "relatedObject": { + "$ref": "#/definitions/v1ObjectReference", + "description": "RelatedObject refers to the type of object(clustergroup, cluster or edgeHost) the cluster profile is associated with" + }, + "type": { + "description": "Cluster profile type [ \"cluster\", \"infra\", \"add-on\", \"system\" ]", + "type": "string" + }, + "version": { + "description": "Cluster profile version", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1SpectroClusterProfileUpdates": { + "properties": { + "profiles": { + "items": { + "$ref": "#/definitions/v1ClusterProfileTemplate" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1SpectroClusterProfileValidatorResponse": { + "description": "Cluster profile validator response", + "properties": { + "packs": { + "$ref": "#/definitions/v1ConstraintValidatorResponse" + }, + "uid": { + "description": "Cluster profile uid", + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterProfiles": { + "properties": { + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + }, + "spcApplySettings": { + "$ref": "#/definitions/v1SpcApplySettings" + } + }, + "required": [ + "profiles" + ], + "type": "object" + }, + "v1SpectroClusterProfilesDeleteEntity": { + "properties": { + "profileUids": { + "description": "Cluster's profile uid list", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1SpectroClusterProfilesPacksManifests": { + "properties": { + "profiles": { + "items": { + "$ref": "#/definitions/v1ClusterProfilePacksManifests" + }, + "type": "array" + } + }, + "required": [ + "profiles" + ], + "type": "object" + }, + "v1SpectroClusterProfilesParamReferenceEntity": { + "description": "Cluster profiles param reference entity", + "properties": { + "references": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1SpectroClusterProfilesResolvedValues": { + "description": "Cluster profiles resolved values response", + "properties": { + "profiles": { + "items": { + "$ref": "#/definitions/v1ProfileResolvedValues" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1SpectroClusterProjectCleanedResource": { + "description": "List of cleaned project spectro cluster resources", + "properties": { + "resources": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroClusterProjectCleanupValidateEntity": { + "description": "Cluster duration thresholds", + "properties": { + "deletingClusterDurationThresholdInMin": { + "format": "int32", + "type": "integer" + }, + "provisioningClusterDurationThresholdInMin": { + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1SpectroClusterRate": { + "description": "Cluster estimated rate information", + "properties": { + "machinePools": { + "items": { + "$ref": "#/definitions/v1MachinePoolRate" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "rate": { + "$ref": "#/definitions/v1TotalClusterRate" + }, + "resourceMetadata": { + "$ref": "#/definitions/v1CloudResourceMetadata" + } + }, + "type": "object" + }, + "v1SpectroClusterRepave": { + "description": "Spectro cluster repave status information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1SpectroClusterRepaveSpec" + }, + "status": { + "$ref": "#/definitions/v1SpectroClusterRepaveStatus" + } + }, + "type": "object" + }, + "v1SpectroClusterRepaveReason": { + "description": "Cluster repave reason description", + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + }, + "pack": { + "$ref": "#/definitions/v1SpectroClusterPackDiff" + } + }, + "type": "object" + }, + "v1SpectroClusterRepaveSpec": { + "properties": { + "reasons": { + "description": "Spectro cluster repave reasons", + "items": { + "$ref": "#/definitions/v1SpectroClusterRepaveReason" + }, + "type": "array" + }, + "source": { + "$ref": "#/definitions/v1ClusterRepaveSource" + }, + "spectroClusterUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterRepaveStatus": { + "properties": { + "message": { + "type": "string" + }, + "repaveTransitionTime": { + "$ref": "#/definitions/v1Time" + }, + "state": { + "$ref": "#/definitions/v1ClusterRepaveState" + } + }, + "type": "object" + }, + "v1SpectroClusterRepaveValidationResponse": { + "description": "Cluster repave validation response", + "properties": { + "isRepaveRequired": { + "description": "If true then the pack changes can cause cluster repave", + "type": "boolean", + "x-omitempty": false + }, + "reasons": { + "items": { + "$ref": "#/definitions/v1SpectroClusterRepaveReason" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroClusterRevision": { + "description": "Revision specification details for a cluster", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1SpectroClusterSpec" + } + }, + "type": "object" + }, + "v1SpectroClusterRevisionMeta": { + "description": "Revision spec uid along with the creationTimestamp for the revision", + "properties": { + "creationTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "uid": { + "description": "The unique id of the spc revision document", + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterRevisionMetaList": { + "properties": { + "spcRevisions": { + "items": { + "$ref": "#/definitions/v1SpectroClusterRevisionMeta" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroClusterSortFields": { + "enum": [ + "environment", + "clusterName", + "healthState", + "creationTimestamp", + "lastModifiedTimestamp" + ], + "type": "string", + "x-nullable": true + }, + "v1SpectroClusterSortSpec": { + "properties": { + "field": { + "$ref": "#/definitions/v1SpectroClusterSortFields" + }, + "order": { + "$ref": "#/definitions/v1SortOrder" + } + } + }, + "v1SpectroClusterSpec": { + "description": "SpectroClusterSpec defines the desired state of SpectroCluster", + "properties": { + "cloudConfigRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "CloudConfigRef point to the cloud configuration for the cluster, input by user Ref types are: AwsCloudConfig/VsphereCloudConfig/BaremetalConfig/ etc this user config will be used to generate cloud specific cluster/machine spec for cluster-api For VM, it will contain information needed to launch VMs, like cloud account, instance type For BM, it will contain actual baremetal machines" + }, + "cloudType": { + "type": "string" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfig", + "description": "ClusterConfig is the configuration related to a general cluster. Configuration related to the health of the cluster." + }, + "clusterProfileTemplates": { + "description": "When a cluster created from a clusterprofile at t1, ClusterProfileTemplate is a copy of the draft version or latest published version of the clusterprofileSpec.clusterprofileTemplate then clusterprofile may evolve to v2 at t2, but before user decide to upgrade the cluster, it will stay as it is when user decide to upgrade, clusterProfileTemplate will be updated from the clusterprofile pointed by ClusterProfileRef", + "items": { + "$ref": "#/definitions/v1ClusterProfileTemplate" + }, + "type": "array" + }, + "clusterType": { + "enum": [ + "PureManage", + "AlloyMonitor", + "AlloyAssist", + "AlloyExtend" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterState": { + "description": "Spectrocluster state entity", + "properties": { + "state": { + "description": "Spectrocluster state", + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroClusterStatus": { + "description": "SpectroClusterStatus", + "properties": { + "abortTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "addOnServices": { + "items": { + "$ref": "#/definitions/v1SpectroClusterAddOnService" + }, + "type": "array" + }, + "apiEndpoints": { + "items": { + "$ref": "#/definitions/v1APIEndpoint" + }, + "type": "array" + }, + "clusterImport": { + "$ref": "#/definitions/v1ClusterImport" + }, + "conditions": { + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "fips": { + "$ref": "#/definitions/v1ClusterFips" + }, + "location": { + "$ref": "#/definitions/v1ClusterLocation" + }, + "packs": { + "items": { + "$ref": "#/definitions/v1ClusterPackStatus" + }, + "type": "array" + }, + "profileStatus": { + "$ref": "#/definitions/v1ProfileStatus" + }, + "repave": { + "$ref": "#/definitions/v1ClusterRepaveStatus" + }, + "services": { + "items": { + "$ref": "#/definitions/v1LoadBalancerService" + }, + "type": "array" + }, + "spcApply": { + "$ref": "#/definitions/v1SpcApply" + }, + "state": { + "description": "current operational state", + "type": "string" + }, + "upgrades": { + "items": { + "$ref": "#/definitions/v1Upgrades" + }, + "type": "array" + }, + "virtual": { + "$ref": "#/definitions/v1Virtual" + } + }, + "type": "object" + }, + "v1SpectroClusterStatusEntity": { + "description": "Spectrocluster status entity", + "properties": { + "status": { + "$ref": "#/definitions/v1SpectroClusterState" + } + }, + "type": "object" + }, + "v1SpectroClusterSummary": { + "description": "Spectro cluster summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "specSummary": { + "description": "Spectro cluster spec summary", + "properties": { + "archTypes": { + "description": "Architecture type of the cluster", + "items": { + "$ref": "#/definitions/v1ArchType" + }, + "type": "array" + }, + "cloudAccountMeta": { + "$ref": "#/definitions/v1CloudAccountMeta" + }, + "cloudConfig": { + "$ref": "#/definitions/v1CloudConfigMeta" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigResponse" + }, + "clusterProfileTemplate": { + "$ref": "#/definitions/v1ClusterProfileTemplateMeta" + }, + "clusterProfileTemplates": { + "items": { + "$ref": "#/definitions/v1ClusterProfileTemplateMeta" + }, + "type": "array" + }, + "projectMeta": { + "$ref": "#/definitions/v1ProjectMeta" + } + }, + "type": "object" + }, + "status": { + "description": "Spectro cluster status summary", + "properties": { + "clusterImport": { + "$ref": "#/definitions/v1ClusterImport" + }, + "cost": { + "$ref": "#/definitions/v1ResourceCost" + }, + "fips": { + "$ref": "#/definitions/v1ClusterFips" + }, + "health": { + "$ref": "#/definitions/v1SpectroClusterHealthStatus" + }, + "hourlyRate": { + "$ref": "#/definitions/v1ResourceCost" + }, + "location": { + "$ref": "#/definitions/v1ClusterMetaSpecLocation" + }, + "metrics": { + "$ref": "#/definitions/v1SpectroClusterMetrics" + }, + "notifications": { + "$ref": "#/definitions/v1ClusterNotificationStatus" + }, + "repave": { + "$ref": "#/definitions/v1ClusterRepaveStatus" + }, + "state": { + "type": "string" + }, + "virtual": { + "$ref": "#/definitions/v1Virtual" + } + } + } + }, + "type": "object" + }, + "v1SpectroClusterSummarySpec": { + "description": "Spectro cluster filter summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1SpectroClusterFilterSpec" + }, + "sort": { + "items": { + "$ref": "#/definitions/v1SpectroClusterSortSpec" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SpectroClusterUidStatusSummary": { + "description": "Spectro cluster status summary", + "properties": { + "abortTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "addOnServices": { + "items": { + "$ref": "#/definitions/v1SpectroClusterAddOnServiceSummary" + }, + "type": "array" + }, + "apiEndpoints": { + "items": { + "$ref": "#/definitions/v1APIEndpoint" + }, + "type": "array" + }, + "clusterImport": { + "$ref": "#/definitions/v1ClusterImport" + }, + "conditions": { + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "cost": { + "$ref": "#/definitions/v1ResourceCost" + }, + "fips": { + "$ref": "#/definitions/v1ClusterFips" + }, + "health": { + "$ref": "#/definitions/v1SpectroClusterHealthStatus" + }, + "hourlyRate": { + "$ref": "#/definitions/v1ResourceCost" + }, + "kubeMeta": { + "$ref": "#/definitions/v1KubeMeta" + }, + "location": { + "$ref": "#/definitions/v1ClusterMetaSpecLocation" + }, + "metrics": { + "$ref": "#/definitions/v1SpectroClusterMetrics" + }, + "notifications": { + "$ref": "#/definitions/v1ClusterNotificationStatus" + }, + "packs": { + "items": { + "$ref": "#/definitions/v1ClusterPackStatus" + }, + "type": "array" + }, + "services": { + "items": { + "$ref": "#/definitions/v1LoadBalancerService" + }, + "type": "array" + }, + "spcApply": { + "$ref": "#/definitions/v1SpcApply" + }, + "state": { + "description": "current operational state", + "type": "string" + }, + "upgrades": { + "items": { + "$ref": "#/definitions/v1Upgrades" + }, + "type": "array" + }, + "virtual": { + "$ref": "#/definitions/v1Virtual" + }, + "workspaces": { + "items": { + "$ref": "#/definitions/v1ResourceReference" + }, + "type": "array" + } + } + }, + "v1SpectroClusterUidSummary": { + "description": "Spectro cluster summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "description": "Spectro cluster spec summary", + "properties": { + "archTypes": { + "description": "Architecture types of the cluster", + "items": { + "$ref": "#/definitions/v1ArchType" + }, + "type": "array" + }, + "cloudConfig": { + "$ref": "#/definitions/v1CloudConfigMeta" + }, + "cloudaccount": { + "$ref": "#/definitions/v1CloudAccountMeta" + }, + "clusterProfileTemplate": { + "$ref": "#/definitions/v1ClusterProfileTemplateMeta" + }, + "clusterProfileTemplates": { + "items": { + "$ref": "#/definitions/v1ClusterProfileTemplateMeta" + }, + "type": "array" + } + }, + "type": "object" + }, + "status": { + "$ref": "#/definitions/v1SpectroClusterUidStatusSummary" + } + }, + "type": "object" + }, + "v1SpectroClusterUidUpgrades": { + "description": "Cluster status upgrades", + "properties": { + "upgrades": { + "items": { + "$ref": "#/definitions/v1Upgrades" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroClusterVMCloneEntity": { + "properties": { + "annotationFilters": { + "description": "Annotation filters", + "items": { + "type": "string" + }, + "type": "array" + }, + "cloneName": { + "description": "Cloning Virtual machine's name", + "type": "string" + }, + "labelFilters": { + "description": "Label filters", + "items": { + "type": "string" + }, + "type": "array" + }, + "newMacAddresses": { + "additionalProperties": { + "type": "string" + }, + "description": "NewMacAddresses manually sets that target interfaces' mac addresses. The key is the interface name and the value is the new mac address. If this field is not specified, a new MAC address will be generated automatically, as for any interface that is not included in this map", + "type": "object" + }, + "newSMBiosSerial": { + "description": "NewSMBiosSerial manually sets that target's SMbios serial. If this field is not specified, a new serial will be generated automatically.", + "type": "string" + } + }, + "required": [ + "cloneName" + ], + "type": "object" + }, + "v1SpectroClusterValidatorResponse": { + "description": "Cluster validator response", + "properties": { + "machinePools": { + "$ref": "#/definitions/v1ConstraintValidatorResponse" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileValidatorResponse" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1SpectroClusterVariable": { + "description": "Variable with value which will be used within the packs of cluster profile", + "properties": { + "name": { + "description": "Variable name", + "type": "string" + }, + "value": { + "description": "Actual value of the variable to be used within the cluster", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1SpectroClusters": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1SpectroCluster" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1SpectroClustersAgentsNotifyEntity": { + "description": "SpectroClusters for which agents has to be notified", + "properties": { + "clusterUids": { + "items": { + "type": "string" + }, + "type": "array" + }, + "notifyAllClusters": { + "type": "boolean" + } + } + }, + "v1SpectroClustersCostComputeSpec": { + "description": "Cluster's cost compute spec", + "properties": { + "clusterUids": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "startTime": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1SpectroClustersHealth": { + "description": "Spectro Clusters health data", + "properties": { + "errored": { + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "healthy": { + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "running": { + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "unhealthy": { + "format": "int32", + "type": "integer", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SpectroClustersMetadata": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1SpectroClustersMetadataSearch": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1SpectroClusterMetaSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1SpectroClustersSummary": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1SpectroClusterSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1SpectroClustersUsageComputeSpec": { + "description": "Cluster's usage compute spec", + "properties": { + "clusterUids": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "startTime": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1SpectroCoxEdgeClusterEntity": { + "description": "CoxEdge cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "$ref": "#/definitions/v1CoxEdgeClusterConfig" + }, + "cloudType": { + "type": "string" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1CoxEdgeMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroCoxEdgeClusterRateEntity": { + "description": "Cox Edge cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1CoxEdgeClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1CoxEdgeMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroCustomClusterEntity": { + "description": "Custom cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "$ref": "#/definitions/v1CustomClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1CustomClusterConfigEntity", + "description": "General cluster configuration like patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1CustomMachinePoolConfigEntity" + }, + "type": "array" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroEdgeNativeClusterEntity": { + "description": "EdgeNative cluster create or update request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1EdgeNativeClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1EdgeNativeMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroEdgeNativeClusterImportEntity": { + "description": "Spectro EdgeNative cluster import request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1ImportClusterConfig" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroEdgeNativeClusterRateEntity": { + "description": "Edge-native cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1EdgeNativeClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1EdgeNativeMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroEksClusterEntity": { + "description": "Spectro EKS cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "$ref": "#/definitions/v1EksClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "fargateProfiles": { + "items": { + "$ref": "#/definitions/v1FargateProfile" + }, + "type": "array" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1EksMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudAccountUid", + "cloudConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroEksClusterRateEntity": { + "description": "Spectro EKS cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1EksClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1EksMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroGcpClusterEntity": { + "description": "GCP cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "$ref": "#/definitions/v1GcpClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1GcpMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroGcpClusterImportEntity": { + "description": "Spectro GCP cluster import request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1ImportClusterConfig" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroGcpClusterRateEntity": { + "description": "Gcp cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1GcpClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1GcpMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroGenericClusterImportEntity": { + "description": "Spectro generic cluster import request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1ImportClusterConfig" + }, + "edgeConfig": { + "$ref": "#/definitions/v1ImportEdgeHostConfig" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroGenericClusterRateEntity": { + "description": "Generic cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1GenericClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1GenericMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroInstallerEntity": { + "description": "Spectro installer entity for create", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "type": "string" + }, + "privateGatewayUid": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + } + }, + "type": "object" + }, + "status": { + "$ref": "#/definitions/v1InstallerStatus" + } + }, + "type": "object" + }, + "v1SpectroInstallerInputEntity": { + "description": "Spectro installer entity for create", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + } + }, + "type": "object" + }, + "v1SpectroInstallerStatus": { + "description": "spectro installer status", + "properties": { + "status": { + "$ref": "#/definitions/v1InstallerStatus" + } + }, + "type": "object" + }, + "v1SpectroInstallers": { + "description": "List Spectro installers", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1SpectroInstallerEntity" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "type": "object" + }, + "v1SpectroLibvirtClusterEntity": { + "description": "Libvirt cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1LibvirtClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1LibvirtMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroLibvirtClusterImportEntity": { + "description": "Spectro Libvirt cluster import request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1ImportClusterConfig" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroLibvirtClusterRateEntity": { + "description": "libvirt cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1LibvirtClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1LibvirtMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroMaasClusterEntity": { + "description": "Spectro Maas cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "$ref": "#/definitions/v1MaasClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1MaasMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroMaasClusterImportEntity": { + "description": "Spectro maas cluster import request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1ImportClusterConfig" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroMaasClusterRateEntity": { + "description": "Maas cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1MaasClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1MaasMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroMgmt": { + "description": "Spectro management data", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1SpectroMgmtSpec" + }, + "status": { + "$ref": "#/definitions/v1SpectroMgmtStatus" + } + }, + "type": "object" + }, + "v1SpectroMgmtSpec": { + "description": "spectro management specifications", + "properties": { + "installerMode": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "targetVersion": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1SpectroMgmtStatus": { + "description": "spectro management status information", + "properties": { + "appVersions": { + "items": { + "$ref": "#/definitions/v1AppVersion" + }, + "type": "array", + "uniqueItems": true + }, + "isFailed": { + "type": "boolean", + "x-omitempty": false + }, + "lastUpdatedTime": { + "$ref": "#/definitions/v1Time" + }, + "message": { + "type": "string" + }, + "messageLogs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "state": { + "type": "string" + }, + "upgradeHistory": { + "items": { + "$ref": "#/definitions/v1SpectroMgmtUpgrade" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SpectroMgmtUpgrade": { + "description": "spectro management upgrade logs", + "properties": { + "upgradeTime": { + "$ref": "#/definitions/v1Time" + }, + "version": { + "type": "string" + } + } + }, + "v1SpectroMgmtUpgradePack": { + "description": "Spectro application management cluster upgrade pack information", + "properties": { + "diffMessage": { + "description": "Spectro application management cluster pack difference message", + "type": "string" + }, + "layer": { + "description": "Spectro application management cluster pack layer type", + "type": "string" + }, + "name": { + "description": "Spectro application management cluster pack name", + "type": "string" + }, + "registryUid": { + "description": "Spectro application management cluster pack registry unique identifier", + "type": "string" + }, + "type": { + "description": "Spectro application management cluster pack type", + "type": "string" + }, + "uid": { + "description": "Spectro application management cluster pack unique identifier", + "type": "string" + }, + "values": { + "description": "Spectro application management cluster pack values", + "type": "string" + }, + "version": { + "description": "Spectro application management cluster pack version", + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroMgmtUpgradeProfile": { + "description": "Spectro application management cluster upgrade pack information", + "properties": { + "packs": { + "description": "Spectro application management cluster upgrade packs", + "items": { + "$ref": "#/definitions/v1SpectroMgmtUpgradePack" + }, + "type": "array" + }, + "uid": { + "description": "Spectro application management cluster profile unique identifier", + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroMgmtUpgradeProfiles": { + "description": "Spectro application management cluster information", + "properties": { + "profiles": { + "description": "Spectro application management cluster profiles", + "items": { + "$ref": "#/definitions/v1SpectroMgmtUpgradeProfile" + }, + "type": "array" + }, + "version": { + "description": "Spectro application management cluster version", + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroMgmtUpgradeSpc": { + "description": "Spectro application management cluster upgrade profiles", + "properties": { + "current": { + "$ref": "#/definitions/v1SpectroMgmtUpgradeProfiles" + }, + "target": { + "$ref": "#/definitions/v1SpectroMgmtUpgradeProfiles" + } + }, + "type": "object" + }, + "v1SpectroOpenStackClusterEntity": { + "description": "OpenStack cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "$ref": "#/definitions/v1OpenStackClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1OpenStackMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudAccountUid", + "cloudConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroOpenStackClusterImportEntity": { + "description": "Spectro OpenStack cluster import request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1ImportClusterConfig" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroOpenStackClusterRateEntity": { + "description": "Openstack cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1OpenStackClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1OpenStackMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroTenantClusterMigration": { + "description": "Spectro tenant cluster migration status", + "properties": { + "message": { + "type": "string" + }, + "name": { + "type": "string" + }, + "state": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1SpectroTenantMigration": { + "description": "Spectro tenant migration status", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1SpectroTenantClusterMigration" + }, + "type": "array", + "uniqueItems": true + }, + "state": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SpectroTencentClusterEntity": { + "description": "Tencent cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "$ref": "#/definitions/v1TencentClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1TencentMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudType", + "cloudAccountUid", + "cloudConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroTencentClusterRateEntity": { + "description": "Spectro Tencent cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1TencentClusterConfig" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1TencentMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpectroVirtualClusterEntity": { + "description": "Spectro virtual cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1VirtualClusterConfig" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1VirtualMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudType", + "clusterConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroVsphereClusterEntity": { + "description": "vSphere cluster request payload for create and update", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "properties": { + "cloudAccountUid": { + "description": "Cloud account uid to be used for cluster provisioning", + "type": "string" + }, + "cloudConfig": { + "$ref": "#/definitions/v1VsphereClusterConfigEntity" + }, + "clusterConfig": { + "$ref": "#/definitions/v1ClusterConfigEntity", + "description": "General cluster configuration like health, patching settings, namespace resource allocation, rbac" + }, + "edgeHostUid": { + "description": "Appliance (Edge Host) uid for Edge env", + "type": "string" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1VsphereMachinePoolConfigEntity" + }, + "type": "array" + }, + "policies": { + "$ref": "#/definitions/v1SpectroClusterPolicies" + }, + "profiles": { + "items": { + "$ref": "#/definitions/v1SpectroClusterProfileEntity" + }, + "type": "array" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroVsphereClusterImportEntity": { + "description": "Spectro Vsphere cluster import request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1ImportClusterConfig" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SpectroVsphereClusterRateEntity": { + "description": "Vsphere cluster request payload for estimating rate", + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1VsphereClusterConfigEntity" + }, + "machinepoolconfig": { + "items": { + "$ref": "#/definitions/v1VsphereMachinePoolConfigEntity" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1SpotMarketOptions": { + "description": "SpotMarketOptions defines the options available to a user when configuring Machines to run on Spot instances. Most users should provide an empty struct.", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + }, + "type": "object" + }, + "v1SpotVMOptions": { + "description": "SpotVMOptions defines the options relevant to running the Machine on Spot VMs", + "properties": { + "maxPrice": { + "description": "MaxPrice defines the maximum price the user is willing to pay for Spot VM instances", + "type": "string" + } + }, + "type": "object" + }, + "v1SsoLogin": { + "description": "Describes the allowed sso login details", + "properties": { + "displayName": { + "description": "Describes the display name for the sso login", + "type": "string" + }, + "logo": { + "description": "Describes the url path for the sso login", + "type": "string" + }, + "name": { + "description": "Describes the processed name for the sso login", + "type": "string" + }, + "redirectUri": { + "description": "Describes the sso login url for the authentication", + "type": "string" + } + }, + "type": "object" + }, + "v1SsoLogins": { + "description": "Describes the allowed sso logins", + "items": { + "$ref": "#/definitions/v1SsoLogin" + }, + "type": "array", + "uniqueItems": true + }, + "v1StorageAccount": { + "description": "Azure storage account provides a unique namespace for your Azure resources", + "properties": { + "id": { + "description": "Fully qualified resource ID for the resource", + "type": "string" + }, + "kind": { + "description": "The kind of the resource", + "type": "string" + }, + "location": { + "description": "The geo-location where the resource lives", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + } + }, + "type": "object" + }, + "v1StorageAccountEntity": { + "description": "Azure storage account entity", + "properties": { + "id": { + "description": "Azure storage account id", + "type": "string" + }, + "name": { + "description": "Azure storage account name", + "type": "string" + } + }, + "type": "object" + }, + "v1StorageContainer": { + "description": "Azure storage container organizes a set of blobs, similar to a directory in a file system", + "properties": { + "id": { + "description": "Fully qualified resource ID for the resource.", + "type": "string" + }, + "name": { + "description": "The name of the resource", + "type": "string" + }, + "type": { + "description": "The type of the resource. E.g. \"Microsoft.Compute/virtualMachines\"", + "type": "string" + } + }, + "type": "object" + }, + "v1StorageCost": { + "description": "Cloud storage cost", + "properties": { + "discountedUsage": { + "description": "Cloud storage upper limit which is free.", + "type": "string" + }, + "price": { + "description": "Array of cloud storage range prices", + "items": { + "$ref": "#/definitions/v1StoragePrice" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1StoragePrice": { + "description": "Cloud storage price within an upper limit.", + "properties": { + "limit": { + "description": "Upper limit of cloud storage usage", + "type": "string" + }, + "price": { + "description": "Price of cloud storage type", + "type": "string" + } + }, + "type": "object" + }, + "v1StorageRate": { + "description": "Storage estimated rate information", + "properties": { + "iops": { + "format": "float64", + "type": "number" + }, + "rate": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "sizeGB": { + "format": "float64", + "type": "number" + }, + "throughput": { + "format": "float64", + "type": "number" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "v1StorageType": { + "description": "Cloud cloud Storage type details", + "properties": { + "cost": { + "$ref": "#/definitions/v1StorageCost" + }, + "iopsCost": { + "$ref": "#/definitions/v1StorageCost" + }, + "kind": { + "description": "kind of storage type", + "type": "string" + }, + "name": { + "description": "Name of the storage type", + "type": "string" + }, + "throughputCost": { + "$ref": "#/definitions/v1StorageCost" + } + }, + "type": "object" + }, + "v1StripeKey": { + "description": "Stripe key object", + "properties": { + "publishKey": { + "description": "Publish stripe key", + "type": "string" + } + } + }, + "v1Subnet": { + "properties": { + "cidrBlock": { + "description": "CidrBlock is the CIDR block to be used when the provider creates a managed Vnet.", + "type": "string" + }, + "name": { + "type": "string" + }, + "securityGroupName": { + "description": "Network Security Group(NSG) to be attached to subnet. NSG for a control plane subnet, should allow inbound to port 6443, as port 6443 is used by kubeadm to bootstrap the control planes", + "type": "string" + } + }, + "type": "object" + }, + "v1Subscription": { + "description": "Azure Subscription Type", + "properties": { + "authorizationSource": { + "description": "The authorization source of the request. Valid values are one or more combinations of Legacy, RoleBased, Bypassed, Direct and Management", + "type": "string" + }, + "displayName": { + "description": "The subscription display name", + "type": "string" + }, + "state": { + "description": "The subscription state. Possible values are Enabled, Warned, PastDue, Disabled, and Deleted.", + "type": "string" + }, + "subscriptionId": { + "description": "The subscription ID", + "type": "string" + } + }, + "type": "object" + }, + "v1SyftDependency": { + "description": "Compliance Scan Syft Dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1SyftDependencyEntity": { + "description": "Syft dependency", + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "version": { + "type": "string" + } + } + }, + "v1SyftEntity": { + "description": "Syft response", + "properties": { + "report": { + "$ref": "#/definitions/v1SyftReportEntity" + }, + "requestUid": { + "type": "string" + }, + "status": { + "enum": [ + "Completed", + "InProgress", + "Failed", + "Initiated" + ], + "type": "string" + } + }, + "required": [ + "requestUid", + "status", + "report" + ] + }, + "v1SyftImageContext": { + "description": "Compliance Scan Syft Image Context", + "properties": { + "containerName": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + } + } + }, + "v1SyftReport": { + "description": "Compliance Scan Syft Report", + "properties": { + "dependencies": { + "items": { + "$ref": "#/definitions/v1SyftDependency" + }, + "type": "array" + }, + "image": { + "type": "string" + }, + "imageContexts": { + "items": { + "$ref": "#/definitions/v1SyftImageContext" + }, + "type": "array" + }, + "isSBOMExist": { + "type": "boolean" + }, + "state": { + "type": "string" + }, + "time": { + "$ref": "#/definitions/v1Time" + }, + "vulnerabilities": { + "items": { + "$ref": "#/definitions/v1SyftVulnerability" + }, + "type": "array" + }, + "vulnerabilitySummary": { + "$ref": "#/definitions/v1SyftVulnerabilitySummary" + } + } + }, + "v1SyftReportEntity": { + "description": "Syft report", + "properties": { + "batchNo": { + "format": "int32", + "type": "integer" + }, + "batchSize": { + "format": "int32", + "type": "integer" + }, + "dependencies": { + "items": { + "$ref": "#/definitions/v1SyftDependencyEntity" + }, + "type": "array" + }, + "image": { + "type": "string" + }, + "imageContexts": { + "items": { + "$ref": "#/definitions/v1SyftImageContext" + }, + "type": "array" + }, + "sbom": { + "type": "string" + }, + "time": { + "$ref": "#/definitions/v1Time" + }, + "vulnerabilities": { + "items": { + "$ref": "#/definitions/v1SyftVulnerabilityEntity" + }, + "type": "array" + }, + "vulnerabilitySummary": { + "$ref": "#/definitions/v1SyftVulnerabilitySummaryEntity" + } + } + }, + "v1SyftScanContext": { + "description": "Compliance Scan Syft Context", + "properties": { + "format": { + "type": "string" + }, + "labelSelector": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "scope": { + "type": "string" + } + } + }, + "v1SyftVulnerability": { + "description": "Compliance Scan Syft Vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + }, + "v1SyftVulnerabilityEntity": { + "description": "Syft vulnerability", + "properties": { + "fixedIn": { + "type": "string" + }, + "installed": { + "type": "string" + }, + "name": { + "type": "string" + }, + "severity": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vulnerability": { + "type": "string" + } + } + }, + "v1SyftVulnerabilitySummary": { + "description": "Compliance Scan Syft Vulnerability Summary", + "properties": { + "critical": { + "format": "int32", + "type": "integer" + }, + "high": { + "format": "int32", + "type": "integer" + }, + "low": { + "format": "int32", + "type": "integer" + }, + "medium": { + "format": "int32", + "type": "integer" + }, + "negligible": { + "format": "int32", + "type": "integer" + }, + "unknown": { + "format": "int32", + "type": "integer" + } + } + }, + "v1SyftVulnerabilitySummaryEntity": { + "description": "Syft vulnerability summary", + "properties": { + "critical": { + "format": "int32", + "type": "integer" + }, + "high": { + "format": "int32", + "type": "integer" + }, + "low": { + "format": "int32", + "type": "integer" + }, + "medium": { + "format": "int32", + "type": "integer" + }, + "negligible": { + "format": "int32", + "type": "integer" + }, + "unknown": { + "format": "int32", + "type": "integer" + } + } + }, + "v1SysLogin": { + "description": "System admin login input", + "properties": { + "emailId": { + "type": "string" + }, + "password": { + "format": "password", + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "v1SysUserToken": { + "description": "Auth token response", + "properties": { + "Authorization": { + "type": "string" + }, + "IsEmailSet": { + "type": "boolean", + "x-omitempty": false + }, + "IsEmailVerified": { + "type": "boolean", + "x-omitempty": false + }, + "IsMfa": { + "type": "boolean", + "x-omitempty": false + }, + "IsPasswordReset": { + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SystemAdmin": { + "description": "System Admin information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1SystemAdministratorSpec" + }, + "status": { + "$ref": "#/definitions/v1SystemAdministratorStatus" + } + }, + "type": "object" + }, + "v1SystemAdminActivation": { + "description": "System Administrator Activation Specification", + "properties": { + "expiry": { + "$ref": "#/definitions/v1Time" + }, + "link": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemAdminEntity": { + "description": "System Admin information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1SystemAdministratorSpec" + } + }, + "type": "object" + }, + "v1SystemAdminMfa": { + "description": "System Administrator MFA configuration", + "properties": { + "devices": { + "items": { + "type": "string" + }, + "type": "array" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemAdminProfile": { + "description": "System Administrator Profile Entity", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1SystemAdminProfileSpec" + } + }, + "type": "object" + }, + "v1SystemAdminProfileSpec": { + "description": "System Administrator Profile Specification", + "properties": { + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemAdministratorSpec": { + "description": "System Administrator Entity Specification", + "properties": { + "adminType": { + "enum": [ + "AccountAdmin", + "OperationAdmin" + ], + "type": "string" + }, + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "mfa": { + "$ref": "#/definitions/v1SystemAdminMfa", + "type": "string" + } + }, + "required": [ + "firstName", + "lastName", + "emailId", + "adminType" + ], + "type": "object" + }, + "v1SystemAdministratorStatus": { + "description": "System Administrator Status", + "properties": { + "activation": { + "$ref": "#/definitions/v1SystemAdminActivation" + }, + "createdBy": { + "type": "string" + }, + "lastPasswordUpdate": { + "$ref": "#/definitions/v1Time" + }, + "lastSignIn": { + "$ref": "#/definitions/v1Time" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemAdmins": { + "description": "List of System Admin information's", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1SystemAdmin" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1SystemAwsAccount": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemAwsSpec" + } + }, + "type": "object" + }, + "v1SystemAwsImage": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemAwsImageSpec" + } + }, + "type": "object" + }, + "v1SystemAwsImageSpec": { + "description": "system aws account specifications", + "properties": { + "goldenImageRegion": { + "type": "string" + } + } + }, + "v1SystemAwsSpec": { + "description": "system aws account specifications", + "properties": { + "accessKey": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + }, + "v1SystemAwsStsAccount": { + "description": "System AWS Gov account specifications", + "properties": { + "accessKey": { + "type": "string" + }, + "accountId": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + }, + "v1SystemAzureAccount": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemAzureSpec" + } + }, + "type": "object" + }, + "v1SystemAzureSpec": { + "description": "system azure account specifications", + "properties": { + "clientId": { + "type": "string" + }, + "clientSecret": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "tenantId": { + "type": "string" + } + } + }, + "v1SystemAzureStorage": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemAzureStorageSpec" + } + }, + "type": "object" + }, + "v1SystemAzureStorageSpec": { + "description": "system aws account specifications", + "properties": { + "accessKey": { + "type": "string" + }, + "container": { + "type": "string" + }, + "storageName": { + "type": "string" + } + } + }, + "v1SystemBackupConfigSpec": { + "description": "system backup config spec", + "properties": { + "ftp": { + "$ref": "#/definitions/v1SystemFtpSpec" + }, + "hourOfTheDay": { + "type": "integer", + "x-omitempty": false + }, + "interval": { + "type": "integer", + "x-omitempty": false + }, + "retentionPeriod": { + "type": "integer", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SystemBackupFtpConfigSpec": { + "description": "system backup config spec", + "properties": { + "backupSpec": { + "$ref": "#/definitions/v1SystemBackupSpec" + }, + "ftp": { + "$ref": "#/definitions/v1SystemFtpSpec" + } + }, + "type": "object" + }, + "v1SystemBackupS3ConfigSpec": { + "description": "system backup config spec", + "properties": { + "backupSpec": { + "$ref": "#/definitions/v1SystemBackupSpec" + }, + "s3": { + "$ref": "#/definitions/v1SystemS3Spec" + } + }, + "type": "object" + }, + "v1SystemBackupSpec": { + "description": "system backup config spec", + "properties": { + "hourOfTheDay": { + "type": "integer", + "x-omitempty": false + }, + "interval": { + "type": "integer", + "x-omitempty": false + }, + "retentionPeriod": { + "type": "integer", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SystemCertificateSpec": { + "description": "system smtp config spec", + "properties": { + "caCert": { + "type": "string" + }, + "crt": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "key": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemConfigAuth": { + "description": "System config auth", + "properties": { + "enforceServiceAuthToken": { + "type": "boolean", + "x-omitempty": false + }, + "enforceTlsVerify": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1SystemConfigCluster": { + "description": "System config cluster", + "properties": { + "stableEndpointAccess": { + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1SystemConfigDomainSpec": { + "description": "system domain config spec", + "properties": { + "apiServer": { + "type": "string" + }, + "derivedApiServer": { + "type": "string" + }, + "derivedRootDomain": { + "type": "string" + }, + "rootDomain": { + "type": "string" + }, + "urlProtocol": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemConfigStoreEntity": { + "properties": { + "key": { + "type": "string", + "x-omitempty": false + }, + "value": { + "type": "string", + "x-omitempty": false + } + }, + "required": [ + "key", + "value" + ], + "type": "object" + }, + "v1SystemCryptoData": { + "description": "SystemAdmin", + "properties": { + "input": { + "type": "string" + }, + "result": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemCryptoInput": { + "description": "SystemAdmin", + "properties": { + "input": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemEdgeImage": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemEdgeImageSpec" + } + }, + "type": "object" + }, + "v1SystemEdgeImageSpec": { + "description": "system edge account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + }, + "v1SystemEdgeNativeImage": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemEdgeNativeImageSpec" + } + }, + "type": "object" + }, + "v1SystemEdgeNativeImageSpec": { + "description": "system edge-native account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "stylusImagesEndpoint": { + "type": "string" + } + } + }, + "v1SystemFeature": { + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1SystemFeaturesSpec" + } + }, + "type": "object" + }, + "v1SystemFeatures": { + "properties": { + "items": { + "description": "List of system features", + "items": { + "$ref": "#/definitions/v1SystemFeature" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1SystemFeaturesOperation": { + "properties": { + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SystemFeaturesSpec": { + "properties": { + "description": { + "description": "Feature description", + "type": "string" + }, + "docLink": { + "description": "Feature doc link", + "type": "string" + }, + "isAllowed": { + "description": "Flag which specifies if feature is allowed or not", + "type": "boolean", + "x-omitempty": false + }, + "key": { + "description": "Unique Feature key", + "type": "string" + } + }, + "type": "object" + }, + "v1SystemFtpSpec": { + "description": "system ftp config spec", + "properties": { + "dir": { + "type": "string", + "x-omitempty": false + }, + "password": { + "type": "string", + "x-omitempty": false + }, + "server": { + "type": "string", + "x-omitempty": false + }, + "username": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SystemGcpAccount": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemGcpSpec" + } + }, + "type": "object" + }, + "v1SystemGcpImage": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemGcpImageSpec" + } + }, + "type": "object" + }, + "v1SystemGcpImageSpec": { + "description": "system gcp account specifications", + "properties": { + "imageProject": { + "type": "string" + } + } + }, + "v1SystemGcpSpec": { + "description": "system gcp account specifications", + "properties": { + "json": { + "type": "string" + } + } + }, + "v1SystemGitAuthSpec": { + "description": "system git auth account specifications", + "properties": { + "_type": { + "type": "string" + }, + "password": { + "type": "string" + }, + "token": { + "type": "string" + }, + "username": { + "$ref": "#/definitions/v1SystemGitAuthSpec" + } + } + }, + "v1SystemGithubSsoSpec": { + "description": "system sso github config spec", + "properties": { + "clientId": { + "type": "string" + }, + "clientSecretKey": { + "type": "string" + }, + "isEnabled": { + "type": "boolean" + }, + "logoUrl": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SystemKubectlSpec": { + "description": "system web kubectl config spec", + "properties": { + "endpoint": { + "type": "string" + }, + "isEnabled": { + "type": "boolean" + } + }, + "type": "object" + }, + "v1SystemLibvirtImage": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemLibvirtImageSpec" + } + }, + "type": "object" + }, + "v1SystemLibvirtImageSpec": { + "description": "system libvirt account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + }, + "v1SystemLoggerSpec": { + "description": "system logger config spec", + "properties": { + "format": { + "type": "string" + }, + "level": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemMaasImage": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemMaasImageSpec" + } + }, + "type": "object" + }, + "v1SystemMaasImageSpec": { + "description": "system maas account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + } + } + }, + "v1SystemOciImageRegistry": { + "description": "system web kubectl config spec", + "properties": { + "baseContentPath": { + "type": "string" + }, + "caCert": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "mirrorRegistries": { + "type": "string" + }, + "name": { + "type": "string" + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemOidcClaims": { + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SystemOidcClientSpec": { + "description": "system sso oidc config spec", + "properties": { + "callbackUrl": { + "type": "string", + "x-omitempty": false + }, + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "isEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "logoUrl": { + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "$ref": "#/definitions/v1SystemOidcClaims" + }, + "scopes": { + "items": { + "type": "string" + }, + "type": "array", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SystemOpenstackImage": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemOpenstackImageSpec" + } + }, + "type": "object" + }, + "v1SystemOpenstackImageSpec": { + "description": "system openstack account specifications", + "properties": { + "imagesHostEndpoint": { + "type": "string" + } + } + }, + "v1SystemPasswordPolicySpec": { + "description": "system password policy", + "properties": { + "creationTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "expiryDurationInDays": { + "type": "integer" + }, + "firstReminderInDays": { + "type": "integer" + }, + "isRegex": { + "type": "boolean" + }, + "minLength": { + "type": "integer" + }, + "minNumOfBlockLetters": { + "type": "integer" + }, + "minNumOfDigits": { + "type": "integer" + }, + "minNumOfSmallLetters": { + "type": "integer" + }, + "minNumOfSpecialCharacters": { + "type": "integer" + }, + "regex": { + "type": "string" + }, + "reminderFrequency": { + "type": "integer" + }, + "updateTimestamp": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1SystemPlan": { + "description": "system plan", + "properties": { + "freeCredits": { + "items": { + "$ref": "#/definitions/v1SystemPlanCredit" + }, + "type": "array" + }, + "planLimit": { + "$ref": "#/definitions/v1SystemPlanLimit" + }, + "slaCredits": { + "items": { + "$ref": "#/definitions/v1SystemPlanCredit" + }, + "type": "array" + }, + "systemStartDate": { + "$ref": "#/definitions/v1Time" + } + } + }, + "v1SystemPlanCredit": { + "description": "Plan Credit", + "properties": { + "cpuCoreHours": { + "format": "int64", + "type": "number", + "x-omitempty": false + }, + "creditUid": { + "type": "string" + }, + "expiry": { + "$ref": "#/definitions/v1Time", + "description": "credit expiry time" + }, + "name": { + "type": "string" + }, + "start": { + "$ref": "#/definitions/v1Time", + "description": "credit start time" + }, + "type": { + "enum": [ + "Pure", + "Alloy" + ], + "type": "string" + } + }, + "required": [ + "type" + ] + }, + "v1SystemPlanLimit": { + "description": "System Monthly Plan Limit", + "properties": { + "alloy": { + "$ref": "#/definitions/v1SystemPlanLimitSpec" + }, + "isUnlimited": { + "description": "is unlimited cpu core hours", + "type": "boolean", + "x-omitempty": false + }, + "pure": { + "$ref": "#/definitions/v1SystemPlanLimitSpec" + } + } + }, + "v1SystemPlanLimitSpec": { + "description": "Monthly Plan Limit spec", + "properties": { + "cpuCoreHours": { + "description": "cpu cores hours", + "format": "int64", + "type": "integer", + "x-omitempty": false + }, + "overageLimitPercentage": { + "default": 25, + "description": "overage limit in percentage", + "format": "int8", + "type": "integer", + "x-omitempty": false + }, + "warnLimitPercentage": { + "default": 90, + "description": "warning limit in percentage", + "format": "int8", + "type": "integer", + "x-omitempty": false + } + } + }, + "v1SystemPlanLimitUpdate": { + "description": "System Plan limit change update entity", + "properties": { + "planLimit": { + "$ref": "#/definitions/v1SystemPlanLimit" + } + } + }, + "v1SystemProductUsage": { + "description": "Yearly usage", + "properties": { + "allocatedCredits": { + "description": "Allocated credits", + "format": "int64", + "type": "number" + }, + "breachedCredits": { + "description": "Credits exceeded the allocated and free credits", + "format": "float64", + "type": "number" + }, + "freeSlaCredits": { + "description": "Free allocated SLA credits", + "format": "int64", + "type": "number" + }, + "usedCredits": { + "description": "Used credits", + "format": "float64", + "type": "number" + } + } + }, + "v1SystemProxySpec": { + "description": "system proxy config spec", + "properties": { + "httpProxy": { + "type": "string" + }, + "httpsProxy": { + "type": "string" + }, + "noProxy": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemRateLimit": { + "description": "system rate-limit", + "properties": { + "isActive": { + "type": "boolean" + } + } + }, + "v1SystemRegistry": { + "description": "Registry configuration", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1RegistryConf" + } + }, + "type": "object" + }, + "v1SystemResourceLimit": { + "properties": { + "kind": { + "$ref": "#/definitions/v1ResourceLimitType", + "type": "string", + "x-omitempty": false + }, + "limit": { + "format": "int64", + "type": "number", + "x-omitempty": false + } + } + }, + "v1SystemResourceLimits": { + "description": "System resource limits. Supported resources keys are 'user','project','apiKey','team','role','cloudaccount','clusterprofile','workspace','registry','privategateway','location','certificate','macro','sshkey','alert','spectrocluster','edgehost'.", + "properties": { + "resources": { + "items": { + "$ref": "#/definitions/v1SystemResourceLimit" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SystemRetentionPolicy": { + "description": "system retention policy", + "properties": { + "retentionPeriod": { + "type": "integer", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SystemReverseProxy": { + "description": "system config reverse proxy", + "properties": { + "caCert": { + "type": "string" + }, + "clientCert": { + "type": "string" + }, + "clientKey": { + "type": "string" + }, + "port": { + "type": "integer" + }, + "protocol": { + "enum": [ + "http", + "https" + ], + "type": "string" + }, + "server": { + "type": "string" + }, + "vHostPort": { + "type": "integer" + } + } + }, + "v1SystemS3Spec": { + "description": "system backup s3 storage config spec", + "properties": { + "accessKey": { + "type": "string", + "x-omitempty": false + }, + "bucket": { + "type": "string", + "x-omitempty": false + }, + "folder": { + "type": "string", + "x-omitempty": false + }, + "region": { + "type": "string", + "x-omitempty": false + }, + "secretKey": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1SystemScarSpec": { + "description": "system scar config spec", + "properties": { + "baseContentPath": { + "type": "string" + }, + "caCert": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "insecureVerify": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemScarValidationResponse": { + "description": "system proxy config spec", + "properties": { + "spectroVersion": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemSecurityMode": { + "description": "System service mode", + "properties": { + "securityMode": { + "type": "string" + } + } + }, + "v1SystemServiceLogin": { + "description": "System service login input", + "properties": { + "authToken": { + "description": "authToken helps in two step verification for the authorization.", + "type": "string" + }, + "isSystem": { + "type": "boolean" + }, + "overlordUid": { + "type": "string" + }, + "serviceName": { + "type": "string" + }, + "serviceVersion": { + "type": "string" + }, + "spectroClusterUid": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemSmtpSpec": { + "description": "system smtp config spec", + "properties": { + "fromEmailId": { + "type": "string" + }, + "insecureSkipVerifyTls": { + "type": "boolean" + }, + "password": { + "type": "string" + }, + "smtpPort": { + "type": "integer" + }, + "smtpServer": { + "type": "string" + }, + "userName": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemSsoAuthSpec": { + "description": "system sso config spec", + "properties": { + "github": { + "$ref": "#/definitions/v1SystemGithubSsoSpec" + }, + "oidcAuthSpecs": { + "additionalProperties": { + "$ref": "#/definitions/v1SystemOidcClientSpec" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1SystemSsoSpec": { + "description": "system sso config spec", + "properties": { + "acsUrlRoot": { + "type": "string" + }, + "acsUrlScheme": { + "type": "string" + }, + "apiVersion": { + "type": "string" + }, + "audienceUrl": { + "type": "string" + }, + "authSpec": { + "$ref": "#/definitions/v1SystemSsoAuthSpec" + }, + "entityId": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemStartDate": { + "description": "system start date", + "properties": { + "systemStartDate": { + "$ref": "#/definitions/v1Time" + } + } + }, + "v1SystemStorageS3ConfigSpec": { + "description": "system storage s3 config spec", + "properties": { + "isEnabled": { + "type": "boolean" + }, + "retentionPolicy": { + "$ref": "#/definitions/v1SystemRetentionPolicy" + }, + "s3": { + "$ref": "#/definitions/v1SystemS3Spec" + } + }, + "type": "object" + }, + "v1SystemTencentAccount": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemTencentSpec" + } + }, + "type": "object" + }, + "v1SystemTencentSpec": { + "description": "system tencent account specifications", + "properties": { + "secretId": { + "type": "string" + }, + "secretKey": { + "type": "string" + } + } + }, + "v1SystemTimeseriesMetrics": { + "description": "system timeseries metrics config", + "properties": { + "archivalInterval": { + "type": "integer" + }, + "batchInterval": { + "type": "integer" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "retentionPeriod": { + "type": "integer" + } + }, + "type": "object" + }, + "v1SystemTimeseriesSpec": { + "description": "system timeseries config spec", + "properties": { + "machine": { + "$ref": "#/definitions/v1SystemTimeseriesMetrics" + }, + "pod": { + "$ref": "#/definitions/v1SystemTimeseriesMetrics" + } + }, + "type": "object" + }, + "v1SystemUsage": { + "description": "System usage billing object", + "properties": { + "planLimit": { + "$ref": "#/definitions/v1PlanLimit" + }, + "usageBillingPeriod": { + "$ref": "#/definitions/v1InvoiceBillingPeriod" + }, + "yearlyUsages": { + "description": "List of every year system usage", + "items": { + "$ref": "#/definitions/v1YearlyUsage" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1SystemUserMe": { + "description": "User information wrt permissions", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1SystemUserSpec" + }, + "status": { + "$ref": "#/definitions/v1SystemUserMeStatus" + } + }, + "type": "object" + }, + "v1SystemUserMeStatus": { + "description": "User status with permissions", + "properties": { + "isEmailSet": { + "type": "boolean", + "x-omitempty": false + }, + "isEmailVerified": { + "type": "boolean", + "x-omitempty": false + }, + "isMfaEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "isPasswordReset": { + "type": "boolean", + "x-omitempty": false + }, + "lastEmailUpdateTime": { + "$ref": "#/definitions/v1Time" + }, + "lastEmailVerifiedTime": { + "$ref": "#/definitions/v1Time" + }, + "lastLoginTime": { + "$ref": "#/definitions/v1Time" + }, + "lastPasswordUpdateTime": { + "$ref": "#/definitions/v1Time" + } + } + }, + "v1SystemUserSpec": { + "description": "User specifications", + "properties": { + "adminType": { + "description": "Admin type", + "type": "string" + }, + "emailId": { + "description": "System User's email id", + "type": "string" + } + } + }, + "v1SystemVersionInfo": { + "description": "system version info", + "properties": { + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1SystemVsphereImage": { + "description": "SystemAdmin", + "properties": { + "spec": { + "$ref": "#/definitions/v1SystemVsphereImageSpec" + } + }, + "type": "object" + }, + "v1SystemVsphereImageSpec": { + "description": "system vsphere account specifications", + "properties": { + "caCert": { + "type": "string" + }, + "imagesHostEndpoint": { + "type": "string" + }, + "insecureSkipVerify": { + "type": "boolean" + }, + "overlordOvaLocation": { + "type": "string" + } + } + }, + "v1TagFilter": { + "description": "Tag Filter create spec", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1TagFilterSpec" + } + }, + "type": "object" + }, + "v1TagFilterGroup": { + "properties": { + "conjunction": { + "$ref": "#/definitions/v1SearchFilterConjunctionOperator" + }, + "filters": { + "items": { + "$ref": "#/definitions/v1TagFilterItem" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1TagFilterItem": { + "properties": { + "key": { + "type": "string" + }, + "negation": { + "type": "boolean" + }, + "operator": { + "$ref": "#/definitions/v1SearchFilterKeyValueOperator" + }, + "values": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1TagFilterSpec": { + "description": "Filter create spec", + "properties": { + "filterGroup": { + "$ref": "#/definitions/v1TagFilterGroup" + } + }, + "type": "object" + }, + "v1TagFilterSummary": { + "description": "Filter summary object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1TagFilterSpec" + } + }, + "type": "object" + }, + "v1Taint": { + "description": "Taint", + "properties": { + "effect": { + "enum": [ + "NoSchedule", + "PreferNoSchedule", + "NoExecute" + ], + "type": "string" + }, + "key": { + "description": "The taint key to be applied to a node", + "type": "string" + }, + "timeAdded": { + "$ref": "#/definitions/v1Time" + }, + "value": { + "description": "The taint value corresponding to the taint key.", + "type": "string" + } + }, + "type": "object" + }, + "v1Team": { + "description": "Team information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1TeamSpec" + }, + "status": { + "$ref": "#/definitions/v1TeamStatus" + } + }, + "type": "object" + }, + "v1TeamPatch": { + "items": { + "$ref": "#/definitions/v1HttpPatch" + }, + "type": "array" + }, + "v1TeamRoleMap": { + "properties": { + "roles": { + "items": { + "type": "string" + }, + "type": "array" + }, + "teamId": { + "type": "string" + } + } + }, + "v1TeamSpec": { + "description": "Team specifications", + "properties": { + "roles": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "sources": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "users": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1TeamSpecSummary": { + "properties": { + "emailId": { + "type": "string" + }, + "projects": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "roles": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "users": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1TeamStatus": { + "description": "Team status", + "type": "object" + }, + "v1TeamSummary": { + "description": "Team summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1TeamSpecSummary" + }, + "status": { + "$ref": "#/definitions/v1TeamStatus" + } + }, + "type": "object" + }, + "v1TeamSummarySortFields": { + "enum": [ + "name", + "creationTimestamp" + ], + "type": "string", + "x-nullable": true + }, + "v1TeamSummarySortSpec": { + "properties": { + "field": { + "$ref": "#/definitions/v1TeamSummarySortFields" + }, + "order": { + "$ref": "#/definitions/v1SortOrder" + } + } + }, + "v1TeamTenantRolesEntity": { + "properties": { + "roles": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1TeamTenantRolesUpdate": { + "properties": { + "roles": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1Teams": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1Team" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1TeamsBatch": { + "items": { + "$ref": "#/definitions/v1Team" + }, + "type": "array", + "uniqueItems": true + }, + "v1TeamsFilterSpec": { + "description": "Teams filter spec", + "properties": { + "name": { + "$ref": "#/definitions/v1FilterString" + } + } + }, + "v1TeamsMetadata": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1ObjectEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1TeamsSummary": { + "description": "Deprecated, Use v1UsersSummaryList - Returns User summary", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1TeamSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1TeamsSummaryList": { + "description": "Returns Team summary", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1TeamSummary" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1TeamsSummarySpec": { + "description": "Teams filter summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1TeamsFilterSpec" + }, + "sort": { + "items": { + "$ref": "#/definitions/v1TeamSummarySortSpec" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1Tenant": { + "description": "Tenant", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1TenantSpec" + }, + "status": { + "$ref": "#/definitions/v1TenantStatus" + } + }, + "type": "object" + }, + "v1TenantActivate": { + "description": "Activate/Deactivate tenant", + "properties": { + "isActive": { + "default": true, + "type": "boolean" + } + }, + "type": "object" + }, + "v1TenantActivity": { + "description": "Active tenant and clusters data", + "properties": { + "clustersInfo": { + "$ref": "#/definitions/v1ClustersInfo" + }, + "org": { + "type": "string" + }, + "planType": { + "type": "string" + }, + "totalProjects": { + "format": "int64", + "type": "number" + }, + "totalUsers": { + "format": "int64", + "type": "number" + }, + "uid": { + "type": "string" + }, + "users": { + "items": { + "$ref": "#/definitions/v1UserActivityInfo" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1TenantAddressPatch": { + "description": "Tenant Address", + "properties": { + "address": { + "$ref": "#/definitions/v1Address" + } + }, + "type": "object" + }, + "v1TenantAssetCert": { + "description": "tenant cert", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1Cert" + } + }, + "type": "object" + }, + "v1TenantAssetCerts": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1TenantAssetCert" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1TenantBasicEntity": { + "description": "Tenant Basic param", + "properties": { + "emailId": { + "type": "string" + }, + "orgName": { + "type": "string" + } + }, + "type": "object" + }, + "v1TenantCleanUpStatus": { + "description": "Tenant CleanUp Status", + "properties": { + "cleanUpError": { + "type": "string" + }, + "cleanUpStages": { + "type": "string" + }, + "cleanUpTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "cleanedResources": { + "items": { + "type": "string" + }, + "type": "array" + }, + "isCompleted": { + "type": "boolean", + "x-omitempty": false + }, + "isInProgress": { + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1TenantClusterSettings": { + "properties": { + "nodesAutoRemediationSetting": { + "$ref": "#/definitions/v1NodesAutoRemediationSettings" + } + } + }, + "v1TenantContractSpec": { + "description": "Tenant contract settings", + "properties": { + "acceptedTime": { + "$ref": "#/definitions/v1Time", + "description": "If the contract is accepted offline, set the accepted time" + }, + "isAccepted": { + "description": "If the contract is accepted offline, then set this field to true", + "type": "boolean" + }, + "isRequired": { + "description": "Is the contract required, for on-prem installation it will be false", + "type": "boolean" + } + }, + "required": [ + "isRequired", + "isAccepted" + ], + "type": "object" + }, + "v1TenantDomains": { + "description": "Tenant domains", + "properties": { + "domains": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1TenantEmailPatch": { + "description": "Tenant EmailId", + "properties": { + "emailId": { + "type": "string" + } + }, + "type": "object" + }, + "v1TenantEnableClusterGroup": { + "description": "Enable or Disable cluster group for a tenant", + "properties": { + "hideSystemClusterGroups": { + "type": "boolean", + "x-omitempty": false + }, + "isClusterGroupEnabled": { + "description": "Deprecated. Use hideSystemClusterGroups field", + "type": "boolean", + "x-omitempty": false + } + } + }, + "v1TenantEntity": { + "description": "Tenant Entity", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1TenantSpecEntity" + } + }, + "type": "object" + }, + "v1TenantFreemium": { + "description": "Tenant freemium configuration", + "properties": { + "activeClustersLimit": { + "type": "integer", + "x-omitempty": false + }, + "isFreemium": { + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "type": "boolean", + "x-omitempty": false + }, + "overageUsageLimit": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "totalUsageLimit": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + } + }, + "v1TenantFreemiumUsage": { + "properties": { + "isFreemium": { + "type": "boolean", + "x-omitempty": false + }, + "isUnlimited": { + "type": "boolean", + "x-omitempty": false + }, + "limit": { + "$ref": "#/definitions/v1FreemiumUsageLimit" + }, + "usage": { + "$ref": "#/definitions/v1FreemiumUsage" + } + }, + "type": "object" + }, + "v1TenantOidcClaims": { + "properties": { + "Email": { + "type": "string", + "x-omitempty": false + }, + "FirstName": { + "type": "string", + "x-omitempty": false + }, + "LastName": { + "type": "string", + "x-omitempty": false + }, + "SpectroTeam": { + "type": "string", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1TenantOidcClientSpec": { + "description": "Tenant", + "properties": { + "callbackUrl": { + "type": "string", + "x-omitempty": false + }, + "clientId": { + "type": "string", + "x-omitempty": false + }, + "clientSecret": { + "type": "string", + "x-omitempty": false + }, + "defaultTeams": { + "items": { + "type": "string" + }, + "type": "array", + "x-omitempty": false + }, + "isSsoEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuerUrl": { + "description": "the issuer is the URL identifier for the service", + "type": "string", + "x-omitempty": false + }, + "logoutUrl": { + "type": "string", + "x-omitempty": false + }, + "requiredClaims": { + "$ref": "#/definitions/v1TenantOidcClaims" + }, + "scopes": { + "items": { + "type": "string" + }, + "type": "array", + "x-omitempty": false + }, + "scopesDelimiter": { + "type": "string", + "x-omitempty": false + }, + "syncSsoTeams": { + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1TenantPasswordPolicyEntity": { + "description": "Tenant Password Policy Entity", + "properties": { + "creationTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "expiryDurationInDays": { + "type": "integer" + }, + "firstReminderInDays": { + "type": "integer" + }, + "isRegex": { + "type": "boolean" + }, + "minLength": { + "type": "integer" + }, + "minNumOfBlockLetters": { + "type": "integer" + }, + "minNumOfDigits": { + "type": "integer" + }, + "minNumOfSmallLetters": { + "type": "integer" + }, + "minNumOfSpecialCharacters": { + "type": "integer" + }, + "regex": { + "type": "string" + }, + "updateTimestamp": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1TenantResourceLimit": { + "properties": { + "kind": { + "$ref": "#/definitions/v1ResourceLimitType", + "type": "string" + }, + "label": { + "type": "string" + }, + "limit": { + "format": "int64", + "type": "number", + "x-omitempty": false + } + } + }, + "v1TenantResourceLimitEntity": { + "properties": { + "kind": { + "$ref": "#/definitions/v1ResourceLimitType", + "type": "string", + "x-omitempty": false + }, + "limit": { + "format": "int64", + "type": "number", + "x-omitempty": false + } + } + }, + "v1TenantResourceLimits": { + "description": "Tenant resource limits", + "properties": { + "resources": { + "items": { + "$ref": "#/definitions/v1TenantResourceLimit" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1TenantResourceLimitsEntity": { + "description": "Tenant resource limits. Supported resources keys are 'user','project','apiKey','team','role','cloudaccount','clusterprofile','workspace','registry','privategateway','location','certificate','macro','sshkey','alert','spectrocluster','edgehost'.", + "properties": { + "resources": { + "items": { + "$ref": "#/definitions/v1TenantResourceLimitEntity" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1TenantSamlRequestSpec": { + "description": "Tenant", + "properties": { + "attributes": { + "items": { + "$ref": "#/definitions/v1TenantSamlSpecAttribute" + }, + "type": "array" + }, + "defaultTeams": { + "items": { + "type": "string" + }, + "type": "array" + }, + "federationMetadata": { + "type": "string" + }, + "identityProvider": { + "type": "string" + }, + "isSingleLogoutEnabled": { + "type": "boolean" + }, + "isSsoEnabled": { + "type": "boolean" + }, + "nameIdFormat": { + "type": "string" + }, + "syncSsoTeams": { + "type": "boolean" + } + }, + "type": "object" + }, + "v1TenantSamlSpec": { + "description": "Tenant", + "properties": { + "acsUrl": { + "type": "string" + }, + "attributes": { + "items": { + "$ref": "#/definitions/v1TenantSamlSpecAttribute" + }, + "type": "array" + }, + "audienceUrl": { + "description": "same as entity id", + "type": "string" + }, + "certificate": { + "description": "certificate for slo", + "type": "string" + }, + "defaultTeams": { + "items": { + "type": "string" + }, + "type": "array" + }, + "entityId": { + "type": "string" + }, + "federationMetadata": { + "type": "string" + }, + "identityProvider": { + "type": "string" + }, + "isSingleLogoutEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "isSsoEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "issuer": { + "description": "same as entity id", + "type": "string" + }, + "nameIdFormat": { + "type": "string" + }, + "serviceProviderMetadata": { + "type": "string" + }, + "singleLogoutUrl": { + "description": "slo url", + "type": "string", + "x-omitempty": false + }, + "syncSsoTeams": { + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1TenantSamlSpecAttribute": { + "properties": { + "attributeValue": { + "type": "string" + }, + "mappedAttribute": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nameFormat": { + "type": "string" + } + }, + "type": "object" + }, + "v1TenantSelfSignUpSpec": { + "description": "Tenant sign up data", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "loginMode": { + "default": "devops", + "enum": [ + "dev", + "devops" + ], + "type": "string" + }, + "notifyTenantAdmin": { + "type": "boolean" + }, + "orgName": { + "type": "string" + } + }, + "required": [ + "firstName", + "lastName", + "emailId", + "orgName" + ], + "type": "object" + }, + "v1TenantSpec": { + "description": "Tenant Spec", + "properties": { + "address": { + "$ref": "#/definitions/v1Address" + }, + "authType": { + "type": "string" + }, + "defaultLoginMode": { + "type": "string" + }, + "orgEmailId": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "planUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1TenantSpecEntity": { + "description": "Tenant Entity input", + "properties": { + "address": { + "$ref": "#/definitions/v1Address" + }, + "authType": { + "type": "string" + }, + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "loginMode": { + "default": "devops", + "enum": [ + "dev", + "devops" + ], + "type": "string" + }, + "orgEmailId": { + "type": "string" + }, + "orgName": { + "type": "string" + }, + "roles": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "ssoApp": { + "type": "string" + } + }, + "type": "object" + }, + "v1TenantSsoAuthProvidersEntity": { + "properties": { + "isEnabled": { + "type": "boolean", + "x-omitempty": false + }, + "ssoLogins": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1TenantStatus": { + "description": "Tenant Status", + "properties": { + "cleanUpStatus": { + "$ref": "#/definitions/v1TenantCleanUpStatus" + }, + "isActive": { + "type": "boolean", + "x-omitempty": false + }, + "toBeDeleted": { + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1TenantUpgradeSettingsEntity": { + "properties": { + "enableLock": { + "type": "boolean", + "x-omitempty": false + }, + "supportedVersionsRange": { + "type": "integer", + "x-omitempty": false + } + } + }, + "v1TenantUsage": { + "description": "Tenant usage object", + "properties": { + "orgName": { + "description": "Organization name", + "type": "string" + }, + "tenantUid": { + "description": "Tenant uid", + "type": "string" + }, + "usedAlloyCredits": { + "description": "Credits used by imported clusters", + "format": "float64", + "type": "number" + }, + "usedPureCredits": { + "description": "Credits used by managed clusters", + "format": "float64", + "type": "number" + } + } + }, + "v1Tenants": { + "description": "Tenants list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1Tenant" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1TenantsAccountsNas": { + "properties": { + "failures": { + "items": { + "type": "string" + }, + "type": "array" + }, + "success": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1TenantsActivities": { + "description": "Active tenants and clusters data", + "properties": { + "tenants": { + "additionalProperties": { + "$ref": "#/definitions/v1TenantActivity" + }, + "type": "object" + } + }, + "type": "object" + }, + "v1TencentAccount": { + "description": "Tencent cloud account information", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1TencentCloudAccount" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1TencentAccounts": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1TencentAccount" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1TencentAvailabilityZone": { + "description": "Tencent availability zone", + "properties": { + "name": { + "description": "Tencent availability zone name", + "type": "string" + }, + "state": { + "description": "Tencent availability zone state", + "type": "string" + }, + "zoneId": { + "description": "Tencent availability zone id", + "type": "string" + } + }, + "type": "object" + }, + "v1TencentAvailabilityZones": { + "description": "List of Tencent Availability zones", + "properties": { + "zones": { + "items": { + "$ref": "#/definitions/v1TencentAvailabilityZone" + }, + "type": "array" + } + }, + "required": [ + "zones" + ], + "type": "object" + }, + "v1TencentCloudAccount": { + "properties": { + "secretId": { + "description": "Tencent api secretID", + "type": "string" + }, + "secretKey": { + "description": "Tencent api secret key", + "type": "string" + } + }, + "required": [ + "secretId", + "secretKey" + ], + "type": "object" + }, + "v1TencentCloudClusterConfigEntity": { + "description": "Tencent cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1TencentClusterConfig" + } + }, + "type": "object" + }, + "v1TencentCloudConfig": { + "description": "TencentCloudConfig is the Schema for the tencentcloudconfigs API", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1TencentCloudConfigSpec" + } + }, + "type": "object" + }, + "v1TencentCloudConfigSpec": { + "description": "TencentCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec/machinespec for cluster-api", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cloudAccountRef should point to the secret which contains TencentCloudAccount" + }, + "clusterConfig": { + "$ref": "#/definitions/v1TencentClusterConfig" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1TencentMachinePoolConfig" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1TencentClusterConfig": { + "description": "Cluster level configuration for tencent cloud and applicable for all the machine pools", + "properties": { + "endpointAccess": { + "$ref": "#/definitions/v1TkeEndpointAccess", + "description": "Endpoints specifies access to this cluster's control plane endpoints" + }, + "region": { + "type": "string" + }, + "sshKeyIDs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "vpcID": { + "description": "VPC Id to deploy cluster into should have one public and one private subnet for the the cluster creation, this field is optional, If VPC Id is not provided a fully managed VPC will be created", + "type": "string" + } + }, + "required": [ + "region" + ], + "type": "object" + }, + "v1TencentInstanceTypes": { + "description": "List of Tencent instance types", + "properties": { + "instanceTypes": { + "items": { + "$ref": "#/definitions/v1InstanceType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1TencentKeypair": { + "description": "Tencent Keypair entity", + "properties": { + "id": { + "description": "Tencent keypair id", + "type": "string" + }, + "name": { + "description": "Tencent keypair name", + "type": "string" + }, + "publickey": { + "description": "Tencent public key", + "type": "string" + } + }, + "type": "object" + }, + "v1TencentKeypairs": { + "description": "List of Tencent keypairs", + "properties": { + "keypairs": { + "items": { + "$ref": "#/definitions/v1TencentKeypair" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1TencentMachine": { + "description": "Tencent cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1TencentMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + }, + "type": "object" + }, + "v1TencentMachinePoolCloudConfigEntity": { + "properties": { + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "format": "int64", + "maximum": 2000, + "minimum": 1, + "type": "integer" + }, + "subnetIds": { + "additionalProperties": { + "type": "string" + }, + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object" + } + }, + "type": "object" + }, + "v1TencentMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "azs": { + "description": "AZs is only used for dynamic placement", + "items": { + "type": "string" + }, + "type": "array" + }, + "instanceConfig": { + "$ref": "#/definitions/v1InstanceConfig" + }, + "instanceType": { + "description": "instance type", + "type": "string" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "rootDeviceSize": { + "description": "rootDeviceSize in GBs", + "format": "int64", + "type": "integer" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "subnetIds": { + "additionalProperties": { + "type": "string" + }, + "description": "AZ to subnet mapping filled by ally from hubble SubnetIDs [\"ap-guangzhou-6\"] = \"subnet-079b6061\" This field is optional If we don't provide a subnetId then by default the first subnet from the AZ will be picked up for deployment", + "type": "object" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array" + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + }, + "type": "object" + }, + "v1TencentMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1TencentMachinePoolCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + }, + "v1TencentMachineSpec": { + "description": "Tencent cloud VM definition spec", + "properties": { + "dnsName": { + "type": "string" + }, + "imageId": { + "type": "string" + }, + "instanceType": { + "type": "string" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1TencentNic" + }, + "type": "array" + }, + "securityGroups": { + "items": { + "type": "string" + }, + "type": "array" + }, + "subnetId": { + "type": "string" + }, + "type": { + "type": "string" + }, + "vpcId": { + "type": "string" + }, + "zoneId": { + "type": "string" + } + }, + "required": [ + "nics", + "instanceType", + "imageId" + ], + "type": "object" + }, + "v1TencentMachines": { + "description": "Tencent machine list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1TencentMachine" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1TencentNic": { + "description": "Tencent network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "publicIp": { + "type": "string" + } + }, + "type": "object" + }, + "v1TencentRegion": { + "description": "Tencent region entity", + "properties": { + "name": { + "description": "Name of tencent region", + "type": "string" + }, + "state": { + "description": "State of tencent region", + "type": "string" + } + }, + "type": "object" + }, + "v1TencentRegions": { + "description": "List of tencent regions", + "properties": { + "regions": { + "description": "Tencent regions entity", + "items": { + "$ref": "#/definitions/v1TencentRegion" + }, + "type": "array" + } + }, + "required": [ + "regions" + ], + "type": "object" + }, + "v1TencentSecurityGroup": { + "description": "Tencent Security Group. A security group is a virtual firewall that features stateful data packet filtering", + "properties": { + "id": { + "description": "Tencent security group id", + "type": "string" + }, + "isDefault": { + "description": "Whether it is the default security group, the default security group does not support deletion.", + "type": "boolean" + }, + "name": { + "description": "Tencent security group name", + "type": "string" + }, + "projectId": { + "description": "Tencent security group associated to a project", + "type": "string" + } + }, + "type": "object" + }, + "v1TencentSecurityGroups": { + "description": "List of Tencent security groups", + "properties": { + "groups": { + "items": { + "$ref": "#/definitions/v1TencentSecurityGroup" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1TencentStorageTypes": { + "description": "List of Tencent storage types", + "properties": { + "storageTypes": { + "items": { + "$ref": "#/definitions/v1StorageType" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1TencentSubnet": { + "description": "Tencent Subnet entity", + "properties": { + "az": { + "description": "Availability zone associated with tencent subnet", + "type": "string" + }, + "cidrBlock": { + "description": "Tencent subnet CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", + "type": "string" + }, + "name": { + "description": "Tencent subnet name", + "type": "string" + }, + "subnetId": { + "description": "Tencent subnet id", + "type": "string" + } + }, + "type": "object" + }, + "v1TencentVpc": { + "description": "Tencent VPC entity", + "properties": { + "cidrBlock": { + "description": "Tencent VPC CIDR. The CIDR notation consists of an IP address, a slash character ('/') and a decimal number from 0 to 32", + "type": "string" + }, + "name": { + "description": "Tencent VPC name", + "type": "string" + }, + "subnets": { + "items": { + "$ref": "#/definitions/v1TencentSubnet" + }, + "type": "array" + }, + "vpcId": { + "description": "Tencent VPC id", + "type": "string" + } + }, + "required": [ + "vpcId" + ], + "type": "object" + }, + "v1TencentVpcs": { + "description": "List of Tencent VPCs", + "properties": { + "vpcs": { + "items": { + "$ref": "#/definitions/v1TencentVpc" + }, + "type": "array" + } + }, + "required": [ + "vpcs" + ], + "type": "object" + }, + "v1TierPrice": { + "description": "tier price", + "properties": { + "alloyPricing": { + "items": { + "$ref": "#/definitions/v1PriceRange" + }, + "type": "array", + "uniqueItems": true + }, + "purePricing": { + "items": { + "$ref": "#/definitions/v1PriceRange" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1Time": { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "format": "date-time", + "type": "string" + }, + "v1TkeEndpointAccess": { + "description": "TKEEndpointAccess specifies how control plane endpoints are accessible", + "properties": { + "IsExtranet": { + "description": "IsExtranet Whether it is external network access (TRUE external network access FALSE internal network access, default value: FALSE)", + "type": "boolean" + }, + "private": { + "description": "Private points VPC-internal control plane access to the private endpoint", + "type": "boolean" + }, + "privateCIDR": { + "description": "Deprecated. PrivateCIDRs specifies which blocks can access the public endpoint", + "type": "string" + }, + "public": { + "description": "Public controls whether control plane endpoints are publicly accessible", + "type": "boolean" + }, + "publicCIDRs": { + "description": "Deprecated. PublicCIDRs specifies which blocks can access the public endpoint", + "items": { + "type": "string" + }, + "type": "array" + }, + "securityGroup": { + "description": "Tencent security group", + "type": "string" + }, + "subnetId": { + "description": "Tencent Subnet", + "type": "string" + } + }, + "type": "object" + }, + "v1TlsConfiguration": { + "description": "TLS configuration", + "properties": { + "ca": { + "type": "string" + }, + "certificate": { + "type": "string" + }, + "enabled": { + "type": "boolean", + "x-omitempty": false + }, + "insecureSkipVerify": { + "type": "boolean", + "x-omitempty": false + }, + "key": { + "type": "string" + } + }, + "type": "object" + }, + "v1TotalClusterRate": { + "description": "Cluster total estimated rate information", + "properties": { + "compute": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "storage": { + "format": "float64", + "type": "number", + "x-omitempty": false + }, + "total": { + "format": "float64", + "type": "number", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1TotalResourceUsage": { + "description": "Total Resource Usage", + "properties": { + "projects": { + "items": { + "$ref": "#/definitions/v1ProjectResourceUsage" + }, + "type": "array", + "uniqueItems": true + }, + "totalAlloyCpuCoreHours": { + "type": "number", + "x-omitempty": false + }, + "totalPureCpuCoreHours": { + "type": "number", + "x-omitempty": false + } + } + }, + "v1TransferJob": { + "description": "transfer job details", + "properties": { + "finishTime": { + "$ref": "#/definitions/v1Time" + }, + "folder": { + "type": "string" + }, + "isCompleted": { + "type": "boolean" + }, + "message": { + "items": { + "type": "string" + }, + "type": "array" + }, + "startTime": { + "$ref": "#/definitions/v1Time" + }, + "state": { + "type": "string" + }, + "status": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1Uid": { + "properties": { + "uid": { + "type": "string" + } + }, + "required": [ + "uid" + ], + "type": "object" + }, + "v1UidRoleSummary": { + "properties": { + "inheritedRoles": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "roles": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1UidSummary": { + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1Uids": { + "items": { + "$ref": "#/definitions/v1Uid" + }, + "type": "array", + "uniqueItems": true + }, + "v1UpdateStrategy": { + "description": "UpdatesStrategy will be used to translate to RollingUpdateStrategy of a MachineDeployment We'll start with default values for the translation, can expose more details later Following is details of parameters translated from the type ScaleOut =\u003e maxSurge=1, maxUnavailable=0 ScaleIn =\u003e maxSurge=0, maxUnavailable=1", + "properties": { + "type": { + "description": "update strategy, either ScaleOut or ScaleIn if empty, will default to RollingUpdateScaleOut", + "enum": [ + "RollingUpdateScaleOut", + "RollingUpdateScaleIn" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1UpdateTenantStatus": { + "description": "Update tenant status", + "properties": { + "errorMessage": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "stage": { + "type": "string" + } + }, + "type": "object" + }, + "v1Updated": { + "description": "The resource was updated successfully" + }, + "v1UpdatedMsg": { + "description": "Update response with message", + "properties": { + "msg": { + "type": "string" + } + } + }, + "v1Upgrades": { + "description": "Upgrades represent the reason of the last upgrade that took place", + "properties": { + "reason": { + "items": { + "type": "string" + }, + "type": "array" + }, + "timestamp": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1User": { + "description": "User", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1UserSpec" + }, + "status": { + "$ref": "#/definitions/v1UserStatus" + } + }, + "type": "object" + }, + "v1UserActivateInfo": { + "properties": { + "passwordToken": { + "type": "string" + } + }, + "type": "object" + }, + "v1UserActivateLink": { + "properties": { + "activationLink": { + "type": "string" + } + }, + "type": "object" + }, + "v1UserActivityInfo": { + "description": "Active user data", + "properties": { + "lastLogin": { + "type": "string" + }, + "lastLoginTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1UserAssetSsh": { + "description": "SSH key information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1UserAssetSshSpec" + } + }, + "type": "object" + }, + "v1UserAssetSshEntity": { + "description": "SSH Key request payload", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1UserAssetSshSpec" + } + }, + "type": "object" + }, + "v1UserAssetSshSpec": { + "description": "SSH key specification", + "properties": { + "publicKey": { + "type": "string" + } + }, + "type": "object" + }, + "v1UserAssetsLocation": { + "description": "Location object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1UserAssetsLocationSpec" + } + }, + "type": "object" + }, + "v1UserAssetsLocationAzure": { + "description": "Azure location object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1UserAssetsLocationAzureSpec" + } + }, + "type": "object" + }, + "v1UserAssetsLocationAzureSpec": { + "description": "Azure location specification", + "properties": { + "config": { + "$ref": "#/definitions/v1AzureStorageConfig" + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "Azure location type [azure]", + "type": "string" + } + }, + "required": [ + "config" + ], + "type": "object" + }, + "v1UserAssetsLocationGcp": { + "description": "GCP location object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1UserAssetsLocationGcpSpec" + } + }, + "type": "object" + }, + "v1UserAssetsLocationGcpSpec": { + "description": "GCP location specification", + "properties": { + "config": { + "$ref": "#/definitions/v1GcpStorageConfig" + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "GCP location type [gcp]", + "type": "string" + } + }, + "required": [ + "config" + ], + "type": "object" + }, + "v1UserAssetsLocationS3": { + "description": "S3 location object", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + }, + "spec": { + "$ref": "#/definitions/v1UserAssetsLocationS3Spec" + } + }, + "type": "object" + }, + "v1UserAssetsLocationS3Spec": { + "description": "S3 location specification", + "properties": { + "config": { + "$ref": "#/definitions/v1S3StorageConfig" + }, + "isDefault": { + "description": "Set to 'true', if location has to be set as default", + "type": "boolean" + }, + "type": { + "description": "S3 location type [s3/minio]", + "type": "string" + } + }, + "required": [ + "config" + ], + "type": "object" + }, + "v1UserAssetsLocationSpec": { + "description": "Location specification", + "properties": { + "isDefault": { + "type": "boolean" + }, + "storage": { + "$ref": "#/definitions/v1LocationType" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "v1UserAssetsLocations": { + "properties": { + "items": { + "description": "List of locations", + "items": { + "$ref": "#/definitions/v1UserAssetsLocation" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1UserAssetsSsh": { + "properties": { + "items": { + "description": "List of SSH keys", + "items": { + "$ref": "#/definitions/v1UserAssetSsh" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1UserAuthenticatedUrl": { + "description": "Returns the Authenticated redirect Url for the palette oidc", + "properties": { + "redirectUrl": { + "description": "authenticated redirect Url for the palette oidc", + "type": "string" + } + }, + "type": "object" + }, + "v1UserEntity": { + "description": "User", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1UserSpecEntity" + } + }, + "type": "object" + }, + "v1UserInfoResponse": { + "properties": { + "address": { + "description": "End-User's preferred postal address", + "type": "string" + }, + "birthdate": { + "description": "End-User's birthday, represented as an ISO 8601:2004 [ISO8601‑2004] YYYY-MM-DD format", + "type": "string" + }, + "email": { + "description": "End-User's preferred e-mail address", + "type": "string" + }, + "email_verified": { + "description": "User at the time the verification was performed", + "type": "boolean" + }, + "family_name": { + "description": "Surname(s) or last name(s) of the End-User", + "type": "string" + }, + "gender": { + "description": "End-User's gender", + "type": "string" + }, + "given_name": { + "description": "Given name(s) or first name(s) of the End-User", + "type": "string" + }, + "locale": { + "description": "End-User's locale, represented as a BCP47 [RFC5646] language tag", + "type": "string" + }, + "middle_name": { + "description": "Middle name(s) of the End-User", + "type": "string" + }, + "name": { + "description": "End-User's full name in displayable form including all name parts, possibly including titles and suffixes, ordered according to the End-User's locale and preferences", + "type": "string" + }, + "nickname": { + "description": "Casual name of the End-User that may or may not be the same as the given_name", + "type": "string" + }, + "phone_number": { + "description": "End-User's preferred telephone number", + "type": "string" + }, + "phone_number_verified": { + "description": "User at the time the verification was performed", + "type": "boolean" + }, + "picture": { + "description": "URL of the End-User's profile picture", + "type": "string" + }, + "preferred_username": { + "description": "Shorthand name by which the End-User wishes to be referred to at the RP, such as janedoe or j.doe", + "type": "string" + }, + "profile": { + "description": "URL of the End-User's profile page", + "type": "string" + }, + "sub": { + "description": "Subject - Identifier for the End-User at the Issuer", + "type": "string" + }, + "updated_at": { + "description": "Time the End-User's information was last updated", + "type": "integer" + }, + "website": { + "description": "URL of the End-User's Web page or blog", + "type": "string" + }, + "zoneinfo": { + "description": "String from zoneinfo [zoneinfo] time zone database representing the End-User's time zone", + "type": "string" + } + }, + "type": "object" + }, + "v1UserKubectlSession": { + "properties": { + "clusterUid": { + "type": "string" + }, + "creationTime": { + "type": "string" + }, + "isActive": { + "type": "boolean" + }, + "podIp": { + "type": "string" + }, + "podName": { + "type": "string" + }, + "port": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "sessionUid": { + "type": "string" + }, + "shellyCluster": { + "type": "string" + }, + "tenantClusterEndpoint": { + "type": "string" + }, + "userName": { + "type": "string" + }, + "userUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1UserMe": { + "description": "User information wrt permissions", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1UserSpec" + }, + "status": { + "$ref": "#/definitions/v1UserMeStatus" + } + }, + "type": "object" + }, + "v1UserMeStatus": { + "description": "User status with permissions", + "properties": { + "activationLink": { + "description": "Contains activation link for the user", + "type": "string" + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean" + }, + "isContractAccepted": { + "description": "Specifies if user account has accepted the contract", + "type": "boolean", + "x-omitempty": false + }, + "loginMode": { + "description": "User's login Mode", + "type": "string" + }, + "projectPermissions": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + }, + "tenant": { + "$ref": "#/definitions/v1UserMeTenant", + "description": "users's tenant information" + }, + "tenantPermissions": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + } + } + }, + "v1UserMeTenant": { + "properties": { + "orgName": { + "type": "string" + }, + "tenantUid": { + "type": "string" + } + }, + "type": "object" + }, + "v1UserMeta": { + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "org": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1UserMetaEntity": { + "description": "User meta entity", + "properties": { + "emailId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1UserPatch": { + "items": { + "$ref": "#/definitions/v1HttpPatch" + }, + "type": "array" + }, + "v1UserProfile": { + "description": "User Profile", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1UserProfileSpec" + }, + "status": { + "$ref": "#/definitions/v1UserProfileStatus" + } + }, + "type": "object" + }, + "v1UserProfileSpec": { + "description": "User Profile specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + } + } + }, + "v1UserProfileStatus": { + "description": "User Profile status", + "properties": { + "lastPasswordPolicyMail": { + "$ref": "#/definitions/v1Time", + "description": "user's last password policy time" + }, + "lastPasswordUpdate": { + "$ref": "#/definitions/v1Time", + "description": "user's last password update time" + } + } + }, + "v1UserProfiles": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1UserProfile" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1UserRoleMap": { + "properties": { + "roles": { + "items": { + "type": "string" + }, + "type": "array" + }, + "userId": { + "type": "string" + } + } + }, + "v1UserRoleUIDs": { + "properties": { + "roles": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1UserRolesEntity": { + "properties": { + "inheritedRoles": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "roles": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1UserRsaToken": { + "description": "Rsa Auth token response", + "properties": { + "token": { + "type": "string" + } + }, + "type": "object" + }, + "v1UserSpec": { + "description": "User specifications", + "properties": { + "emailId": { + "description": "User's email id", + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1UserSpecEntity": { + "description": "User Entity input", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "loginMode": { + "type": "string" + }, + "roles": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "teams": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1UserSpecSummary": { + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "projects": { + "description": "Deprecated.", + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "projectsCount": { + "format": "int32", + "type": "integer", + "x-omitempty": false + }, + "roles": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + }, + "teams": { + "items": { + "$ref": "#/definitions/v1UidSummary" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1UserStatus": { + "description": "User status", + "properties": { + "activationLink": { + "description": "provides the link to activate or reset the user password", + "type": "string", + "x-omitempty": false + }, + "isActive": { + "description": "Specifies if user account is active/disabled", + "type": "boolean", + "x-omitempty": false + }, + "isPasswordResetting": { + "description": "Specifies if user in multi org requested password reset", + "type": "boolean", + "x-omitempty": false + }, + "lastSignIn": { + "$ref": "#/definitions/v1Time", + "description": "user's last sign in time" + } + } + }, + "v1UserStatusLoginMode": { + "properties": { + "loginMode": { + "enum": [ + "dev", + "devops" + ], + "type": "string" + } + }, + "type": "object" + }, + "v1UserSummary": { + "description": "User summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1UserSpecSummary" + }, + "status": { + "$ref": "#/definitions/v1UserStatus" + } + }, + "type": "object" + }, + "v1UserSummarySortFields": { + "enum": [ + "name", + "creationTimestamp" + ], + "type": "string", + "x-nullable": true + }, + "v1UserSummarySortSpec": { + "properties": { + "field": { + "$ref": "#/definitions/v1UserSummarySortFields" + }, + "order": { + "$ref": "#/definitions/v1SortOrder" + } + } + }, + "v1UserToken": { + "description": "Returns the Authorization token. To be used for further api calls", + "properties": { + "Authorization": { + "description": "Describes the authentication token in jwt format.", + "type": "string" + }, + "isMfa": { + "description": "Indicates the authentication flow using MFA", + "type": "boolean", + "x-omitempty": false + } + }, + "type": "object" + }, + "v1UserUpdateEntity": { + "description": "User", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1UserUpdateSpecEntity" + } + }, + "type": "object" + }, + "v1UserUpdateSpecEntity": { + "description": "User Entity input", + "properties": { + "emailId": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "roles": { + "description": "Deprecated. Use 'v1/users/{uid}/roles' API to assign roles.", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1Users": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1User" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1UsersFilterSpec": { + "description": "Users filter spec", + "properties": { + "emailId": { + "$ref": "#/definitions/v1FilterString" + }, + "name": { + "$ref": "#/definitions/v1FilterString" + } + } + }, + "v1UsersMetadata": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1UserMetaEntity" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1UsersSummary": { + "description": "Deprecated, Use v1UsersSummaryList - Returns User summary", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1UserSummary" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1UsersSummaryList": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1UserSummary" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1UsersSummarySpec": { + "description": "Users filter summary spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1UsersFilterSpec" + }, + "sort": { + "items": { + "$ref": "#/definitions/v1UserSummarySortSpec" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1V1SystemAdminEmail": { + "description": "SystemAdmin", + "properties": { + "email": { + "type": "string" + }, + "insecureVerify": { + "type": "boolean" + }, + "password": { + "type": "string" + } + }, + "type": "object" + }, + "v1V1SystemAdminPasswordResetEntity": { + "description": "SystemAdmin", + "properties": { + "email": { + "type": "string" + }, + "newPassword": { + "type": "string" + }, + "oldPassword": { + "type": "string" + } + }, + "type": "object" + }, + "v1VMAddVolumeEntity": { + "properties": { + "addVolumeOptions": { + "$ref": "#/definitions/v1VmAddVolumeOptions", + "description": "Parameters required to add volume to virtual machine/virtual machine instance" + }, + "dataVolumeTemplate": { + "$ref": "#/definitions/v1VmDataVolumeTemplateSpec", + "description": "dataVolumeTemplates is a list of dataVolumes that the VirtualMachineInstance template can reference. DataVolumes in this list are dynamically created for the VirtualMachine and are tied to the VirtualMachine's life-cycle." + }, + "persist": { + "description": "If 'true' add the disk to the Virtual Machine \u0026 Virtual Machine Instance, else add the disk to the Virtual Machine Instance only", + "type": "boolean" + } + }, + "required": [ + "addVolumeOptions" + ], + "type": "object" + }, + "v1VMCluster": { + "description": "VM Dashboard enabled Spectro cluster", + "properties": { + "metadata": { + "properties": { + "name": { + "type": "string" + }, + "projectUid": { + "type": "string" + }, + "uid": { + "type": "string" + } + } + }, + "spec": { + "description": "Spectro cluster spec", + "properties": { + "cloudType": { + "type": "string" + } + }, + "type": "object" + }, + "status": { + "description": "Spectro cluster status", + "properties": { + "clusterState": { + "type": "string" + } + } + } + }, + "type": "object" + }, + "v1VMClusters": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1VMCluster" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1VMRemoveVolumeEntity": { + "properties": { + "persist": { + "description": "If 'true' remove the disk from the Virtual Machine \u0026 Virtual Machine Instance, else remove the disk from the Virtual Machine Instance only", + "type": "boolean" + }, + "removeVolumeOptions": { + "$ref": "#/definitions/v1VmRemoveVolumeOptions", + "description": "Parameters required to remove volume from virtual machine/virtual machine instance" + } + }, + "required": [ + "removeVolumeOptions" + ], + "type": "object" + }, + "v1Variable": { + "description": "Unique variable field with schema definition", + "properties": { + "defaultValue": { + "description": "The default value of the variable", + "type": "string" + }, + "description": { + "description": "Variable description", + "type": "string" + }, + "displayName": { + "description": "Unique display name of the variable", + "type": "string" + }, + "format": { + "$ref": "#/definitions/v1VariableFormat" + }, + "hidden": { + "description": "If true, then variable will be hidden for overriding the value. By default the hidden flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "immutable": { + "description": "If true, then variable value can't be editable. By default the immutable flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "isSensitive": { + "description": "If true, then default value will be masked. By default the isSensitive flag will be set to false", + "type": "boolean", + "x-omitempty": false + }, + "name": { + "description": "Variable name", + "type": "string" + }, + "regex": { + "description": "Regular expression pattern which the variable value must match", + "type": "string" + }, + "required": { + "description": "Flag to specify if the variable is optional or mandatory. If it is mandatory then default value must be provided", + "type": "boolean", + "x-omitempty": false + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1VariableFormat": { + "default": "string", + "description": "Format type of the variable value", + "enum": [ + "string", + "number", + "boolean", + "ipv4", + "ipv4cidr", + "ipv6", + "version" + ], + "type": "string" + }, + "v1VariableNames": { + "properties": { + "variables": { + "description": "Array of variable names", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "variables" + ] + }, + "v1Variables": { + "properties": { + "variables": { + "description": "List of unique variable fields with schema constraints", + "items": { + "$ref": "#/definitions/v1Variable" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1Virtual": { + "properties": { + "appDeployments": { + "description": "list of apps deployed on the virtual cluster", + "items": { + "$ref": "#/definitions/v1ObjectResReference" + }, + "type": "array" + }, + "clusterGroup": { + "$ref": "#/definitions/v1ObjectResReference", + "description": "cluster group details of virtual cluster" + }, + "hostCluster": { + "$ref": "#/definitions/v1ObjectResReference", + "description": "host cluster reference" + }, + "lifecycleStatus": { + "$ref": "#/definitions/v1LifecycleStatus", + "description": "cluster life cycle status of virtual cluster" + }, + "state": { + "description": "cluster virtual host status", + "type": "string" + }, + "virtualClusters": { + "description": "list of virtual clusters deployed on the cluster", + "items": { + "$ref": "#/definitions/v1ObjectResReference" + }, + "type": "array" + } + } + }, + "v1VirtualCloudClusterConfigEntity": { + "description": "Virtual cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1VirtualClusterConfig" + } + }, + "type": "object" + }, + "v1VirtualCloudConfig": { + "description": "VirtualCloudConfig is the Schema for the virtual cloudconfigs API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1VirtualCloudConfigSpec" + }, + "status": { + "$ref": "#/definitions/v1NestedCloudConfigStatus" + } + }, + "type": "object" + }, + "v1VirtualCloudConfigSpec": { + "description": "VirtualCloudConfigSpec defines the cloud configuration input by user This will translate to clusterspec for cluster-api.", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1VirtualClusterConfig" + }, + "hostClusterUid": { + "type": "string" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1VirtualMachinePoolConfig" + }, + "type": "array" + } + }, + "required": [ + "clusterConfig", + "hostClusterUid", + "machinePoolConfig" + ], + "type": "object" + }, + "v1VirtualClusterConfig": { + "description": "Cluster level configuration for virtual cluster", + "properties": { + "controlPlaneEndpoint": { + "$ref": "#/definitions/v1APIEndpoint" + }, + "helmRelease": { + "$ref": "#/definitions/v1VirtualClusterHelmRelease" + }, + "kubernetesVersion": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "v1VirtualClusterHelmChart": { + "properties": { + "name": { + "default": "", + "type": "string" + }, + "repo": { + "default": "", + "type": "string" + }, + "version": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "v1VirtualClusterHelmRelease": { + "properties": { + "chart": { + "$ref": "#/definitions/v1VirtualClusterHelmChart" + }, + "values": { + "default": "", + "type": "string" + } + }, + "type": "object" + }, + "v1VirtualClusterResize": { + "properties": { + "instanceType": { + "$ref": "#/definitions/v1VirtualInstanceType" + } + }, + "required": [ + "instanceType" + ], + "type": "object" + }, + "v1VirtualInstanceType": { + "properties": { + "maxCPU": { + "description": "Maximum CPU cores", + "format": "int32", + "type": "integer" + }, + "maxMemInMiB": { + "description": "Maximum memory in MiB", + "format": "int32", + "type": "integer" + }, + "maxStorageGiB": { + "description": "Maximum storage in GiB", + "format": "int32", + "type": "integer" + }, + "minCPU": { + "description": "Minimum CPU cores", + "format": "int32", + "type": "integer" + }, + "minMemInMiB": { + "description": "Minimum memory in MiB", + "format": "int32", + "type": "integer" + }, + "minStorageGiB": { + "description": "Minimum storage in GiB", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1VirtualMachine": { + "description": "Virtual cloud machine definition", + "properties": { + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1VirtualMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + }, + "type": "object" + }, + "v1VirtualMachinePoolCloudConfigEntity": { + "properties": { + "instanceType": { + "$ref": "#/definitions/v1VirtualInstanceType" + } + }, + "required": [ + "instanceType" + ], + "type": "object" + }, + "v1VirtualMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "azs": { + "items": { + "type": "string" + }, + "type": "array" + }, + "instanceType": { + "$ref": "#/definitions/v1VirtualInstanceType", + "description": "InstanceType defines the required CPU, Memory" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean" + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "resourcePool": { + "type": "string" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean" + } + }, + "required": [ + "instanceType" + ], + "type": "object" + }, + "v1VirtualMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1VirtualMachinePoolCloudConfigEntity" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + }, + "v1VirtualMachineSnapshot": { + "description": "VirtualMachineSnapshot defines the operation of snapshotting a VM", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1VmObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1VirtualMachineSnapshotSpec" + }, + "status": { + "$ref": "#/definitions/v1VirtualMachineSnapshotStatus" + } + }, + "required": [ + "spec" + ], + "type": "object" + }, + "v1VirtualMachineSnapshotList": { + "description": "VirtualMachineSnapshotList is a list of VirtualMachineSnapshot resources", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "items": { + "items": { + "$ref": "#/definitions/v1VirtualMachineSnapshot" + }, + "type": "array" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1VmListMeta" + } + }, + "required": [ + "metadata", + "items" + ], + "type": "object" + }, + "v1VirtualMachineSnapshotSpec": { + "description": "VirtualMachineSnapshotSpec is the spec for a VirtualMachineSnapshot resource", + "properties": { + "deletionPolicy": { + "type": "string" + }, + "failureDeadline": { + "$ref": "#/definitions/v1VmDuration" + }, + "source": { + "$ref": "#/definitions/v1VmTypedLocalObjectReference" + } + }, + "required": [ + "source" + ], + "type": "object" + }, + "v1VirtualMachineSnapshotStatus": { + "description": "VirtualMachineSnapshotStatus is the status for a VirtualMachineSnapshot resource", + "properties": { + "conditions": { + "items": { + "$ref": "#/definitions/v1VmCondition" + }, + "type": "array" + }, + "creationTime": { + "$ref": "#/definitions/v1Time" + }, + "error": { + "$ref": "#/definitions/v1VmError" + }, + "indications": { + "items": { + "type": "string" + }, + "type": "array", + "x-kubernetes-list-type": "set" + }, + "phase": { + "type": "string" + }, + "readyToUse": { + "type": "boolean" + }, + "snapshotVolumes": { + "$ref": "#/definitions/v1VmSnapshotVolumesLists" + }, + "sourceUID": { + "type": "string" + }, + "virtualMachineSnapshotContentName": { + "type": "string" + } + }, + "type": "object", + "x-nullable": true + }, + "v1VirtualMachineSpec": { + "description": "Virtual cloud machine definition spec", + "properties": { + "hostname": { + "type": "string" + } + }, + "type": "object" + }, + "v1VirtualMachines": { + "description": "List of virtual machines", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1VirtualMachine" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1VirtualNetwork": { + "description": "Azure virtual network is the fundamental building block for your private network in Azure.", + "properties": { + "addressSpaces": { + "description": "Location of the virtual network", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "id": { + "description": "The ID of the resource group", + "type": "string" + }, + "location": { + "description": "Location of the virtual network", + "type": "string" + }, + "name": { + "description": "Name of the virtual network", + "type": "string" + }, + "subnets": { + "description": "List of subnets associated with Azure VPC", + "items": { + "$ref": "#/definitions/v1Subnet" + }, + "type": "array" + }, + "type": { + "description": "Type of the virtual network", + "type": "string" + } + }, + "type": "object" + }, + "v1VmAccessCredential": { + "description": "AccessCredential represents a credential source that can be used to authorize remote access to the vm guest Only one of its members may be specified.", + "properties": { + "sshPublicKey": { + "$ref": "#/definitions/v1VmSshPublicKeyAccessCredential" + }, + "userPassword": { + "$ref": "#/definitions/v1VmUserPasswordAccessCredential" + } + }, + "type": "object" + }, + "v1VmAccessCredentialSecretSource": { + "properties": { + "secretName": { + "description": "SecretName represents the name of the secret in the VMI's namespace", + "type": "string" + } + }, + "required": [ + "secretName" + ], + "type": "object" + }, + "v1VmAddVolumeOptions": { + "description": "AddVolumeOptions is provided when dynamically hot plugging a volume and disk", + "properties": { + "disk": { + "$ref": "#/definitions/v1VmDisk" + }, + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "items": { + "type": "string" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that will be used to map the disk to the corresponding volume. This overrides any name set inside the Disk struct itself.", + "type": "string" + }, + "volumeSource": { + "$ref": "#/definitions/v1VmHotplugVolumeSource" + } + }, + "required": [ + "name", + "disk", + "volumeSource" + ], + "type": "object" + }, + "v1VmAffinity": { + "description": "Affinity is a group of affinity scheduling rules.", + "properties": { + "nodeAffinity": { + "$ref": "#/definitions/v1VmNodeAffinity" + }, + "podAffinity": { + "$ref": "#/definitions/v1VmPodAffinity" + }, + "podAntiAffinity": { + "$ref": "#/definitions/v1PodAntiAffinity" + } + }, + "type": "object" + }, + "v1VmBIOS": { + "description": "If set (default), BIOS will be used.", + "properties": { + "useSerial": { + "description": "If set, the BIOS output will be transmitted over serial", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VmBlockSize": { + "description": "BlockSize provides the option to change the block size presented to the VM for a disk. Only one of its members may be specified.", + "properties": { + "custom": { + "$ref": "#/definitions/v1VmCustomBlockSize" + }, + "matchVolume": { + "$ref": "#/definitions/v1VmFeatureState" + } + }, + "type": "object" + }, + "v1VmBootloader": { + "description": "Represents the firmware blob used to assist in the domain creation process. Used for setting the QEMU BIOS file path for the libvirt domain.", + "properties": { + "bios": { + "$ref": "#/definitions/v1VmBIOS" + }, + "efi": { + "$ref": "#/definitions/v1VmEFI" + } + }, + "type": "object" + }, + "v1VmCDRomTarget": { + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to true.", + "type": "boolean" + }, + "tray": { + "description": "Tray indicates if the tray of the device is open or closed. Allowed values are \"open\" and \"closed\". Defaults to closed.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmChassis": { + "description": "Chassis specifies the chassis info passed to the domain.", + "properties": { + "asset": { + "type": "string" + }, + "manufacturer": { + "type": "string" + }, + "serial": { + "type": "string" + }, + "sku": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "type": "object" + }, + "v1VmClientPassthroughDevices": { + "description": "Represent a subset of client devices that can be accessed by VMI. At the moment only, USB devices using Usbredir's library and tooling. Another fit would be a smartcard with libcacard.\n\nThe struct is currently empty as there is no immediate request for user-facing APIs. This structure simply turns on USB redirection of UsbClientPassthroughMaxNumberOf devices.", + "type": "object" + }, + "v1VmClock": { + "description": "Represents the clock and timers of a vmi.", + "properties": { + "timer": { + "$ref": "#/definitions/v1VmTimer" + }, + "timezone": { + "description": "Timezone sets the guest clock to the specified timezone. Zone name follows the TZ environment variable format (e.g. 'America/New_York').", + "type": "string" + }, + "utc": { + "$ref": "#/definitions/v1VmClockOffsetUTC" + } + }, + "type": "object" + }, + "v1VmClockOffsetUTC": { + "description": "UTC sets the guest clock to UTC on each boot.", + "properties": { + "offsetSeconds": { + "description": "OffsetSeconds specifies an offset in seconds, relative to UTC. If set, guest changes to the clock will be kept during reboots and not reset.", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1VmCloudInitConfigDriveSource": { + "description": "Represents a cloud-init config drive user data source. More info: https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html", + "properties": { + "networkData": { + "description": "NetworkData contains config drive inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains config drive cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "$ref": "#/definitions/v1VmLocalObjectReference" + }, + "secretRef": { + "$ref": "#/definitions/v1VmLocalObjectReference" + }, + "userData": { + "description": "UserData contains config drive inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains config drive cloud-init userdata as a base64 encoded string.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmCloudInitNoCloudSource": { + "description": "Represents a cloud-init nocloud user data source. More info: http://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html", + "properties": { + "networkData": { + "description": "NetworkData contains NoCloud inline cloud-init networkdata.", + "type": "string" + }, + "networkDataBase64": { + "description": "NetworkDataBase64 contains NoCloud cloud-init networkdata as a base64 encoded string.", + "type": "string" + }, + "networkDataSecretRef": { + "$ref": "#/definitions/v1VmLocalObjectReference" + }, + "secretRef": { + "$ref": "#/definitions/v1VmLocalObjectReference" + }, + "userData": { + "description": "UserData contains NoCloud inline cloud-init userdata.", + "type": "string" + }, + "userDataBase64": { + "description": "UserDataBase64 contains NoCloud cloud-init userdata as a base64 encoded string.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmCondition": { + "description": "Condition defines conditions", + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "type", + "status" + ], + "type": "object" + }, + "v1VmConfigDriveSshPublicKeyAccessCredentialPropagation": { + "type": "object" + }, + "v1VmConfigMapVolumeSource": { + "description": "ConfigMapVolumeSource adapts a ConfigMap into a volume. More info: https://kubernetes.io/docs/concepts/storage/volumes/#configmap", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "optional": { + "description": "Specify whether the ConfigMap or it's keys must be defined", + "type": "boolean" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + }, + "type": "object" + }, + "v1VmContainerDiskSource": { + "description": "Represents a docker image with an embedded disk.", + "properties": { + "image": { + "description": "Image is the name of the image with the embedded disk.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "path": { + "description": "Path defines the path to disk file in the container", + "type": "string" + } + }, + "required": [ + "image" + ], + "type": "object" + }, + "v1VmCoreDataVolumeSource": { + "properties": { + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "name": { + "description": "Name of both the DataVolume and the PVC in the same namespace. After PVC population the DataVolume is garbage collected by default.", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1VmCoreResourceRequirements": { + "description": "ResourceRequirements describes the compute resource requirements.", + "properties": { + "limits": { + "additionalProperties": { + "$ref": "#/definitions/v1VmQuantity" + }, + "description": "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object" + }, + "requests": { + "additionalProperties": { + "$ref": "#/definitions/v1VmQuantity" + }, + "description": "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/", + "type": "object" + } + }, + "type": "object" + }, + "v1VmCpu": { + "description": "CPU allows specifying the CPU topology.", + "properties": { + "cores": { + "description": "Cores specifies the number of cores inside the vmi. Must be a value greater or equal 1.", + "format": "int64", + "type": "integer" + }, + "dedicatedCpuPlacement": { + "description": "DedicatedCPUPlacement requests the scheduler to place the VirtualMachineInstance on a node with enough dedicated pCPUs and pin the vCPUs to it.", + "type": "boolean" + }, + "features": { + "description": "Features specifies the CPU features list inside the VMI.", + "items": { + "$ref": "#/definitions/v1VmCpuFeature" + }, + "type": "array" + }, + "isolateEmulatorThread": { + "description": "IsolateEmulatorThread requests one more dedicated pCPU to be allocated for the VMI to place the emulator thread on it.", + "type": "boolean" + }, + "model": { + "description": "Model specifies the CPU model inside the VMI. List of available models https://github.com/libvirt/libvirt/tree/master/src/cpu_map. It is possible to specify special cases like \"host-passthrough\" to get the same CPU as the node and \"host-model\" to get CPU closest to the node one. Defaults to host-model.", + "type": "string" + }, + "numa": { + "$ref": "#/definitions/v1VmNUMA" + }, + "realtime": { + "$ref": "#/definitions/v1VmRealtime" + }, + "sockets": { + "description": "Sockets specifies the number of sockets inside the vmi. Must be a value greater or equal 1.", + "format": "int64", + "type": "integer" + }, + "threads": { + "description": "Threads specifies the number of threads inside the vmi. Must be a value greater or equal 1.", + "format": "int64", + "type": "integer" + } + }, + "type": "object" + }, + "v1VmCpuFeature": { + "description": "CPUFeature allows specifying a CPU feature.", + "properties": { + "name": { + "description": "Name of the CPU feature", + "type": "string" + }, + "policy": { + "description": "Policy is the CPU feature attribute which can have the following attributes: force - The virtual CPU will claim the feature is supported regardless of it being supported by host CPU. require - Guest creation will fail unless the feature is supported by the host CPU or the hypervisor is able to emulate it. optional - The feature will be supported by virtual CPU if and only if it is supported by host CPU. disable - The feature will not be supported by virtual CPU. forbid - Guest creation will fail if the feature is supported by host CPU. Defaults to require", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1VmCustomBlockSize": { + "description": "CustomBlockSize represents the desired logical and physical block size for a VM disk.", + "properties": { + "logical": { + "format": "int32", + "type": "integer" + }, + "physical": { + "format": "int32", + "type": "integer" + } + }, + "required": [ + "logical", + "physical" + ], + "type": "object" + }, + "v1VmDHCPOptions": { + "description": "Extra DHCP options to use in the interface.", + "properties": { + "bootFileName": { + "description": "If specified will pass option 67 to interface's DHCP server", + "type": "string" + }, + "ntpServers": { + "description": "If specified will pass the configured NTP server to the VM via DHCP option 042.", + "items": { + "type": "string" + }, + "type": "array" + }, + "privateOptions": { + "description": "If specified will pass extra DHCP options for private use, range: 224-254", + "items": { + "$ref": "#/definitions/v1VmDHCPPrivateOptions" + }, + "type": "array" + }, + "tftpServerName": { + "description": "If specified will pass option 66 to interface's DHCP server", + "type": "string" + } + }, + "type": "object" + }, + "v1VmDHCPPrivateOptions": { + "description": "DHCPExtraOptions defines Extra DHCP options for a VM.", + "properties": { + "option": { + "description": "Option is an Integer value from 224-254 Required.", + "format": "int32", + "type": "integer" + }, + "value": { + "description": "Value is a String value for the Option provided Required.", + "type": "string" + } + }, + "required": [ + "option", + "value" + ], + "type": "object" + }, + "v1VmDataVolumeBlankImage": { + "description": "DataVolumeBlankImage provides the parameters to create a new raw blank image for the PVC", + "type": "object" + }, + "v1VmDataVolumeCheckpoint": { + "description": "DataVolumeCheckpoint defines a stage in a warm migration.", + "properties": { + "current": { + "description": "Current is the identifier of the snapshot created for this checkpoint.", + "type": "string" + }, + "previous": { + "description": "Previous is the identifier of the snapshot from the previous checkpoint.", + "type": "string" + } + }, + "required": [ + "previous", + "current" + ], + "type": "object" + }, + "v1VmDataVolumeSource": { + "description": "DataVolumeSource represents the source for our Data Volume, this can be HTTP, Imageio, S3, Registry or an existing PVC", + "properties": { + "blank": { + "$ref": "#/definitions/v1VmDataVolumeBlankImage" + }, + "http": { + "$ref": "#/definitions/v1VmDataVolumeSourceHttp" + }, + "imageio": { + "$ref": "#/definitions/v1VmDataVolumeSourceImageIO" + }, + "pvc": { + "$ref": "#/definitions/v1VmDataVolumeSourcePVC" + }, + "registry": { + "$ref": "#/definitions/v1VmDataVolumeSourceRegistry" + }, + "s3": { + "$ref": "#/definitions/v1VmDataVolumeSourceS3" + }, + "upload": { + "$ref": "#/definitions/v1VmDataVolumeSourceUpload" + }, + "vddk": { + "$ref": "#/definitions/v1VmDataVolumeSourceVDDK" + } + }, + "type": "object" + }, + "v1VmDataVolumeSourceHttp": { + "description": "DataVolumeSourceHTTP can be either an http or https endpoint, with an optional basic auth user name and password, and an optional configmap containing additional CAs", + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "extraHeaders": { + "description": "ExtraHeaders is a list of strings containing extra headers to include with HTTP transfer requests", + "items": { + "type": "string" + }, + "type": "array" + }, + "secretExtraHeaders": { + "description": "SecretExtraHeaders is a list of Secret references, each containing an extra HTTP header that may include sensitive information", + "items": { + "type": "string" + }, + "type": "array" + }, + "secretRef": { + "description": "SecretRef A Secret reference, the secret should contain accessKeyId (user name) base64 encoded, and secretKey (password) also base64 encoded", + "type": "string" + }, + "url": { + "description": "URL is the URL of the http(s) endpoint", + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "v1VmDataVolumeSourceImageIO": { + "description": "DataVolumeSourceImageIO provides the parameters to create a Data Volume from an imageio source", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the CA cert", + "type": "string" + }, + "diskId": { + "description": "DiskID provides id of a disk to be imported", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the ovirt-engine", + "type": "string" + }, + "url": { + "description": "URL is the URL of the ovirt-engine", + "type": "string" + } + }, + "required": [ + "url", + "diskId" + ], + "type": "object" + }, + "v1VmDataVolumeSourcePVC": { + "description": "DataVolumeSourcePVC provides the parameters to create a Data Volume from an existing PVC", + "properties": { + "name": { + "description": "The name of the source PVC", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source PVC", + "type": "string" + } + }, + "required": [ + "namespace", + "name" + ], + "type": "object" + }, + "v1VmDataVolumeSourceRef": { + "description": "DataVolumeSourceRef defines an indirect reference to the source of data for the DataVolume", + "properties": { + "kind": { + "description": "The kind of the source reference, currently only \"DataSource\" is supported", + "type": "string" + }, + "name": { + "description": "The name of the source reference", + "type": "string" + }, + "namespace": { + "description": "The namespace of the source reference, defaults to the DataVolume namespace", + "type": "string" + } + }, + "required": [ + "kind", + "name" + ], + "type": "object" + }, + "v1VmDataVolumeSourceRegistry": { + "description": "DataVolumeSourceRegistry provides the parameters to create a Data Volume from an registry source", + "properties": { + "certConfigMap": { + "description": "CertConfigMap provides a reference to the Registry certs", + "type": "string" + }, + "imageStream": { + "description": "ImageStream is the name of image stream for import", + "type": "string" + }, + "pullMethod": { + "description": "PullMethod can be either \"pod\" (default import), or \"node\" (node docker cache based import)", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the Registry source", + "type": "string" + }, + "url": { + "description": "URL is the url of the registry source (starting with the scheme: docker, oci-archive)", + "type": "string" + } + }, + "type": "object" + }, + "v1VmDataVolumeSourceS3": { + "description": "DataVolumeSourceS3 provides the parameters to create a Data Volume from an S3 source", + "properties": { + "certConfigMap": { + "description": "CertConfigMap is a configmap reference, containing a Certificate Authority(CA) public key, and a base64 encoded pem certificate", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides the secret reference needed to access the S3 source", + "type": "string" + }, + "url": { + "description": "URL is the url of the S3 source", + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "v1VmDataVolumeSourceUpload": { + "description": "DataVolumeSourceUpload provides the parameters to create a Data Volume by uploading the source", + "type": "object" + }, + "v1VmDataVolumeSourceVDDK": { + "description": "DataVolumeSourceVDDK provides the parameters to create a Data Volume from a Vmware source", + "properties": { + "backingFile": { + "description": "BackingFile is the path to the virtual hard disk to migrate from vCenter/ESXi", + "type": "string" + }, + "initImageURL": { + "description": "InitImageURL is an optional URL to an image containing an extracted VDDK library, overrides v2v-vmware config map", + "type": "string" + }, + "secretRef": { + "description": "SecretRef provides a reference to a secret containing the username and password needed to access the vCenter or ESXi host", + "type": "string" + }, + "thumbprint": { + "description": "Thumbprint is the certificate thumbprint of the vCenter or ESXi host", + "type": "string" + }, + "url": { + "description": "URL is the URL of the vCenter or ESXi host with the VM to migrate", + "type": "string" + }, + "uuid": { + "description": "UUID is the UUID of the virtual machine that the backing file is attached to in vCenter/ESXi", + "type": "string" + } + }, + "type": "object" + }, + "v1VmDataVolumeSpec": { + "description": "DataVolumeSpec defines the DataVolume type specification", + "properties": { + "checkpoints": { + "description": "Checkpoints is a list of DataVolumeCheckpoints, representing stages in a multistage import.", + "items": { + "$ref": "#/definitions/v1VmDataVolumeCheckpoint" + }, + "type": "array" + }, + "contentType": { + "description": "DataVolumeContentType options: \"kubevirt\", \"archive\"", + "type": "string" + }, + "finalCheckpoint": { + "description": "FinalCheckpoint indicates whether the current DataVolumeCheckpoint is the final checkpoint.", + "type": "boolean" + }, + "preallocation": { + "description": "Preallocation controls whether storage for DataVolumes should be allocated in advance.", + "type": "boolean" + }, + "priorityClassName": { + "description": "PriorityClassName for Importer, Cloner and Uploader pod", + "type": "string" + }, + "pvc": { + "$ref": "#/definitions/v1VmPersistentVolumeClaimSpec" + }, + "source": { + "$ref": "#/definitions/v1VmDataVolumeSource" + }, + "sourceRef": { + "$ref": "#/definitions/v1VmDataVolumeSourceRef" + }, + "storage": { + "$ref": "#/definitions/v1VmStorageSpec" + } + }, + "type": "object" + }, + "v1VmDataVolumeTemplateSpec": { + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values.", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase.", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1VmObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1VmDataVolumeSpec" + } + }, + "required": [ + "spec" + ], + "type": "object" + }, + "v1VmDevices": { + "properties": { + "autoattachGraphicsDevice": { + "description": "Whether to attach the default graphics device or not. VNC will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachInputDevice": { + "description": "Whether to attach an Input Device. Defaults to false.", + "type": "boolean" + }, + "autoattachMemBalloon": { + "description": "Whether to attach the Memory balloon device with default period. Period can be adjusted in virt-config. Defaults to true.", + "type": "boolean" + }, + "autoattachPodInterface": { + "description": "Whether to attach a pod network interface. Defaults to true.", + "type": "boolean" + }, + "autoattachSerialConsole": { + "description": "Whether to attach the default serial console or not. Serial console access will not be available if set to false. Defaults to true.", + "type": "boolean" + }, + "autoattachVSOCK": { + "description": "Whether to attach the VSOCK CID to the VM or not. VSOCK access will be available if set to true. Defaults to false.", + "type": "boolean" + }, + "blockMultiQueue": { + "description": "Whether or not to enable virtio multi-queue for block devices. Defaults to false.", + "type": "boolean" + }, + "clientPassthrough": { + "$ref": "#/definitions/v1VmClientPassthroughDevices" + }, + "disableHotplug": { + "description": "DisableHotplug disabled the ability to hotplug disks.", + "type": "boolean" + }, + "disks": { + "description": "Disks describes disks, cdroms and luns which are connected to the vmi.", + "items": { + "$ref": "#/definitions/v1VmDisk" + }, + "type": "array" + }, + "filesystems": { + "description": "Filesystems describes filesystem which is connected to the vmi.", + "items": { + "$ref": "#/definitions/v1VmFilesystem" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "gpus": { + "description": "Whether to attach a GPU device to the vmi.", + "items": { + "$ref": "#/definitions/v1VmGPU" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "hostDevices": { + "description": "Whether to attach a host device to the vmi.", + "items": { + "$ref": "#/definitions/v1VmHostDevice" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "inputs": { + "description": "Inputs describe input devices", + "items": { + "$ref": "#/definitions/v1VmInput" + }, + "type": "array" + }, + "interfaces": { + "description": "Interfaces describe network interfaces which are added to the vmi.", + "items": { + "$ref": "#/definitions/v1VmInterface" + }, + "type": "array" + }, + "networkInterfaceMultiqueue": { + "description": "If specified, virtual network interfaces configured with a virtio bus will also enable the vhost multiqueue feature for network devices. The number of queues created depends on additional factors of the VirtualMachineInstance, like the number of guest CPUs.", + "type": "boolean" + }, + "rng": { + "$ref": "#/definitions/v1VmRng" + }, + "sound": { + "$ref": "#/definitions/v1VmSoundDevice" + }, + "tpm": { + "$ref": "#/definitions/v1VmTPMDevice" + }, + "useVirtioTransitional": { + "description": "Fall back to legacy virtio 0.9 support if virtio bus is selected on devices. This is helpful for old machines like CentOS6 or RHEL6 which do not understand virtio_non_transitional (virtio 1.0).", + "type": "boolean" + }, + "watchdog": { + "$ref": "#/definitions/v1VmWatchdog" + } + }, + "type": "object" + }, + "v1VmDisk": { + "properties": { + "blockSize": { + "$ref": "#/definitions/v1VmBlockSize" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each disk or interface that has a boot order must have a unique value. Disks without a boot order are not tried if a disk with a boot order exists.", + "format": "int32", + "type": "integer" + }, + "cache": { + "description": "Cache specifies which kvm disk cache mode should be used. Supported values are: CacheNone, CacheWriteThrough.", + "type": "string" + }, + "cdrom": { + "$ref": "#/definitions/v1VmCDRomTarget" + }, + "dedicatedIOThread": { + "description": "dedicatedIOThread indicates this disk should have an exclusive IO Thread. Enabling this implies useIOThreads = true. Defaults to false.", + "type": "boolean" + }, + "disk": { + "$ref": "#/definitions/v1VmDiskTarget" + }, + "io": { + "description": "IO specifies which QEMU disk IO mode should be used. Supported values are: native, default, threads.", + "type": "string" + }, + "lun": { + "$ref": "#/definitions/v1VmLunTarget" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "serial": { + "description": "Serial provides the ability to specify a serial number for the disk device.", + "type": "string" + }, + "shareable": { + "description": "If specified the disk is made sharable and multiple write from different VMs are permitted", + "type": "boolean" + }, + "tag": { + "description": "If specified, disk address and its tag will be provided to the guest via config drive metadata", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1VmDiskTarget": { + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi, usb.", + "type": "string" + }, + "pciAddress": { + "description": "If specified, the virtual disk will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VmDomainSpec": { + "properties": { + "chassis": { + "$ref": "#/definitions/v1VmChassis" + }, + "clock": { + "$ref": "#/definitions/v1VmClock" + }, + "cpu": { + "$ref": "#/definitions/v1VmCpu" + }, + "devices": { + "$ref": "#/definitions/v1VmDevices" + }, + "features": { + "$ref": "#/definitions/v1VmFeatures" + }, + "firmware": { + "$ref": "#/definitions/v1VmFirmware" + }, + "ioThreadsPolicy": { + "description": "Controls whether or not disks will share IOThreads. Omitting IOThreadsPolicy disables use of IOThreads. One of: shared, auto", + "type": "string" + }, + "launchSecurity": { + "$ref": "#/definitions/v1VmLaunchSecurity" + }, + "machine": { + "$ref": "#/definitions/v1VmMachine" + }, + "memory": { + "$ref": "#/definitions/v1VmMemory" + }, + "resources": { + "$ref": "#/definitions/v1VmResourceRequirements" + } + }, + "required": [ + "devices" + ], + "type": "object" + }, + "v1VmDownwardApiVolumeFile": { + "description": "DownwardAPIVolumeFile represents information to create the file containing the pod field", + "properties": { + "fieldRef": { + "$ref": "#/definitions/v1VmObjectFieldSelector" + }, + "mode": { + "description": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "format": "int32", + "type": "integer" + }, + "path": { + "description": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", + "type": "string" + }, + "resourceFieldRef": { + "$ref": "#/definitions/v1VmResourceFieldSelector" + } + }, + "required": [ + "path" + ], + "type": "object" + }, + "v1VmDownwardApiVolumeSource": { + "description": "DownwardAPIVolumeSource represents a volume containing downward API info.", + "properties": { + "fields": { + "description": "Fields is a list of downward API volume file", + "items": { + "$ref": "#/definitions/v1VmDownwardApiVolumeFile" + }, + "type": "array" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + }, + "type": "object" + }, + "v1VmDownwardMetricsVolumeSource": { + "description": "DownwardMetricsVolumeSource adds a very small disk to VMIs which contains a limited view of host and guest metrics. The disk content is compatible with vhostmd (https://github.com/vhostmd/vhostmd) and vm-dump-metrics.", + "type": "object" + }, + "v1VmDuration": { + "description": "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", + "type": "string" + }, + "v1VmEFI": { + "description": "If set, EFI will be used instead of BIOS.", + "properties": { + "secureBoot": { + "description": "If set, SecureBoot will be enabled and the OVMF roms will be swapped for SecureBoot-enabled ones. Requires SMM to be enabled. Defaults to true", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VmEmptyDiskSource": { + "description": "EmptyDisk represents a temporary disk which shares the vmis lifecycle.", + "properties": { + "capacity": { + "$ref": "#/definitions/v1VmQuantity" + } + }, + "required": [ + "capacity" + ], + "type": "object" + }, + "v1VmEphemeralVolumeSource": { + "properties": { + "persistentVolumeClaim": { + "$ref": "#/definitions/v1VmPersistentVolumeClaimVolumeSource" + } + }, + "type": "object" + }, + "v1VmError": { + "description": "Error is the last error encountered during the snapshot/restore", + "properties": { + "message": { + "type": "string" + }, + "time": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1VmExecAction": { + "description": "ExecAction describes a \"run in container\" action.", + "properties": { + "command": { + "description": "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1VmFeatureApiC": { + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "endOfInterrupt": { + "description": "EndOfInterrupt enables the end of interrupt notification in the guest. Defaults to false.", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VmFeatureHyperv": { + "description": "Hyperv specific features.", + "properties": { + "evmcs": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "frequencies": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "ipi": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "reenlightenment": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "relaxed": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "reset": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "runtime": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "spinlocks": { + "$ref": "#/definitions/v1VmFeatureSpinlocks" + }, + "synic": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "synictimer": { + "$ref": "#/definitions/v1VmSyNICTimer" + }, + "tlbflush": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "vapic": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "vendorid": { + "$ref": "#/definitions/v1VmFeatureVendorId" + }, + "vpindex": { + "$ref": "#/definitions/v1VmFeatureState" + } + }, + "type": "object" + }, + "v1VmFeatureKVm": { + "properties": { + "hidden": { + "description": "Hide the KVM hypervisor from standard MSR based discovery. Defaults to false", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VmFeatureSpinlocks": { + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "spinlocks": { + "description": "Retries indicates the number of retries. Must be a value greater or equal 4096. Defaults to 4096.", + "format": "int64", + "type": "integer" + } + }, + "type": "object" + }, + "v1VmFeatureState": { + "description": "Represents if a feature is enabled or disabled.", + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VmFeatureVendorId": { + "properties": { + "enabled": { + "description": "Enabled determines if the feature should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "vendorid": { + "description": "VendorID sets the hypervisor vendor id, visible to the vmi. String up to twelve characters.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmFeatures": { + "properties": { + "acpi": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "apic": { + "$ref": "#/definitions/v1VmFeatureApiC" + }, + "hyperv": { + "$ref": "#/definitions/v1VmFeatureHyperv" + }, + "kvm": { + "$ref": "#/definitions/v1VmFeatureKVm" + }, + "pvspinlock": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "smm": { + "$ref": "#/definitions/v1VmFeatureState" + } + }, + "type": "object" + }, + "v1VmFieldsV1": { + "description": "FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.\n\nEach key is either a '.' representing the field itself, and will always map to an empty set, or a string representing a sub-field or item. The string will follow one of these four formats: 'f:\u003cname\u003e', where \u003cname\u003e is the name of a field in a struct, or key in a map 'v:\u003cvalue\u003e', where \u003cvalue\u003e is the exact json formatted value of a list item 'i:\\\u003cindex\u003e', where \\\u003cindex\u003e is position of a item in a list 'k:\u003ckeys\u003e', where \u003ckeys\u003e is a map of a list item's key fields to their unique values If a key maps to an empty Fields value, the field that key represents is part of the set.\n\nThe exact format is defined in sigs.k8s.io/structured-merge-diff", + "properties": { + "Raw": { + "items": { + "format": "byte", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1VmFilesystem": { + "properties": { + "name": { + "description": "Name is the device name", + "type": "string" + }, + "virtiofs": { + "$ref": "#/definitions/v1VmFilesystemVirtiofs" + } + }, + "required": [ + "name", + "virtiofs" + ], + "type": "object" + }, + "v1VmFilesystemVirtiofs": { + "type": "object" + }, + "v1VmFirmware": { + "properties": { + "bootloader": { + "$ref": "#/definitions/v1VmBootloader" + }, + "kernelBoot": { + "$ref": "#/definitions/v1VmKernelBoot" + }, + "serial": { + "description": "The system-serial-number in SMBIOS", + "type": "string" + }, + "uuid": { + "description": "UUID reported by the vmi bios. Defaults to a random generated uid.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmGPU": { + "properties": { + "deviceName": { + "type": "string" + }, + "name": { + "description": "Name of the GPU device as exposed by a device plugin", + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + }, + "virtualGPUOptions": { + "$ref": "#/definitions/v1VmVGPUOptions" + } + }, + "required": [ + "name", + "deviceName" + ], + "type": "object" + }, + "v1VmGuestAgentPing": { + "description": "GuestAgentPing configures the guest-agent based ping probe", + "type": "object" + }, + "v1VmHPETTimer": { + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"merge\", \"discard\".", + "type": "string" + } + }, + "type": "object" + }, + "v1VmHostDevice": { + "properties": { + "deviceName": { + "description": "DeviceName is the resource name of the host device exposed by a device plugin", + "type": "string" + }, + "name": { + "type": "string" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + }, + "required": [ + "name", + "deviceName" + ], + "type": "object" + }, + "v1VmHostDisk": { + "description": "Represents a disk created on the cluster level", + "properties": { + "capacity": { + "$ref": "#/definitions/v1VmQuantity" + }, + "path": { + "description": "The path to HostDisk image located on the cluster", + "type": "string" + }, + "shared": { + "description": "Shared indicate whether the path is shared between nodes", + "type": "boolean" + }, + "type": { + "description": "Contains information if disk.img exists or should be created allowed options are 'Disk' and 'DiskOrCreate'", + "type": "string" + } + }, + "required": [ + "path", + "type" + ], + "type": "object" + }, + "v1VmHotplugVolumeSource": { + "description": "HotplugVolumeSource Represents the source of a volume to mount which are capable of being hotplugged on a live running VMI. Only one of its members may be specified.", + "properties": { + "dataVolume": { + "$ref": "#/definitions/v1VmCoreDataVolumeSource" + }, + "persistentVolumeClaim": { + "$ref": "#/definitions/v1VmPersistentVolumeClaimVolumeSource" + } + }, + "type": "object" + }, + "v1VmHttpGetAction": { + "description": "HTTPGetAction describes an action based on HTTP Get requests.", + "properties": { + "host": { + "description": "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", + "type": "string" + }, + "httpHeaders": { + "description": "Custom headers to set in the request. HTTP allows repeated headers.", + "items": { + "$ref": "#/definitions/v1VmHttpHeader" + }, + "type": "array" + }, + "path": { + "description": "Path to access on the HTTP server.", + "type": "string" + }, + "port": { + "description": "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + }, + "scheme": { + "description": "Scheme to use for connecting to the host. Defaults to HTTP.", + "type": "string" + } + }, + "required": [ + "port" + ], + "type": "object" + }, + "v1VmHttpHeader": { + "description": "HTTPHeader describes a custom header to be used in HTTP probes", + "properties": { + "name": { + "description": "The header field name", + "type": "string" + }, + "value": { + "description": "The header field value", + "type": "string" + } + }, + "required": [ + "name", + "value" + ], + "type": "object" + }, + "v1VmHugepages": { + "description": "Hugepages allow to use hugepages for the VirtualMachineInstance instead of regular memory.", + "properties": { + "pageSize": { + "description": "PageSize specifies the hugepage size, for x86_64 architecture valid values are 1Gi and 2Mi.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmHypervTimer": { + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VmI6300ESBWatchdog": { + "description": "i6300esb watchdog device.", + "properties": { + "action": { + "description": "The action to take. Valid values are poweroff, reset, shutdown. Defaults to reset.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmInput": { + "properties": { + "bus": { + "description": "Bus indicates the bus of input device to emulate. Supported values: virtio, usb.", + "type": "string" + }, + "name": { + "description": "Name is the device name", + "type": "string" + }, + "type": { + "description": "Type indicated the type of input device. Supported values: tablet.", + "type": "string" + } + }, + "required": [ + "type", + "name" + ], + "type": "object" + }, + "v1VmInstancetypeMatcher": { + "description": "InstancetypeMatcher references a instancetype that is used to fill fields in the VMI template.", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the instancetype to be used through known annotations on the underlying resource. Once applied to the InstancetypeMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which instancetype resource is referenced. Allowed values are: \"VirtualMachineInstancetype\" and \"VirtualMachineClusterInstancetype\". If not specified, \"VirtualMachineClusterInstancetype\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachineInstancetype or VirtualMachineClusterInstancetype to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmInterface": { + "properties": { + "acpiIndex": { + "description": "If specified, the ACPI index is used to provide network interface device naming, that is stable across changes in PCI addresses assigned to the device. This value is required to be unique across all devices and be between 1 and (16*1024-1).", + "format": "int32", + "type": "integer" + }, + "bootOrder": { + "description": "BootOrder is an integer value \u003e 0, used to determine ordering of boot devices. Lower values take precedence. Each interface or disk that has a boot order must have a unique value. Interfaces without a boot order are not tried.", + "format": "int32", + "type": "integer" + }, + "bridge": { + "$ref": "#/definitions/v1VmInterfaceBridge" + }, + "dhcpOptions": { + "$ref": "#/definitions/v1VmDHCPOptions" + }, + "macAddress": { + "description": "Interface MAC address. For example: de:ad:00:00:be:af or DE-AD-00-00-BE-AF.", + "type": "string" + }, + "macvtap": { + "$ref": "#/definitions/v1VmInterfaceMacvtap" + }, + "masquerade": { + "$ref": "#/definitions/v1VmInterfaceMasquerade" + }, + "model": { + "description": "Interface model. One of: e1000, e1000e, ne2k_pci, pcnet, rtl8139, virtio. Defaults to virtio.", + "type": "string" + }, + "name": { + "description": "Logical name of the interface as well as a reference to the associated networks. Must match the Name of a Network.", + "type": "string" + }, + "passt": { + "$ref": "#/definitions/v1VmInterfacePasst" + }, + "pciAddress": { + "description": "If specified, the virtual network interface will be placed on the guests pci address with the specified PCI address. For example: 0000:81:01.10", + "type": "string" + }, + "ports": { + "description": "List of ports to be forwarded to the virtual machine.", + "items": { + "$ref": "#/definitions/v1VmPort" + }, + "type": "array" + }, + "slirp": { + "$ref": "#/definitions/v1VmInterfaceSlirp" + }, + "sriov": { + "$ref": "#/definitions/v1VmInterfaceSRIOV" + }, + "tag": { + "description": "If specified, the virtual network interface address and its tag will be provided to the guest via config drive", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1VmInterfaceBridge": { + "description": "InterfaceBridge connects to a given network via a linux bridge.", + "type": "object" + }, + "v1VmInterfaceMacvtap": { + "description": "InterfaceMacvtap connects to a given network by extending the Kubernetes node's L2 networks via a macvtap interface.", + "type": "object" + }, + "v1VmInterfaceMasquerade": { + "description": "InterfaceMasquerade connects to a given network using netfilter rules to nat the traffic.", + "type": "object" + }, + "v1VmInterfacePasst": { + "description": "InterfacePasst connects to a given network.", + "type": "object" + }, + "v1VmInterfaceSRIOV": { + "description": "InterfaceSRIOV connects to a given network by passing-through an SR-IOV PCI device via vfio.", + "type": "object" + }, + "v1VmInterfaceSlirp": { + "description": "InterfaceSlirp connects to a given network using QEMU user networking mode.", + "type": "object" + }, + "v1VmKVmTimer": { + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VmKernelBoot": { + "description": "Represents the firmware blob used to assist in the kernel boot process. Used for setting the kernel, initrd and command line arguments", + "properties": { + "container": { + "$ref": "#/definitions/v1VmKernelBootContainer" + }, + "kernelArgs": { + "description": "Arguments to be passed to the kernel at boot time", + "type": "string" + } + }, + "type": "object" + }, + "v1VmKernelBootContainer": { + "description": "If set, the VM will be booted from the defined kernel / initrd.", + "properties": { + "image": { + "description": "Image that contains initrd / kernel files.", + "type": "string" + }, + "imagePullPolicy": { + "description": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", + "type": "string" + }, + "imagePullSecret": { + "description": "ImagePullSecret is the name of the Docker registry secret required to pull the image. The secret must already exist.", + "type": "string" + }, + "initrdPath": { + "description": "the fully-qualified path to the ramdisk image in the host OS", + "type": "string" + }, + "kernelPath": { + "description": "The fully-qualified path to the kernel image in the host OS", + "type": "string" + } + }, + "required": [ + "image" + ], + "type": "object" + }, + "v1VmLabelSelector": { + "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", + "properties": { + "matchExpressions": { + "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", + "items": { + "$ref": "#/definitions/v1VmLabelSelectorRequirement" + }, + "type": "array" + }, + "matchLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "matchLabels is a map of key-value pairs. A single key-value in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", + "type": "object" + } + }, + "type": "object" + }, + "v1VmLabelSelectorRequirement": { + "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "properties": { + "key": { + "description": "key is the label key that the selector applies to.", + "type": "string", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "operator": { + "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", + "type": "string" + }, + "values": { + "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "key", + "operator" + ], + "type": "object" + }, + "v1VmLaunchSecurity": { + "properties": { + "sev": { + "$ref": "#/definitions/v1VmSEV" + } + }, + "type": "object" + }, + "v1VmListMeta": { + "description": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", + "properties": { + "continue": { + "description": "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.", + "type": "string" + }, + "remainingItemCount": { + "description": "remainingItemCount is the number of subsequent items in the list which are not included in this list response. If the list request contained label or field selectors, then the number of remaining items is unknown and the field will be left unset and omitted during serialization. If the list is complete (either because it is not chunking or because this is the last chunk), then there are no more remaining items and this field will be left unset and omitted during serialization. Servers older than v1.15 do not set this field. The intended use of the remainingItemCount is *estimating* the size of a collection. Clients should not rely on the remainingItemCount to be set or to be exact.", + "format": "int64", + "type": "integer" + }, + "resourceVersion": { + "description": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only.", + "type": "string" + }, + "selfLink": { + "description": "selfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmLocalObjectReference": { + "description": "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", + "properties": { + "name": { + "description": "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + } + }, + "type": "object" + }, + "v1VmLunTarget": { + "properties": { + "bus": { + "description": "Bus indicates the type of disk device to emulate. supported values: virtio, sata, scsi.", + "type": "string" + }, + "readonly": { + "description": "ReadOnly. Defaults to false.", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VmMachine": { + "properties": { + "type": { + "description": "QEMU machine type is the actual chipset of the VirtualMachineInstance.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmManagedFieldsEntry": { + "description": "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", + "properties": { + "apiVersion": { + "description": "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", + "type": "string" + }, + "fieldsType": { + "description": "FieldsType is the discriminator for the different fields format and version. There is currently only one possible value: \"FieldsV1\"", + "type": "string" + }, + "fieldsV1": { + "$ref": "#/definitions/v1VmFieldsV1" + }, + "manager": { + "description": "Manager is an identifier of the workflow managing these fields.", + "type": "string" + }, + "operation": { + "description": "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", + "type": "string" + }, + "subresource": { + "description": "Subresource is the name of the subresource used to update that object, or empty string if the object was updated through the main resource. The value of this field is used to distinguish between managers, even if they share the same name. For example, a status update will be distinct from a regular update using the same manager name. Note that the APIVersion field is not related to the Subresource field and it always corresponds to the version of the main resource.", + "type": "string" + }, + "time": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1VmMemory": { + "description": "Memory allows specifying the VirtualMachineInstance memory features.", + "properties": { + "guest": { + "$ref": "#/definitions/v1VmQuantity" + }, + "hugepages": { + "$ref": "#/definitions/v1VmHugepages" + } + }, + "type": "object" + }, + "v1VmMemoryDumpVolumeSource": { + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + }, + "required": [ + "claimName" + ], + "type": "object" + }, + "v1VmMultusNetwork": { + "description": "Represents the multus cni network.", + "properties": { + "default": { + "description": "Select the default network and add it to the multus-cni.io/default-network annotation.", + "type": "boolean" + }, + "networkName": { + "description": "References to a NetworkAttachmentDefinition CRD object. Format: \u003cnetworkName\u003e, \u003cnamespace\u003e/\u003cnetworkName\u003e. If namespace is not specified, VMI namespace is assumed.", + "type": "string" + } + }, + "required": [ + "networkName" + ], + "type": "object" + }, + "v1VmNUMA": { + "properties": { + "guestMappingPassthrough": { + "$ref": "#/definitions/v1VmNUMAGuestMappingPassthrough" + } + }, + "type": "object" + }, + "v1VmNUMAGuestMappingPassthrough": { + "description": "NUMAGuestMappingPassthrough instructs kubevirt to model numa topology which is compatible with the CPU pinning on the guest. This will result in a subset of the node numa topology being passed through, ensuring that virtual numa nodes and their memory never cross boundaries coming from the node numa mapping.", + "type": "object" + }, + "v1VmNetwork": { + "description": "Network represents a network type and a resource that should be connected to the vm.", + "properties": { + "multus": { + "$ref": "#/definitions/v1VmMultusNetwork" + }, + "name": { + "description": "Network name. Must be a DNS_LABEL and unique within the vm. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "pod": { + "$ref": "#/definitions/v1VmPodNetwork" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1VmNodeAffinity": { + "description": "Node affinity is a group of node affinity scheduling rules.", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", + "items": { + "$ref": "#/definitions/v1VmPreferredSchedulingTerm" + }, + "type": "array" + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "$ref": "#/definitions/v1VmNodeSelector" + } + }, + "type": "object" + }, + "v1VmNodeSelector": { + "description": "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", + "properties": { + "nodeSelectorTerms": { + "description": "Required. A list of node selector terms. The terms are ORed.", + "items": { + "$ref": "#/definitions/v1VmNodeSelectorTerm" + }, + "type": "array" + } + }, + "required": [ + "nodeSelectorTerms" + ], + "type": "object" + }, + "v1VmNodeSelectorRequirement": { + "description": "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", + "properties": { + "key": { + "description": "The label key that the selector applies to.", + "type": "string" + }, + "operator": { + "description": "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", + "type": "string" + }, + "values": { + "description": "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "key", + "operator" + ], + "type": "object" + }, + "v1VmNodeSelectorTerm": { + "description": "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", + "properties": { + "matchExpressions": { + "description": "A list of node selector requirements by node's labels.", + "items": { + "$ref": "#/definitions/v1VmNodeSelectorRequirement" + }, + "type": "array" + }, + "matchFields": { + "description": "A list of node selector requirements by node's fields.", + "items": { + "$ref": "#/definitions/v1VmNodeSelectorRequirement" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1VmObjectFieldSelector": { + "description": "ObjectFieldSelector selects an APIVersioned field of an object.", + "properties": { + "apiVersion": { + "description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", + "type": "string" + }, + "fieldPath": { + "description": "Path of the field to select in the specified API version.", + "type": "string" + } + }, + "required": [ + "fieldPath" + ], + "type": "object" + }, + "v1VmObjectMeta": { + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "properties": { + "annotations": { + "additionalProperties": { + "type": "string" + }, + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object" + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "format": "int64", + "type": "integer" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", + "format": "date-time", + "type": "string", + "x-nullable": true + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed. Finalizers may be processed and removed in any order. Order is NOT enforced because it introduces significant risk of stuck finalizers. finalizers is a shared field, any actor with permission can reorder it. If the finalizer list is processed in order, then this can lead to a situation in which the component responsible for the first finalizer in the list is waiting for a signal (field value, external system, or other) produced by a component responsible for a finalizer later in the list, resulting in a deadlock. Without enforced ordering finalizers are free to order amongst themselves and are not vulnerable to ordering changes in the list.", + "items": { + "type": "string" + }, + "type": "array", + "x-kubernetes-patch-strategy": "merge" + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified.", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "format": "int64", + "type": "integer" + }, + "labels": { + "additionalProperties": { + "type": "string" + }, + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object" + }, + "managedFields": { + "description": "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.", + "items": { + "$ref": "#/definitions/v1VmManagedFieldsEntry" + }, + "type": "array" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\nMust be a DNS_LABEL. Cannot be updated.", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "items": { + "$ref": "#/definitions/v1VmOwnerReference" + }, + "type": "array", + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\nPopulated by the system. Read-only. Value must be treated as opaque by clients.", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\nPopulated by the system. Read-only.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmOwnerReference": { + "description": "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent.", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + }, + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "type": "object" + }, + "v1VmPITTimer": { + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\", \"discard\".", + "type": "string" + } + }, + "type": "object" + }, + "v1VmPersistentVolumeClaimSpec": { + "description": "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "items": { + "type": "string" + }, + "type": "array" + }, + "dataSource": { + "$ref": "#/definitions/v1VmTypedLocalObjectReference" + }, + "dataSourceRef": { + "$ref": "#/definitions/v1VmTypedLocalObjectReference" + }, + "resources": { + "$ref": "#/definitions/v1VmCoreResourceRequirements" + }, + "selector": { + "$ref": "#/definitions/v1VmLabelSelector" + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmPersistentVolumeClaimVolumeSource": { + "description": "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. Directly attached to the vmi via qemu. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "properties": { + "claimName": { + "description": "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", + "type": "string" + }, + "hotpluggable": { + "description": "Hotpluggable indicates whether the volume can be hotplugged and hotunplugged.", + "type": "boolean" + }, + "readOnly": { + "description": "Will force the ReadOnly setting in VolumeMounts. Default false.", + "type": "boolean" + } + }, + "required": [ + "claimName" + ], + "type": "object" + }, + "v1VmPodAffinity": { + "description": "Pod affinity is a group of inter pod affinity scheduling rules.", + "properties": { + "preferredDuringSchedulingIgnoredDuringExecution": { + "description": "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", + "items": { + "$ref": "#/definitions/v1VmWeightedPodAffinityTerm" + }, + "type": "array" + }, + "requiredDuringSchedulingIgnoredDuringExecution": { + "description": "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", + "items": { + "$ref": "#/definitions/v1VmPodAffinityTerm" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1VmPodAffinityTerm": { + "description": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key \u003ctopologyKey\u003e matches that of any node on which a pod of the set of pods is running", + "properties": { + "labelSelector": { + "$ref": "#/definitions/v1VmLabelSelector" + }, + "namespaceSelector": { + "$ref": "#/definitions/v1VmLabelSelector" + }, + "namespaces": { + "description": "namespaces specifies a static list of namespace names that the term applies to. The term is applied to the union of the namespaces listed in this field and the ones selected by namespaceSelector. null or empty namespaces list and null namespaceSelector means \"this pod's namespace\"", + "items": { + "type": "string" + }, + "type": "array" + }, + "topologyKey": { + "description": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", + "type": "string" + } + }, + "required": [ + "topologyKey" + ], + "type": "object" + }, + "v1VmPodDnsConfig": { + "description": "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", + "properties": { + "nameservers": { + "description": "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", + "items": { + "type": "string" + }, + "type": "array" + }, + "options": { + "description": "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", + "items": { + "$ref": "#/definitions/v1VmPodDnsConfigOption" + }, + "type": "array" + }, + "searches": { + "description": "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1VmPodDnsConfigOption": { + "description": "PodDNSConfigOption defines DNS resolver options of a pod.", + "properties": { + "name": { + "description": "Required.", + "type": "string" + }, + "value": { + "type": "string" + } + }, + "type": "object" + }, + "v1VmPodNetwork": { + "description": "Represents the stock pod network interface.", + "properties": { + "vmIPv6NetworkCIDR": { + "description": "IPv6 CIDR for the vm network. Defaults to fd10:0:2::/120 if not specified.", + "type": "string" + }, + "vmNetworkCIDR": { + "description": "CIDR for vm network. Default 10.0.2.0/24 if not specified.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmPort": { + "description": "Port represents a port to expose from the virtual machine. Default protocol TCP. The port field is mandatory", + "properties": { + "name": { + "description": "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", + "type": "string" + }, + "port": { + "description": "Number of port to expose for the virtual machine. This must be a valid port number, 0 \u003c x \u003c 65536.", + "format": "int32", + "type": "integer" + }, + "protocol": { + "description": "Protocol for port. Must be UDP or TCP. Defaults to \"TCP\".", + "type": "string" + } + }, + "required": [ + "port" + ], + "type": "object" + }, + "v1VmPreferenceMatcher": { + "description": "PreferenceMatcher references a set of preference that is used to fill fields in the VMI template.", + "properties": { + "inferFromVolume": { + "description": "InferFromVolume lists the name of a volume that should be used to infer or discover the preference to be used through known annotations on the underlying resource. Once applied to the PreferenceMatcher this field is removed.", + "type": "string" + }, + "kind": { + "description": "Kind specifies which preference resource is referenced. Allowed values are: \"VirtualMachinePreference\" and \"VirtualMachineClusterPreference\". If not specified, \"VirtualMachineClusterPreference\" is used by default.", + "type": "string" + }, + "name": { + "description": "Name is the name of the VirtualMachinePreference or VirtualMachineClusterPreference", + "type": "string" + }, + "revisionName": { + "description": "RevisionName specifies a ControllerRevision containing a specific copy of the VirtualMachinePreference or VirtualMachineClusterPreference to be used. This is initially captured the first time the instancetype is applied to the VirtualMachineInstance.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmPreferredSchedulingTerm": { + "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", + "properties": { + "preference": { + "$ref": "#/definitions/v1VmNodeSelectorTerm" + }, + "weight": { + "description": "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", + "format": "int32", + "type": "integer" + } + }, + "required": [ + "weight", + "preference" + ], + "type": "object" + }, + "v1VmProbe": { + "description": "Probe describes a health check to be performed against a VirtualMachineInstance to determine whether it is alive or ready to receive traffic.", + "properties": { + "exec": { + "$ref": "#/definitions/v1VmExecAction" + }, + "failureThreshold": { + "description": "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", + "format": "int32", + "type": "integer" + }, + "guestAgentPing": { + "$ref": "#/definitions/v1VmGuestAgentPing" + }, + "httpGet": { + "$ref": "#/definitions/v1VmHttpGetAction" + }, + "initialDelaySeconds": { + "description": "Number of seconds after the VirtualMachineInstance has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "format": "int32", + "type": "integer" + }, + "periodSeconds": { + "description": "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", + "format": "int32", + "type": "integer" + }, + "successThreshold": { + "description": "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", + "format": "int32", + "type": "integer" + }, + "tcpSocket": { + "$ref": "#/definitions/v1VmTcpSocketAction" + }, + "timeoutSeconds": { + "description": "Number of seconds after which the probe times out. For exec probes the timeout fails the probe but does not terminate the command running on the guest. This means a blocking command can result in an increasing load on the guest. A small buffer will be added to the resulting workload exec probe to compensate for delays caused by the qemu guest exec mechanism. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", + "format": "int32", + "type": "integer" + } + }, + "type": "object" + }, + "v1VmQemuGuestAgentSshPublicKeyAccessCredentialPropagation": { + "properties": { + "users": { + "description": "Users represents a list of guest users that should have the ssh public keys added to their authorized_keys file.", + "items": { + "type": "string" + }, + "type": "array", + "x-kubernetes-list-type": "set" + } + }, + "required": [ + "users" + ], + "type": "object" + }, + "v1VmQemuGuestAgentUserPasswordAccessCredentialPropagation": { + "type": "object" + }, + "v1VmQuantity": { + "description": "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and AsInt64() accessors.\n\nThe serialization format is:\n\n\u003cquantity\u003e ::= \u003csignedNumber\u003e\u003csuffix\u003e\n (Note that \u003csuffix\u003e may be empty, from the \"\" case in \u003cdecimalSI\u003e.)\n\u003cdigit\u003e ::= 0 | 1 | ... | 9 \u003cdigits\u003e ::= \u003cdigit\u003e | \u003cdigit\u003e\u003cdigits\u003e \u003cnumber\u003e ::= \u003cdigits\u003e | \u003cdigits\u003e.\u003cdigits\u003e | \u003cdigits\u003e. | .\u003cdigits\u003e \u003csign\u003e ::= \"+\" | \"-\" \u003csignedNumber\u003e ::= \u003cnumber\u003e | \u003csign\u003e\u003cnumber\u003e \u003csuffix\u003e ::= \u003cbinarySI\u003e | \u003cdecimalExponent\u003e | \u003cdecimalSI\u003e \u003cbinarySI\u003e ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n\u003cdecimalSI\u003e ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n\u003cdecimalExponent\u003e ::= \"e\" \u003csignedNumber\u003e | \"E\" \u003csignedNumber\u003e\n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", + "type": "string" + }, + "v1VmRTCTimer": { + "properties": { + "present": { + "description": "Enabled set to false makes sure that the machine type or a preset can't add the timer. Defaults to true.", + "type": "boolean" + }, + "tickPolicy": { + "description": "TickPolicy determines what happens when QEMU misses a deadline for injecting a tick to the guest. One of \"delay\", \"catchup\".", + "type": "string" + }, + "track": { + "description": "Track the guest or the wall clock.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmRealtime": { + "description": "Realtime holds the tuning knobs specific for realtime workloads.", + "properties": { + "mask": { + "description": "Mask defines the vcpu mask expression that defines which vcpus are used for realtime. Format matches libvirt's expressions. Example: \"0-3,^1\",\"0,2,3\",\"2-3\"", + "type": "string" + } + }, + "type": "object" + }, + "v1VmRemoveVolumeOptions": { + "description": "RemoveVolumeOptions is provided when dynamically hot unplugging volume and disk", + "properties": { + "dryRun": { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "items": { + "type": "string" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "name": { + "description": "Name represents the name that maps to both the disk and volume that should be removed", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1VmResourceFieldSelector": { + "description": "ResourceFieldSelector represents container resources (cpu, memory) and their output format", + "properties": { + "containerName": { + "description": "Container name: required for volumes, optional for env vars", + "type": "string" + }, + "divisor": { + "$ref": "#/definitions/v1VmQuantity" + }, + "resource": { + "description": "Required: resource to select", + "type": "string" + } + }, + "required": [ + "resource" + ], + "type": "object" + }, + "v1VmResourceRequirements": { + "properties": { + "limits": { + "description": "Limits describes the maximum amount of compute resources allowed. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + }, + "overcommitGuestOverhead": { + "description": "Don't ask the scheduler to take the guest-management overhead into account. Instead put the overhead only into the container's memory limit. This can lead to crashes if all memory is in use on a node. Defaults to false.", + "type": "boolean" + }, + "requests": { + "description": "Requests is a description of the initial vmi resources. Valid resource keys are \"memory\" and \"cpu\".", + "type": "object" + } + }, + "type": "object" + }, + "v1VmRng": { + "description": "Rng represents the random device passed from host", + "type": "object" + }, + "v1VmSEV": { + "type": "object" + }, + "v1VmSecretVolumeSource": { + "description": "SecretVolumeSource adapts a Secret into a volume.", + "properties": { + "optional": { + "description": "Specify whether the Secret or it's keys must be defined", + "type": "boolean" + }, + "secretName": { + "description": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", + "type": "string" + }, + "volumeLabel": { + "description": "The volume label of the resulting disk inside the VMI. Different bootstrapping mechanisms require different values. Typical values are \"cidata\" (cloud-init), \"config-2\" (cloud-init) or \"OEMDRV\" (kickstart).", + "type": "string" + } + }, + "type": "object" + }, + "v1VmServiceAccountVolumeSource": { + "description": "ServiceAccountVolumeSource adapts a ServiceAccount into a volume.", + "properties": { + "serviceAccountName": { + "description": "Name of the service account in the pod's namespace to use. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", + "type": "string" + } + }, + "type": "object" + }, + "v1VmSnapshotVolumesLists": { + "description": "SnapshotVolumesLists includes the list of volumes which were included in the snapshot and volumes which were excluded from the snapshot", + "properties": { + "excludedVolumes": { + "items": { + "type": "string" + }, + "type": "array", + "x-kubernetes-list-type": "set" + }, + "includedVolumes": { + "items": { + "type": "string" + }, + "type": "array", + "x-kubernetes-list-type": "set" + } + }, + "type": "object" + }, + "v1VmSoundDevice": { + "description": "Represents the user's configuration to emulate sound cards in the VMI.", + "properties": { + "model": { + "description": "We only support ich9 or ac97. If SoundDevice is not set: No sound card is emulated. If SoundDevice is set but Model is not: ich9", + "type": "string" + }, + "name": { + "description": "User's defined name for this sound device", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1VmSshPublicKeyAccessCredential": { + "description": "SSHPublicKeyAccessCredential represents a source and propagation method for injecting ssh public keys into a vm guest", + "properties": { + "propagationMethod": { + "$ref": "#/definitions/v1VmSshPublicKeyAccessCredentialPropagationMethod" + }, + "source": { + "$ref": "#/definitions/v1VmSshPublicKeyAccessCredentialSource" + } + }, + "required": [ + "source", + "propagationMethod" + ], + "type": "object" + }, + "v1VmSshPublicKeyAccessCredentialPropagationMethod": { + "description": "SSHPublicKeyAccessCredentialPropagationMethod represents the method used to inject a ssh public key into the vm guest. Only one of its members may be specified.", + "properties": { + "configDrive": { + "$ref": "#/definitions/v1VmConfigDriveSshPublicKeyAccessCredentialPropagation" + }, + "qemuGuestAgent": { + "$ref": "#/definitions/v1VmQemuGuestAgentSshPublicKeyAccessCredentialPropagation" + } + }, + "type": "object" + }, + "v1VmSshPublicKeyAccessCredentialSource": { + "description": "SSHPublicKeyAccessCredentialSource represents where to retrieve the ssh key credentials Only one of its members may be specified.", + "properties": { + "secret": { + "$ref": "#/definitions/v1VmAccessCredentialSecretSource" + } + }, + "type": "object" + }, + "v1VmStorageSpec": { + "description": "StorageSpec defines the Storage type specification", + "properties": { + "accessModes": { + "description": "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", + "items": { + "type": "string" + }, + "type": "array" + }, + "dataSource": { + "$ref": "#/definitions/v1VmTypedLocalObjectReference" + }, + "resources": { + "$ref": "#/definitions/v1VmCoreResourceRequirements" + }, + "selector": { + "$ref": "#/definitions/v1VmLabelSelector" + }, + "storageClassName": { + "description": "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", + "type": "string" + }, + "volumeMode": { + "description": "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec.", + "type": "string" + }, + "volumeName": { + "description": "VolumeName is the binding reference to the PersistentVolume backing this claim.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmSyNICTimer": { + "properties": { + "direct": { + "$ref": "#/definitions/v1VmFeatureState" + }, + "enabled": { + "type": "boolean" + } + }, + "type": "object" + }, + "v1VmSysprepSource": { + "description": "Represents a Sysprep volume source.", + "properties": { + "configMap": { + "$ref": "#/definitions/v1VmLocalObjectReference" + }, + "secret": { + "$ref": "#/definitions/v1VmLocalObjectReference" + } + }, + "type": "object" + }, + "v1VmTPMDevice": { + "type": "object" + }, + "v1VmTcpSocketAction": { + "description": "TCPSocketAction describes an action based on opening a socket", + "properties": { + "host": { + "description": "Optional: Host name to connect to, defaults to the pod IP.", + "type": "string" + }, + "port": { + "description": "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", + "type": [ + "string", + "number" + ] + } + }, + "required": [ + "port" + ], + "type": "object" + }, + "v1VmTimer": { + "description": "Represents all available timers in a vmi.", + "properties": { + "hpet": { + "$ref": "#/definitions/v1VmHPETTimer" + }, + "hyperv": { + "$ref": "#/definitions/v1VmHypervTimer" + }, + "kvm": { + "$ref": "#/definitions/v1VmKVmTimer" + }, + "pit": { + "$ref": "#/definitions/v1VmPITTimer" + }, + "rtc": { + "$ref": "#/definitions/v1VmRTCTimer" + } + }, + "type": "object" + }, + "v1VmToleration": { + "description": "The pod this Toleration is attached to tolerates any taint that matches the triple \u003ckey,value,effect\u003e using the matching operator \u003coperator\u003e.", + "properties": { + "effect": { + "description": "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", + "type": "string" + }, + "key": { + "description": "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", + "type": "string" + }, + "operator": { + "description": "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", + "type": "string" + }, + "tolerationSeconds": { + "description": "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", + "format": "int64", + "type": "integer" + }, + "value": { + "description": "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", + "type": "string" + } + }, + "type": "object" + }, + "v1VmTopologySpreadConstraint": { + "description": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", + "properties": { + "labelSelector": { + "$ref": "#/definitions/v1VmLabelSelector" + }, + "maxSkew": { + "description": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: | zone1 | zone2 | zone3 | | P | P | | - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) violate MaxSkew(1). - if MaxSkew is 2, incoming pod can be scheduled onto any zone. When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence to topologies that satisfy it. It's a required field. Default value is 1 and 0 is not allowed.", + "format": "int32", + "type": "integer" + }, + "topologyKey": { + "description": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each \u003ckey, value\u003e as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", + "type": "string" + }, + "whenUnsatisfiable": { + "description": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assignment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: | zone1 | zone2 | zone3 | | P P P | P | P | If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler won't make it *more* imbalanced. It's a required field.", + "type": "string" + } + }, + "required": [ + "maxSkew", + "topologyKey", + "whenUnsatisfiable" + ], + "type": "object" + }, + "v1VmTypedLocalObjectReference": { + "description": "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", + "properties": { + "apiGroup": { + "description": "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", + "type": "string" + }, + "kind": { + "description": "Kind is the type of resource being referenced", + "type": "string" + }, + "name": { + "description": "Name is the name of resource being referenced", + "type": "string" + } + }, + "required": [ + "kind", + "name" + ], + "type": "object" + }, + "v1VmUserPasswordAccessCredential": { + "description": "UserPasswordAccessCredential represents a source and propagation method for injecting user passwords into a vm guest Only one of its members may be specified.", + "properties": { + "propagationMethod": { + "$ref": "#/definitions/v1VmUserPasswordAccessCredentialPropagationMethod" + }, + "source": { + "$ref": "#/definitions/v1VmUserPasswordAccessCredentialSource" + } + }, + "required": [ + "source", + "propagationMethod" + ], + "type": "object" + }, + "v1VmUserPasswordAccessCredentialPropagationMethod": { + "description": "UserPasswordAccessCredentialPropagationMethod represents the method used to inject a user passwords into the vm guest. Only one of its members may be specified.", + "properties": { + "qemuGuestAgent": { + "$ref": "#/definitions/v1VmQemuGuestAgentUserPasswordAccessCredentialPropagation" + } + }, + "type": "object" + }, + "v1VmUserPasswordAccessCredentialSource": { + "description": "UserPasswordAccessCredentialSource represents where to retrieve the user password credentials Only one of its members may be specified.", + "properties": { + "secret": { + "$ref": "#/definitions/v1VmAccessCredentialSecretSource" + } + }, + "type": "object" + }, + "v1VmVGPUDisplayOptions": { + "properties": { + "enabled": { + "description": "Enabled determines if a display addapter backed by a vGPU should be enabled or disabled on the guest. Defaults to true.", + "type": "boolean" + }, + "ramFB": { + "$ref": "#/definitions/v1VmFeatureState" + } + }, + "type": "object" + }, + "v1VmVGPUOptions": { + "properties": { + "display": { + "$ref": "#/definitions/v1VmVGPUDisplayOptions" + } + }, + "type": "object" + }, + "v1VmVirtualMachineCondition": { + "description": "VirtualMachineCondition represents the state of VirtualMachine", + "properties": { + "lastProbeTime": { + "type": "string" + }, + "lastTransitionTime": { + "type": "string" + }, + "message": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "status": { + "type": "string" + }, + "type": { + "type": "string" + } + }, + "required": [ + "type", + "status" + ], + "type": "object" + }, + "v1VmVirtualMachineInstanceSpec": { + "description": "VirtualMachineInstanceSpec is a description of a VirtualMachineInstance.", + "properties": { + "accessCredentials": { + "description": "Specifies a set of public keys to inject into the vm guest", + "items": { + "$ref": "#/definitions/v1VmAccessCredential" + }, + "type": "array", + "x-kubernetes-list-type": "atomic" + }, + "affinity": { + "$ref": "#/definitions/v1VmAffinity" + }, + "dnsConfig": { + "$ref": "#/definitions/v1VmPodDnsConfig" + }, + "dnsPolicy": { + "description": "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", + "type": "string" + }, + "domain": { + "$ref": "#/definitions/v1VmDomainSpec" + }, + "evictionStrategy": { + "description": "EvictionStrategy can be set to \"LiveMigrate\" if the VirtualMachineInstance should be migrated instead of shut-off in case of a node drain.", + "type": "string" + }, + "hostname": { + "description": "Specifies the hostname of the vmi If not specified, the hostname will be set to the name of the vmi, if dhcp or cloud-init is configured properly.", + "type": "string" + }, + "livenessProbe": { + "$ref": "#/definitions/v1VmProbe" + }, + "networks": { + "description": "List of networks that can be attached to a vm's virtual interface.", + "items": { + "$ref": "#/definitions/v1VmNetwork" + }, + "type": "array" + }, + "nodeSelector": { + "additionalProperties": { + "type": "string" + }, + "description": "NodeSelector is a selector which must be true for the vmi to fit on a node. Selector which must match a node's labels for the vmi to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", + "type": "object" + }, + "priorityClassName": { + "description": "If specified, indicates the pod's priority. If not specified, the pod priority will be default or zero if there is no default.", + "type": "string" + }, + "readinessProbe": { + "$ref": "#/definitions/v1VmProbe" + }, + "schedulerName": { + "description": "If specified, the VMI will be dispatched by specified scheduler. If not specified, the VMI will be dispatched by default scheduler.", + "type": "string" + }, + "startStrategy": { + "description": "StartStrategy can be set to \"Paused\" if Virtual Machine should be started in paused state.", + "type": "string" + }, + "subdomain": { + "description": "If specified, the fully qualified vmi hostname will be \"\u003chostname\u003e.\u003csubdomain\u003e.\u003cpod namespace\u003e.svc.\u003ccluster domain\u003e\". If not specified, the vmi will not have a domainname at all. The DNS entry will resolve to the vmi, no matter if the vmi itself can pick up a hostname.", + "type": "string" + }, + "terminationGracePeriodSeconds": { + "description": "Grace period observed after signalling a VirtualMachineInstance to stop after which the VirtualMachineInstance is force terminated.", + "format": "int64", + "type": "integer" + }, + "tolerations": { + "description": "If toleration is specified, obey all the toleration rules.", + "items": { + "$ref": "#/definitions/v1VmToleration" + }, + "type": "array" + }, + "topologySpreadConstraints": { + "description": "TopologySpreadConstraints describes how a group of VMIs will be spread across a given topology domains. K8s scheduler will schedule VMI pods in a way which abides by the constraints.", + "items": { + "$ref": "#/definitions/v1VmTopologySpreadConstraint" + }, + "type": "array", + "x-kubernetes-list-map-keys": [ + "topologyKey", + "whenUnsatisfiable" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "topologyKey", + "x-kubernetes-patch-strategy": "merge" + }, + "volumes": { + "description": "List of volumes that can be mounted by disks belonging to the vmi.", + "items": { + "$ref": "#/definitions/v1VmVolume" + }, + "type": "array" + } + }, + "required": [ + "domain" + ], + "type": "object" + }, + "v1VmVirtualMachineInstanceTemplateSpec": { + "properties": { + "metadata": { + "$ref": "#/definitions/v1VmObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1VmVirtualMachineInstanceSpec" + } + }, + "type": "object" + }, + "v1VmVirtualMachineMemoryDumpRequest": { + "description": "VirtualMachineMemoryDumpRequest represent the memory dump request phase and info", + "properties": { + "claimName": { + "description": "ClaimName is the name of the pvc that will contain the memory dump", + "type": "string" + }, + "endTimestamp": { + "$ref": "#/definitions/v1Time" + }, + "fileName": { + "description": "FileName represents the name of the output file", + "type": "string" + }, + "message": { + "description": "Message is a detailed message about failure of the memory dump", + "type": "string" + }, + "phase": { + "description": "Phase represents the memory dump phase", + "type": "string" + }, + "remove": { + "description": "Remove represents request of dissociating the memory dump pvc", + "type": "boolean" + }, + "startTimestamp": { + "$ref": "#/definitions/v1Time" + } + }, + "required": [ + "claimName", + "phase" + ], + "type": "object" + }, + "v1VmVirtualMachineStartFailure": { + "description": "VirtualMachineStartFailure tracks VMIs which failed to transition successfully to running using the VM status", + "properties": { + "consecutiveFailCount": { + "format": "int32", + "type": "integer" + }, + "lastFailedVMIUID": { + "type": "string" + }, + "retryAfterTimestamp": { + "$ref": "#/definitions/v1Time" + } + }, + "type": "object" + }, + "v1VmVirtualMachineStateChangeRequest": { + "properties": { + "action": { + "description": "Indicates the type of action that is requested. e.g. Start or Stop", + "type": "string" + }, + "data": { + "additionalProperties": { + "type": "string" + }, + "description": "Provides additional data in order to perform the Action", + "type": "object" + }, + "uid": { + "description": "Indicates the UUID of an existing Virtual Machine Instance that this change request applies to -- if applicable", + "type": "string" + } + }, + "required": [ + "action" + ], + "type": "object" + }, + "v1VmVirtualMachineVolumeRequest": { + "properties": { + "addVolumeOptions": { + "$ref": "#/definitions/v1VmAddVolumeOptions" + }, + "removeVolumeOptions": { + "$ref": "#/definitions/v1VmRemoveVolumeOptions" + } + }, + "type": "object" + }, + "v1VmVolume": { + "description": "Volume represents a named volume in a vmi.", + "properties": { + "cloudInitConfigDrive": { + "$ref": "#/definitions/v1VmCloudInitConfigDriveSource" + }, + "cloudInitNoCloud": { + "$ref": "#/definitions/v1VmCloudInitNoCloudSource" + }, + "configMap": { + "$ref": "#/definitions/v1VmConfigMapVolumeSource" + }, + "containerDisk": { + "$ref": "#/definitions/v1VmContainerDiskSource" + }, + "dataVolume": { + "$ref": "#/definitions/v1VmCoreDataVolumeSource" + }, + "downwardAPI": { + "$ref": "#/definitions/v1VmDownwardApiVolumeSource" + }, + "downwardMetrics": { + "$ref": "#/definitions/v1VmDownwardMetricsVolumeSource" + }, + "emptyDisk": { + "$ref": "#/definitions/v1VmEmptyDiskSource" + }, + "ephemeral": { + "$ref": "#/definitions/v1VmEphemeralVolumeSource" + }, + "hostDisk": { + "$ref": "#/definitions/v1VmHostDisk" + }, + "memoryDump": { + "$ref": "#/definitions/v1VmMemoryDumpVolumeSource" + }, + "name": { + "description": "Volume's name. Must be a DNS_LABEL and unique within the vmi. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", + "type": "string" + }, + "persistentVolumeClaim": { + "$ref": "#/definitions/v1VmPersistentVolumeClaimVolumeSource" + }, + "secret": { + "$ref": "#/definitions/v1VmSecretVolumeSource" + }, + "serviceAccount": { + "$ref": "#/definitions/v1VmServiceAccountVolumeSource" + }, + "sysprep": { + "$ref": "#/definitions/v1VmSysprepSource" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1VmVolumeSnapshotStatus": { + "properties": { + "enabled": { + "description": "True if the volume supports snapshotting", + "type": "boolean" + }, + "name": { + "description": "Volume name", + "type": "string" + }, + "reason": { + "description": "Empty if snapshotting is enabled, contains reason otherwise", + "type": "string" + } + }, + "required": [ + "name", + "enabled" + ], + "type": "object" + }, + "v1VmWatchdog": { + "description": "Named watchdog device.", + "properties": { + "i6300esb": { + "$ref": "#/definitions/v1VmI6300ESBWatchdog" + }, + "name": { + "description": "Name of the watchdog.", + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "v1VmWeightedPodAffinityTerm": { + "description": "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", + "properties": { + "podAffinityTerm": { + "$ref": "#/definitions/v1VmPodAffinityTerm" + }, + "weight": { + "description": "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", + "format": "int32", + "type": "integer" + } + }, + "required": [ + "weight", + "podAffinityTerm" + ], + "type": "object" + }, + "v1VsphereAccount": { + "description": "VSphere account information", + "properties": { + "apiVersion": { + "description": "Cloud account api version", + "type": "string" + }, + "kind": { + "description": "Cloud account kind", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1VsphereCloudAccount" + }, + "status": { + "$ref": "#/definitions/v1CloudAccountStatus" + } + }, + "type": "object" + }, + "v1VsphereAccounts": { + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1VsphereAccount" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1VsphereCloudAccount": { + "properties": { + "insecure": { + "description": "Insecure is a flag that controls whether or not to validate the vSphere server's certificate.", + "type": "boolean", + "x-omitempty": false + }, + "password": { + "type": "string" + }, + "username": { + "type": "string" + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + }, + "required": [ + "vcenterServer", + "username", + "password" + ], + "type": "object" + }, + "v1VsphereCloudClusterConfigEntity": { + "description": "vSphere cloud cluster config entity", + "properties": { + "clusterConfig": { + "$ref": "#/definitions/v1VsphereClusterConfigEntity" + } + }, + "type": "object" + }, + "v1VsphereCloudConfig": { + "description": "VsphereCloudConfig is the Schema for the vspherecloudconfigs API", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1VsphereCloudConfigSpec" + }, + "status": { + "$ref": "#/definitions/v1VsphereCloudConfigStatus" + } + }, + "type": "object" + }, + "v1VsphereCloudConfigSpec": { + "description": "VsphereCloudConfigSpec defines the desired state of VsphereCloudConfig", + "properties": { + "cloudAccountRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "cloudAccountRef should point to the secret which contains VsphereCloudAccount" + }, + "clusterConfig": { + "$ref": "#/definitions/v1VsphereClusterConfig" + }, + "edgeHostRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "Appliance (Edge Host) uid for Edge env" + }, + "machinePoolConfig": { + "items": { + "$ref": "#/definitions/v1VsphereMachinePoolConfig" + }, + "type": "array" + } + }, + "required": [ + "clusterConfig", + "machinePoolConfig" + ], + "type": "object" + }, + "v1VsphereCloudConfigStatus": { + "description": "VsphereCloudConfigStatus defines the observed state of VsphereCloudConfig", + "properties": { + "ansibleDigest": { + "type": "string" + }, + "conditions": { + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + }, + "isAddonLayer": { + "description": "addon layers present in spc", + "type": "boolean" + }, + "lastOVACreated": { + "type": "string" + }, + "lastVMExported": { + "type": "string" + }, + "nodeImage": { + "$ref": "#/definitions/v1VsphereImage" + }, + "roleDigest": { + "additionalProperties": { + "type": "string" + }, + "description": "this map will be for ansible roles present in eack pack", + "type": "object" + }, + "sourceImageId": { + "description": "sourceImageId, it can be from packref's annotations or from pack.json", + "type": "string" + }, + "uploadOvaS3": { + "description": "UploadOVAS3 will hold last image name which uploaded to S3", + "type": "string" + }, + "useCapiImage": { + "description": "If no ansible roles found in Packs then Mold should tell Drive to use capi image and not create custom image, because there is nothing to add", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VsphereCloudDatacenter": { + "description": "Vsphere datacenter", + "properties": { + "computeClusters": { + "items": { + "$ref": "#/definitions/v1VsphereComputeCluster" + }, + "type": "array" + }, + "folders": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "type": "object" + }, + "v1VsphereClusterConfig": { + "properties": { + "controlPlaneEndpoint": { + "$ref": "#/definitions/v1ControlPlaneEndPoint", + "description": "The optional control plane endpoint, which can be an IP or FQDN" + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "items": { + "type": "string" + }, + "type": "array" + }, + "placement": { + "$ref": "#/definitions/v1VspherePlacementConfig", + "description": "Placement configuration Placement config in ClusterConfig serve as default values for each MachinePool" + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "items": { + "type": "string" + }, + "type": "array" + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + }, + "required": [ + "placement" + ], + "type": "object" + }, + "v1VsphereClusterConfigEntity": { + "properties": { + "controlPlaneEndpoint": { + "$ref": "#/definitions/v1ControlPlaneEndPoint", + "description": "The optional control plane endpoint, which can be an IP or FQDN" + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "items": { + "type": "string" + }, + "type": "array" + }, + "placement": { + "$ref": "#/definitions/v1VspherePlacementConfigEntity", + "description": "Placement configuration Placement config in ClusterConfig serve as default values for each MachinePool" + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "items": { + "type": "string" + }, + "type": "array" + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + }, + "required": [ + "placement" + ], + "type": "object" + }, + "v1VsphereComputeCluster": { + "description": "Vsphere compute cluster", + "properties": { + "datastores": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "name": { + "type": "string" + }, + "networks": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "resourcePools": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1VsphereComputeClusterResources": { + "description": "Datacenter and its resources like datastore, resoucepool, folders", + "properties": { + "computecluster": { + "$ref": "#/definitions/v1VsphereComputeCluster" + }, + "datacenter": { + "description": "Name of the datacenter", + "type": "string" + } + }, + "type": "object" + }, + "v1VsphereDatacenter": { + "description": "List of Datacenter with computeclusters", + "properties": { + "computeclusters": { + "description": "List of the VSphere compute clusters in datacenter", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "datacenter": { + "description": "name of the datacenter of the VSphere", + "type": "string" + }, + "folders": { + "description": "List of the VSphere folders in datacenter", + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1VsphereDatacenters": { + "description": "List of Datacenters with computeclusters", + "properties": { + "items": { + "description": "List of associated datacenters", + "items": { + "$ref": "#/definitions/v1VsphereDatacenter" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1VsphereDnsMapping": { + "description": "VSphere DNS Mapping", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1VsphereDnsMappingSpec" + } + }, + "type": "object" + }, + "v1VsphereDnsMappingSpec": { + "description": "VSphere DNS Mapping Spec", + "properties": { + "datacenter": { + "description": "VSphere datacenter name", + "type": "string" + }, + "dnsName": { + "description": "VSphere DNS name", + "type": "string" + }, + "network": { + "description": "VSphere network name", + "type": "string" + }, + "networkUrl": { + "description": "VSphere network URL", + "readOnly": true, + "type": "string" + }, + "privateGatewayUid": { + "description": "VSphere private gateway uid", + "type": "string" + } + }, + "required": [ + "privateGatewayUid", + "datacenter", + "network", + "dnsName" + ], + "type": "object" + }, + "v1VsphereDnsMappings": { + "properties": { + "items": { + "description": "List of vSphere DNS mapping", + "items": { + "$ref": "#/definitions/v1VsphereDnsMapping" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1VsphereEnv": { + "description": "Vsphere environment entity", + "properties": { + "version": { + "description": "Version of vsphere environment", + "type": "string" + } + }, + "type": "object" + }, + "v1VsphereImage": { + "description": "A generated Image should always be a template which resides inside vsphere Will not generate a OVA file out of the image OVA can be used as a base input of the os pack, that's internal to the pack", + "properties": { + "fullPath": { + "description": "full path of the image template location it contains datacenter/folder/templatename etc eg: /mydc/vm/template/spectro/workerpool-1-centos", + "type": "string" + }, + "state": { + "type": "string" + } + }, + "type": "object" + }, + "v1VsphereInstanceType": { + "properties": { + "diskGiB": { + "description": "DiskGiB is the size of a virtual machine's disk, in GiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "format": "int32", + "type": "integer" + }, + "memoryMiB": { + "description": "MemoryMiB is the size of a virtual machine's memory, in MiB. Defaults to the analogue property value in the template from which this machine is cloned.", + "format": "int64", + "type": "integer" + }, + "numCPUs": { + "description": "NumCPUs is the number of virtual processors in a virtual machine. Defaults to the analogue property value in the template from which this machine is cloned.", + "format": "int32", + "type": "integer" + } + }, + "required": [ + "numCPUs", + "memoryMiB", + "diskGiB" + ], + "type": "object" + }, + "v1VsphereMachine": { + "description": "vSphere cloud VM definition", + "properties": { + "apiVersion": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1VsphereMachineSpec" + }, + "status": { + "$ref": "#/definitions/v1CloudMachineStatus" + } + }, + "type": "object" + }, + "v1VsphereMachinePoolCloudConfigEntity": { + "properties": { + "instanceType": { + "$ref": "#/definitions/v1VsphereInstanceType" + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "items": { + "$ref": "#/definitions/v1VspherePlacementConfigEntity" + }, + "type": "array" + } + } + }, + "v1VsphereMachinePoolConfig": { + "properties": { + "additionalLabels": { + "additionalProperties": { + "type": "string" + }, + "description": "additionalLabels", + "type": "object" + }, + "additionalTags": { + "additionalProperties": { + "type": "string" + }, + "description": "AdditionalTags is an optional set of tags to add to resources managed by the provider, in addition to the ones added by default. For eg., tags for EKS nodeGroup or EKS NodegroupIAMRole", + "type": "object" + }, + "instanceType": { + "$ref": "#/definitions/v1VsphereInstanceType", + "description": "InstanceType defines the required CPU, Memory, Storage" + }, + "isControlPlane": { + "description": "whether this pool is for control plane", + "type": "boolean", + "x-omitempty": false + }, + "labels": { + "description": "labels for this pool, example: control-plane/worker, gpu, windows", + "items": { + "type": "string" + }, + "type": "array" + }, + "machinePoolProperties": { + "$ref": "#/definitions/v1MachinePoolProperties" + }, + "maxSize": { + "description": "max size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "minSize": { + "description": "min size of the pool, for scaling", + "format": "int32", + "type": "integer" + }, + "name": { + "type": "string" + }, + "nodeRepaveInterval": { + "description": "Minimum number of seconds a node should be Ready, before the next node is selected for repave. Applicable only for workerpools in infrastructure cluster", + "format": "int32", + "type": "integer" + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "items": { + "$ref": "#/definitions/v1VspherePlacementConfig" + }, + "type": "array" + }, + "size": { + "description": "size of the pool, number of machines", + "format": "int32", + "type": "integer" + }, + "taints": { + "description": "control plane or worker taints", + "items": { + "$ref": "#/definitions/v1Taint" + }, + "type": "array", + "uniqueItems": true + }, + "updateStrategy": { + "$ref": "#/definitions/v1UpdateStrategy", + "description": "rolling update strategy for this machinepool if not specified, will use ScaleOut" + }, + "useControlPlaneAsWorker": { + "description": "if IsControlPlane==true \u0026\u0026 useControlPlaneAsWorker==true, then will remove control plane taint this will not be used for worker pools", + "type": "boolean", + "x-omitempty": false + } + }, + "required": [ + "isControlPlane", + "instanceType" + ], + "type": "object" + }, + "v1VsphereMachinePoolConfigEntity": { + "properties": { + "cloudConfig": { + "$ref": "#/definitions/v1VsphereMachinePoolCloudConfigEntity" + }, + "poolConfig": { + "$ref": "#/definitions/v1MachinePoolConfigEntity" + } + }, + "required": [ + "cloudConfig" + ], + "type": "object" + }, + "v1VsphereMachineSpec": { + "description": "vSphere cloud VM definition spec", + "properties": { + "images": { + "items": { + "$ref": "#/definitions/v1VsphereImage" + }, + "type": "array" + }, + "instanceType": { + "$ref": "#/definitions/v1VsphereInstanceType" + }, + "nics": { + "items": { + "$ref": "#/definitions/v1VsphereNic" + }, + "type": "array" + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "items": { + "type": "string" + }, + "type": "array" + }, + "placement": { + "$ref": "#/definitions/v1VspherePlacementConfig", + "description": "Placement configuration" + }, + "vcenterServer": { + "description": "VcenterServer is the address of the vSphere endpoint", + "type": "string" + } + }, + "required": [ + "vcenterServer", + "nics", + "placement" + ], + "type": "object" + }, + "v1VsphereMachines": { + "description": "vSphere machine list", + "properties": { + "items": { + "items": { + "$ref": "#/definitions/v1VsphereMachine" + }, + "type": "array", + "uniqueItems": true + }, + "listmeta": { + "$ref": "#/definitions/v1ListMetaData" + } + }, + "required": [ + "items" + ], + "type": "object" + }, + "v1VsphereNetworkConfig": { + "properties": { + "ipPool": { + "$ref": "#/definitions/v1IPPool", + "description": "when staticIP=true, need to provide IPPool" + }, + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolRef": { + "$ref": "#/definitions/v1ObjectReference", + "description": "ParentPoolRef reference to the ParentPool which allocates IPs for this IPPool" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + }, + "required": [ + "networkName" + ], + "type": "object" + }, + "v1VsphereNetworkConfigEntity": { + "properties": { + "networkName": { + "description": "NetworkName is the name of the network in which VMs are created/located.", + "type": "string" + }, + "parentPoolUid": { + "description": "ParentPoolRef Uid to the ParentPool which allocates IPs for this IPPool", + "type": "string" + }, + "staticIp": { + "description": "support dhcp or static IP, if false, use DHCP", + "type": "boolean" + } + }, + "required": [ + "networkName" + ], + "type": "object" + }, + "v1VsphereNic": { + "description": "vSphere network interface", + "properties": { + "index": { + "format": "int8", + "type": "integer" + }, + "macAddress": { + "type": "string" + }, + "networkName": { + "type": "string" + }, + "privateIPs": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "networkName" + ], + "type": "object" + }, + "v1VsphereOverlordClusterConfigEntity": { + "properties": { + "controlPlaneEndpoint": { + "$ref": "#/definitions/v1ControlPlaneEndPoint", + "description": "The optional control plane endpoint, which can be an IP or FQDN" + }, + "ntpServers": { + "description": "NTPServers is a list of NTP servers to use instead of the machine image's default NTP server list.", + "items": { + "type": "string" + }, + "type": "array" + }, + "placements": { + "description": "Placements configuration Placements If defined, will replace default values defined in VsphereClusterConfig Array means one MachinePool can span across multiple vsphere compute cluster", + "items": { + "$ref": "#/definitions/v1VspherePlacementConfigEntity" + }, + "type": "array" + }, + "sshKeys": { + "description": "SSHKeys specifies a list of ssh authorized keys for the 'spectro' user", + "items": { + "type": "string" + }, + "type": "array" + }, + "staticIp": { + "description": "whether this cluster should use dhcp or static IP, if false, use DHCP if this is set, then all machinepools should have staticIP with provided IPPool adding this as an additional standalone flag without relating to placement.Nework main reason is to enable more validation for placement.Network.StaticIP which should come together with valid Network.IPPool and Network.Name", + "type": "boolean" + } + }, + "type": "object" + }, + "v1VspherePlacementConfig": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "$ref": "#/definitions/v1VsphereNetworkConfig", + "description": "network info" + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + }, + "type": "object" + }, + "v1VspherePlacementConfigEntity": { + "description": "Both ClusterConfig and MachinePoolConfig will have PlacementConfig MachinePoolconfig.Placements will overwrite values defined in ClusterConfig Currently the convention is: Datacenter / Folder / ImageTemplateFolder / Network should be defined at ClusterConfig Cluster / ResourcePool / Datastore / Network is defined at MachinePool ClusterConfig Network should only indicate use DHCP or not MachinePool Network should contain the actual network and IPPool", + "properties": { + "cluster": { + "description": "Cluster is the computecluster in vsphere", + "type": "string" + }, + "datacenter": { + "description": "Datacenter is the name or inventory path of the datacenter where this machine's VM is created/located.", + "type": "string" + }, + "datastore": { + "description": "Datastore is the datastore in which VMs are created/located.", + "type": "string" + }, + "folder": { + "description": "Folder is the folder in which VMs are created/located.", + "type": "string" + }, + "imageTemplateFolder": { + "description": "ImageTemplateFolder is the folder in which VMs templates are created/located. if empty will use default value spectro-templates", + "type": "string" + }, + "network": { + "$ref": "#/definitions/v1VsphereNetworkConfigEntity", + "description": "network info" + }, + "resourcePool": { + "description": "ResourcePool is the resource pool within the above computecluster Cluster", + "type": "string" + }, + "storagePolicyName": { + "description": "StoragePolicyName of the storage policy to use with this Virtual Machine", + "type": "string" + }, + "uid": { + "description": "UID for this placement", + "type": "string" + } + }, + "type": "object" + }, + "v1Workspace": { + "description": "Workspace information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1WorkspaceSpec" + }, + "status": { + "$ref": "#/definitions/v1WorkspaceStatus" + } + } + }, + "v1WorkspaceBackup": { + "description": "Workspace backup", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1WorkspaceBackupSpec" + }, + "status": { + "$ref": "#/definitions/v1WorkspaceBackupStatus" + } + } + }, + "v1WorkspaceBackupClusterRef": { + "description": "Workspace backup cluster ref", + "properties": { + "backupName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + }, + "v1WorkspaceBackupConfig": { + "description": "Workspace backup config", + "properties": { + "backupConfig": { + "$ref": "#/definitions/v1ClusterBackupConfig" + }, + "clusterUids": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "includeAllClusters": { + "type": "boolean" + } + } + }, + "v1WorkspaceBackupConfigEntity": { + "description": "Cluster backup config", + "properties": { + "backupConfig": { + "$ref": "#/definitions/v1ClusterBackupConfig" + }, + "clusterUids": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "includeAllClusters": { + "type": "boolean" + } + } + }, + "v1WorkspaceBackupDeleteEntity": { + "description": "Cluster backup delete config", + "properties": { + "clusterConfigs": { + "items": { + "$ref": "#/definitions/v1WorkspaceBackupClusterRef" + }, + "type": "array", + "uniqueItems": true + }, + "requestUid": { + "type": "string" + } + } + }, + "v1WorkspaceBackupSpec": { + "description": "Workspace backup spec", + "properties": { + "config": { + "$ref": "#/definitions/v1WorkspaceBackupConfig" + }, + "workspaceUid": { + "type": "string" + } + } + }, + "v1WorkspaceBackupState": { + "description": "Workspace backup state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1WorkspaceBackupStatus": { + "description": "Workspace backup status", + "properties": { + "workspaceBackupStatuses": { + "items": { + "$ref": "#/definitions/v1WorkspaceBackupStatusMeta" + }, + "type": "array" + } + } + }, + "v1WorkspaceBackupStatusConfig": { + "description": "Workspace backup status config", + "properties": { + "backupName": { + "type": "string" + }, + "durationInHours": { + "format": "int64", + "type": "number" + }, + "includeAllDisks": { + "type": "boolean" + }, + "includeClusterResources": { + "type": "boolean" + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1WorkspaceBackupStatusMeta": { + "description": "Workspace backup status meta", + "properties": { + "actor": { + "$ref": "#/definitions/v1ClusterFeatureActor" + }, + "requestUid": { + "type": "string" + }, + "workspaceBackupConfig": { + "$ref": "#/definitions/v1WorkspaceClusterBackupConfig" + } + } + }, + "v1WorkspaceClusterBackupConfig": { + "description": "Workspace cluster backup config", + "properties": { + "backupName": { + "type": "string" + }, + "backupState": { + "$ref": "#/definitions/v1WorkspaceBackupState" + }, + "backupTime": { + "$ref": "#/definitions/v1Time" + }, + "clusterBackupRefs": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterBackupResponse" + }, + "type": "array" + }, + "config": { + "$ref": "#/definitions/v1WorkspaceBackupStatusConfig" + }, + "requestTime": { + "$ref": "#/definitions/v1Time" + } + } + }, + "v1WorkspaceClusterBackupResponse": { + "description": "Workspace cluster backup response", + "properties": { + "backupStatusMeta": { + "$ref": "#/definitions/v1BackupStatusMeta" + }, + "backupUid": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + }, + "v1WorkspaceClusterNamespace": { + "description": "Workspace cluster namespace", + "properties": { + "image": { + "$ref": "#/definitions/v1WorkspaceNamespaceImage" + }, + "isRegex": { + "type": "boolean", + "x-omitempty": false + }, + "name": { + "type": "string" + }, + "namespaceResourceAllocation": { + "$ref": "#/definitions/v1WorkspaceNamespaceResourceAllocation" + } + } + }, + "v1WorkspaceClusterNamespacesEntity": { + "description": "Workspace cluster namespaces update entity", + "properties": { + "clusterNamespaces": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterNamespace" + }, + "type": "array", + "uniqueItems": true + }, + "clusterRefs": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterRef" + }, + "type": "array", + "uniqueItems": true + }, + "quota": { + "$ref": "#/definitions/v1WorkspaceQuota" + } + } + }, + "v1WorkspaceClusterRef": { + "description": "Workspace cluster reference", + "properties": { + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + } + } + }, + "v1WorkspaceClusterRestoreConfig": { + "description": "Workspace cluster restore config", + "properties": { + "backupName": { + "type": "string" + }, + "clusterRestoreRefs": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterRestoreResponse" + }, + "type": "array" + }, + "restoreState": { + "$ref": "#/definitions/v1WorkspaceRestoreState" + }, + "restoreTime": { + "$ref": "#/definitions/v1Time" + } + } + }, + "v1WorkspaceClusterRestoreResponse": { + "description": "Workspace cluster restore response", + "properties": { + "backupName": { + "type": "string" + }, + "clusterName": { + "type": "string" + }, + "clusterUid": { + "type": "string" + }, + "restoreStatusMeta": { + "$ref": "#/definitions/v1WorkspaceClusterRestoreState" + }, + "restoreUid": { + "type": "string" + } + } + }, + "v1WorkspaceClusterRestoreState": { + "description": "Workspace cluster restore state", + "properties": { + "msg": { + "type": "string" + }, + "restoreTime": { + "$ref": "#/definitions/v1Time" + }, + "state": { + "type": "string" + } + } + }, + "v1WorkspaceClusterWorkloadCronJobs": { + "description": "Workspace cluster workload cronjobs summary", + "properties": { + "cronjobs": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadCronJob" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1RelatedObject" + } + }, + "type": "object" + }, + "v1WorkspaceClusterWorkloadDaemonSets": { + "description": "Workspace cluster workload daemonsets summary", + "properties": { + "daemonSets": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadDaemonSet" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1RelatedObject" + } + }, + "type": "object" + }, + "v1WorkspaceClusterWorkloadDeployments": { + "description": "Workspace cluster workload deployments summary", + "properties": { + "deployments": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadDeployment" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1RelatedObject" + } + }, + "type": "object" + }, + "v1WorkspaceClusterWorkloadJobs": { + "description": "Workspace cluster workload jobs summary", + "properties": { + "jobs": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadJob" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1RelatedObject" + } + }, + "type": "object" + }, + "v1WorkspaceClusterWorkloadNamespaces": { + "description": "Workspace cluster workload namespaces summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1RelatedObject" + }, + "namespaces": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadNamespace" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1WorkspaceClusterWorkloadPods": { + "description": "Workspace cluster workload pods summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1RelatedObject" + }, + "pods": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadPod" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1WorkspaceClusterWorkloadRoleBindings": { + "description": "Workspace cluster workload rbac bindings summary", + "properties": { + "bindings": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadRoleBinding" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1RelatedObject" + } + }, + "type": "object" + }, + "v1WorkspaceClusterWorkloadStatefulSets": { + "description": "Workspace cluster workload statefulsets summary", + "properties": { + "metadata": { + "$ref": "#/definitions/v1RelatedObject" + }, + "statefulSets": { + "items": { + "$ref": "#/definitions/v1ClusterWorkloadStatefulSet" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1WorkspaceClustersWorkloadCronJobs": { + "description": "Workspace clusters workload cronjobs summary", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterWorkloadCronJobs" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + } + }, + "type": "object" + }, + "v1WorkspaceClustersWorkloadDaemonSets": { + "description": "Workspace clusters workload statefulsets summary", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterWorkloadDaemonSets" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + } + }, + "type": "object" + }, + "v1WorkspaceClustersWorkloadDeployments": { + "description": "Workspace clusters workload deployments summary", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterWorkloadDeployments" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + } + }, + "type": "object" + }, + "v1WorkspaceClustersWorkloadJobs": { + "description": "Workspace clusters workload jobs summary", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterWorkloadJobs" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + } + }, + "type": "object" + }, + "v1WorkspaceClustersWorkloadNamespaces": { + "description": "Workspace clusters workload namespaces summary", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterWorkloadNamespaces" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + } + }, + "type": "object" + }, + "v1WorkspaceClustersWorkloadPods": { + "description": "Workspace clusters workload pods summary", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterWorkloadPods" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + } + }, + "type": "object" + }, + "v1WorkspaceClustersWorkloadRoleBindings": { + "description": "Workspace clusters workload rbac bindings summary", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterWorkloadRoleBindings" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + } + }, + "type": "object" + }, + "v1WorkspaceClustersWorkloadStatefulSets": { + "description": "Workspace clusters workload statefulsets summary", + "properties": { + "clusters": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterWorkloadStatefulSets" + }, + "type": "array" + }, + "metadata": { + "$ref": "#/definitions/v1ObjectMetaInputEntity" + } + }, + "type": "object" + }, + "v1WorkspaceEntity": { + "description": "Workspace information", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1WorkspaceSpec" + } + } + }, + "v1WorkspaceError": { + "description": "Workspace error", + "properties": { + "clusterUid": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "name": { + "type": "string" + }, + "resourceType": { + "type": "string" + } + } + }, + "v1WorkspaceNamespaceImage": { + "description": "Workspace namespace image information", + "properties": { + "blackListedImages": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1WorkspaceNamespaceResourceAllocation": { + "description": "Workspace namespace resource allocation", + "properties": { + "clusterResourceAllocations": { + "items": { + "$ref": "#/definitions/v1ClusterResourceAllocation" + }, + "type": "array", + "uniqueItems": true + }, + "defaultResourceAllocation": { + "$ref": "#/definitions/v1WorkspaceResourceAllocation" + } + } + }, + "v1WorkspacePolicies": { + "description": "Workspace policies", + "properties": { + "backupPolicy": { + "$ref": "#/definitions/v1WorkspaceBackupConfigEntity" + } + } + }, + "v1WorkspaceQuota": { + "description": "Workspace resource quota", + "properties": { + "resourceAllocation": { + "$ref": "#/definitions/v1WorkspaceResourceAllocation" + } + } + }, + "v1WorkspaceResourceAllocation": { + "description": "Workspace resource allocation", + "properties": { + "cpuCores": { + "minimum": -1, + "type": "number", + "x-omitempty": false + }, + "memoryMiB": { + "minimum": -1, + "type": "number", + "x-omitempty": false + } + } + }, + "v1WorkspaceResourceAllocationsEntity": { + "description": "Workspace resource allocation update entity", + "properties": { + "clusterNamespaces": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterNamespace" + }, + "type": "array", + "uniqueItems": true + }, + "clusterRefs": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterRef" + }, + "type": "array", + "uniqueItems": true + }, + "quota": { + "$ref": "#/definitions/v1WorkspaceQuota" + } + } + }, + "v1WorkspaceRestore": { + "description": "Workspace restore", + "properties": { + "metadata": { + "$ref": "#/definitions/v1ObjectMeta" + }, + "spec": { + "$ref": "#/definitions/v1WorkspaceRestoreSpec" + }, + "status": { + "$ref": "#/definitions/v1WorkspaceRestoreStatus" + } + } + }, + "v1WorkspaceRestoreConfig": { + "description": "Workspace cluster restore config", + "properties": { + "backupName": { + "type": "string" + }, + "includeClusterResources": { + "type": "boolean" + }, + "includeNamespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "preserveNodePorts": { + "type": "boolean" + }, + "restorePVs": { + "type": "boolean" + }, + "sourceClusterUid": { + "type": "string" + } + }, + "required": [ + "backupName", + "sourceClusterUid" + ] + }, + "v1WorkspaceRestoreConfigEntity": { + "description": "Cluster restore config", + "properties": { + "backupRequestUid": { + "type": "string" + }, + "restoreConfigs": { + "items": { + "$ref": "#/definitions/v1WorkspaceRestoreConfig" + }, + "type": "array", + "uniqueItems": true + } + }, + "required": [ + "backupRequestUid" + ] + }, + "v1WorkspaceRestoreSpec": { + "description": "Workspace restore spec", + "properties": { + "workspaceUid": { + "type": "string" + } + } + }, + "v1WorkspaceRestoreState": { + "description": "Workspace restore state", + "properties": { + "deleteState": { + "type": "string" + }, + "state": { + "type": "string" + } + } + }, + "v1WorkspaceRestoreStatus": { + "description": "Workspace restore status", + "properties": { + "workspaceRestoreStatuses": { + "items": { + "$ref": "#/definitions/v1WorkspaceRestoreStatusMeta" + }, + "type": "array" + } + } + }, + "v1WorkspaceRestoreStatusMeta": { + "description": "Workspace restore status meta", + "properties": { + "actor": { + "$ref": "#/definitions/v1ClusterFeatureActor" + }, + "requestUid": { + "type": "string" + }, + "workspaceRestoreConfig": { + "$ref": "#/definitions/v1WorkspaceClusterRestoreConfig" + } + } + }, + "v1WorkspaceRolesPatch": { + "properties": { + "roles": { + "items": { + "type": "string" + }, + "type": "array" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1WorkspaceRolesUidSummary": { + "properties": { + "name": { + "type": "string" + }, + "uid": { + "type": "string" + } + }, + "type": "object" + }, + "v1WorkspaceScopeRoles": { + "description": "List all workspaces with the roles assigned to the users", + "properties": { + "projects": { + "items": { + "$ref": "#/definitions/v1ProjectsWorkspaces" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1WorkspaceSpec": { + "description": "Workspace specifications", + "properties": { + "clusterNamespaces": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterNamespace" + }, + "type": "array", + "uniqueItems": true + }, + "clusterRbacs": { + "items": { + "$ref": "#/definitions/v1ClusterRbac" + }, + "type": "array", + "uniqueItems": true + }, + "clusterRefs": { + "items": { + "$ref": "#/definitions/v1WorkspaceClusterRef" + }, + "type": "array", + "uniqueItems": true + }, + "policies": { + "$ref": "#/definitions/v1WorkspacePolicies" + }, + "quota": { + "$ref": "#/definitions/v1WorkspaceQuota" + } + } + }, + "v1WorkspaceStatus": { + "description": "Workspace status", + "properties": { + "errors": { + "items": { + "$ref": "#/definitions/v1WorkspaceError" + }, + "type": "array", + "uniqueItems": true + } + } + }, + "v1WorkspaceWorkloadsFilter": { + "description": "Workspace workloads filter", + "properties": { + "clusters": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + }, + "namespaces": { + "items": { + "type": "string" + }, + "type": "array", + "uniqueItems": true + } + }, + "type": "object" + }, + "v1WorkspaceWorkloadsSpec": { + "description": "Workspace workloads spec", + "properties": { + "filter": { + "$ref": "#/definitions/v1WorkspaceWorkloadsFilter" + } + }, + "type": "object" + }, + "v1WorkspacesRoles": { + "description": "Workspace users and their roles", + "properties": { + "inheritedRoles": { + "items": { + "$ref": "#/definitions/v1WorkspaceRolesUidSummary" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "roles": { + "items": { + "$ref": "#/definitions/v1WorkspaceRolesUidSummary" + }, + "type": "array" + }, + "uid": { + "type": "string" + } + } + }, + "v1WorkspacesRolesPatch": { + "properties": { + "workspaces": { + "items": { + "$ref": "#/definitions/v1WorkspaceRolesPatch" + }, + "type": "array" + } + }, + "type": "object" + }, + "v1YearlyUsage": { + "description": "Yearly usage object", + "properties": { + "billingPeriod": { + "$ref": "#/definitions/v1InvoiceBillingPeriod" + }, + "monthlyUsages": { + "description": "List of monthly usages", + "items": { + "$ref": "#/definitions/v1MonthlyUsage" + }, + "type": "array", + "uniqueItems": true + }, + "productUsages": { + "$ref": "#/definitions/v1ProductUsage" + } + } + }, + "v1ZoneEntity": { + "description": "Azure availability zone entity", + "properties": { + "id": { + "description": "Azure availability zone id", + "type": "string" + } + }, + "type": "object" + } + }, + "info": { + "title": "Palette APIs - 4.4", + "version": "v1" + }, + "paths": { + "/v1/apiKeys": { + "get": { + "operationId": "v1ApiKeysList", + "responses": { + "200": { + "description": "Retrieves a list of API keys", + "schema": { + "$ref": "#/definitions/v1ApiKeys" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of API keys", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1ApiKeysCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ApiKeyEntity" + } + } + ], + "responses": { + "201": { + "description": "APIKey Created successfully", + "schema": { + "$ref": "#/definitions/v1ApiKeyCreateResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create an API key", + "tags": [ + "v1" + ] + } + }, + "/v1/apiKeys/{uid}": { + "delete": { + "operationId": "v1ApiKeysUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified API key", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1ApiKeysUidGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1ApiKey" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified API key", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify API key uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1ApiKeysUidActiveState", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ApiKeyActiveState" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Activate or de-active the specified API key", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1ApiKeysUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ApiKeyUpdate" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the specified API key", + "tags": [ + "v1" + ] + } + }, + "/v1/apiKeys/{uid}/state": { + "parameters": [ + { + "description": "Specify API key uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ApiKeysUidState", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ApiKeyActiveState" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Revoke or re-activate the API key access", + "tags": [ + "v1" + ] + } + }, + "/v1/appDeployments": { + "post": { + "operationId": "v1AppDeploymentsVirtualClusterCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppDeploymentVirtualClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a application deployment in the virtual cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/appDeployments/clusterGroup": { + "post": { + "operationId": "v1AppDeploymentsClusterGroupCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppDeploymentClusterGroupEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a application deployment in one of virtual clusters in the cluster group", + "tags": [ + "v1" + ] + } + }, + "/v1/appDeployments/{uid}": { + "delete": { + "operationId": "v1AppDeploymentsUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified application deployment", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1AppDeploymentsUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AppDeployment" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified application deployment", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application deployment uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/appDeployments/{uid}/profile": { + "get": { + "operationId": "v1AppDeploymentsUidProfileGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AppDeploymentProfileSpec" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns profile of the specified application deployment", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application deployment uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1AppDeploymentsUidProfileUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppDeploymentProfileEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified application deployment profile", + "tags": [ + "v1" + ] + } + }, + "/v1/appDeployments/{uid}/profile/apply": { + "parameters": [ + { + "description": "Application deployment uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Application deployment notification uid", + "in": "query", + "name": "notify", + "type": "string" + } + ], + "patch": { + "operationId": "v1AppDeploymentsUidProfileApply", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Apply the application deployment profile updates", + "tags": [ + "v1" + ] + } + }, + "/v1/appDeployments/{uid}/profile/tiers/{tierUid}": { + "get": { + "operationId": "v1AppDeploymentsProfileTiersUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AppTier" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified application deployment profile tier information", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application deployment uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Application deployment tier uid", + "in": "path", + "name": "tierUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1AppDeploymentsProfileTiersUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppTierUpdateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified application deployment profile tier information", + "tags": [ + "v1" + ] + } + }, + "/v1/appDeployments/{uid}/profile/tiers/{tierUid}/manifests": { + "get": { + "operationId": "v1AppDeploymentsProfileTiersUidManifestsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AppTierManifests" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of manifests of the specified application deployment profile tier", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application deployment uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Application deployment tier uid", + "in": "path", + "name": "tierUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/appDeployments/{uid}/profile/tiers/{tierUid}/manifests/{manifestUid}": { + "get": { + "operationId": "v1AppDeploymentsProfileTiersManifestsUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Manifest" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified application deployment tier manifest information", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application deployment uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Application deployment tier uid", + "in": "path", + "name": "tierUid", + "required": true, + "type": "string" + }, + { + "description": "Application deployment tier manifest uid", + "in": "path", + "name": "manifestUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1AppDeploymentsProfileTiersManifestsUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ManifestRefUpdateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified application deployment tier manifest information", + "tags": [ + "v1" + ] + } + }, + "/v1/appDeployments/{uid}/profile/versions": { + "get": { + "operationId": "v1AppDeploymentsUidProfileVersionsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AppDeploymentProfileVersions" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of profile versions of the specified application deployment", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application deployment uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/appProfiles": { + "post": { + "operationId": "v1AppProfilesCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppProfileEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a application profile", + "tags": [ + "v1" + ] + } + }, + "/v1/appProfiles/macros": { + "get": { + "operationId": "v1AppProfilesMacrosList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of application profile macros", + "tags": [ + "v1" + ] + } + }, + "/v1/appProfiles/{uid}": { + "delete": { + "operationId": "v1AppProfilesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified application profile", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1AppProfilesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AppProfile" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified application profile", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1AppProfilesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppProfileEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified application profile", + "tags": [ + "v1" + ] + } + }, + "/v1/appProfiles/{uid}/clone": { + "parameters": [ + { + "description": "Application profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1AppProfilesUidClone", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppProfileCloneEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Clones the specified application profile", + "tags": [ + "v1" + ] + } + }, + "/v1/appProfiles/{uid}/clone/validate": { + "parameters": [ + { + "description": "Application profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1AppProfilesUidCloneValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppProfileCloneMetaInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates the specified application profile clone", + "tags": [ + "v1" + ] + } + }, + "/v1/appProfiles/{uid}/metadata": { + "parameters": [ + { + "description": "Application profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1AppProfilesUidMetadataUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppProfileMetaEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified application profile metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/appProfiles/{uid}/tiers": { + "get": { + "operationId": "v1AppProfilesUidTiersGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AppProfileTiers" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of tiers of the specified application profile", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1AppProfilesUidTiersPatch", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppTierPatchEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates app tier of the specified application profile", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1AppProfilesUidTiersCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppTierEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds tier to the specified application profile", + "tags": [ + "v1" + ] + } + }, + "/v1/appProfiles/{uid}/tiers/{tierUid}": { + "delete": { + "operationId": "v1AppProfilesUidTiersUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified application profile tier", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1AppProfilesUidTiersUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AppTier" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified application profile tier information", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Application profile tier uid", + "in": "path", + "name": "tierUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1AppProfilesUidTiersUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppTierUpdateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified application profile tier", + "tags": [ + "v1" + ] + } + }, + "/v1/appProfiles/{uid}/tiers/{tierUid}/manifests": { + "get": { + "operationId": "v1AppProfilesUidTiersUidManifestsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AppTierManifests" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of manifests of the specified application profile tier", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Application profile tier uid", + "in": "path", + "name": "tierUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1AppProfilesUidTiersUidManifestsCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ManifestInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds manifest to the specified application profile tier", + "tags": [ + "v1" + ] + } + }, + "/v1/appProfiles/{uid}/tiers/{tierUid}/manifests/{manifestUid}": { + "delete": { + "operationId": "v1AppProfilesUidTiersUidManifestsUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified application profile tier manifest", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1AppProfilesUidTiersUidManifestsUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Manifest" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified application profile tier manifest information", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Application profile tier uid", + "in": "path", + "name": "tierUid", + "required": true, + "type": "string" + }, + { + "description": "Application profile tier manifest uid", + "in": "path", + "name": "manifestUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1AppProfilesUidTiersUidManifestsUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ManifestRefUpdateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified application profile tier manifest information", + "tags": [ + "v1" + ] + } + }, + "/v1/appProfiles/{uid}/tiers/{tierUid}/resolvedValues": { + "get": { + "operationId": "v1AppProfilesUidTiersUidResolvedValuesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AppTierResolvedValues" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified application profile tier resolved values", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Application profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Application profile tier uid", + "in": "path", + "name": "tierUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/audits": { + "get": { + "operationId": "v1AuditsList", + "parameters": [ + { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "format": "date-time", + "in": "query", + "name": "startTime", + "type": "string" + }, + { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "format": "date-time", + "in": "query", + "name": "endTime", + "type": "string" + }, + { + "description": "Specify the user uid, to retrieve the specific user audit logs", + "in": "query", + "name": "userUid", + "type": "string" + }, + { + "description": "Specify the project uid, to retrieve the specific project audit logs", + "in": "query", + "name": "projectUid", + "type": "string" + }, + { + "description": "Specify the tenant uid, to retrieve the specific tenant audit logs", + "in": "query", + "name": "tenantUid", + "type": "string" + }, + { + "description": "Specify the resource name, to retrieve the specific resource audit logs", + "in": "query", + "name": "resourceKind", + "type": "string" + }, + { + "description": "Specify the resource uid, to retrieve the specific resource audit logs", + "in": "query", + "name": "resourceUid", + "type": "string" + }, + { + "enum": [ + "create", + "update", + "delete", + "publish", + "deploy" + ], + "in": "query", + "name": "actionType", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1Audits" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves the list of audit logs", + "tags": [ + "v1" + ] + } + }, + "/v1/audits/{uid}": { + "get": { + "operationId": "v1AuditsUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1Audit" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified audit log", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the audit uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/audits/{uid}/sysMsg": { + "get": { + "operationId": "v1AuditsUidGetSysMsg", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AuditSysMsg" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified system audit message", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the audit uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/audits/{uid}/userMsg": { + "parameters": [ + { + "description": "Specify the audit uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1AuditsUidMsgUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AuditMsgUpdate" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified user message for the specified audit", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/authenticate": { + "post": { + "description": "Creates a authentication request with the specified credentials", + "operationId": "v1Authenticate", + "parameters": [ + { + "default": true, + "description": "Describes a way to set cookie from backend.", + "in": "query", + "name": "setCookie", + "type": "boolean" + }, + { + "description": "Describes the credential details required for authentication", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1AuthLogin" + } + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1UserToken" + } + } + }, + "summary": "Authenticates the user for the specified crendentials", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/org": { + "get": { + "description": "Returns the allowed login method and information with the organization details", + "operationId": "v1AuthOrg", + "parameters": [ + { + "in": "query", + "name": "orgName", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1LoginResponse" + } + } + }, + "summary": "Returns the user organization details", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/org/{org}/oidc/callback": { + "get": { + "description": "Returns the Authorization token for the palette. This is called by the IDP as a callback url after IDP authenticates the user with its server.", + "operationId": "V1OidcCallback", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1UserToken" + } + } + }, + "summary": "Idp authorization code callback", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Organization name", + "in": "path", + "name": "org", + "required": true, + "type": "string" + }, + { + "description": "Describes temporary and very short lived code sent by IDP to validate the token", + "in": "query", + "name": "code", + "type": "string" + }, + { + "description": "Describes a state to validate and associate request and response", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Describes a error code in case the IDP is not able to validate and authenticates the user", + "in": "query", + "name": "error", + "type": "string" + }, + { + "description": "Describes a error in case the IDP is not able to validate and authenticates the user", + "in": "query", + "name": "error_description", + "type": "string" + } + ] + }, + "/v1/auth/org/{org}/oidc/logout": { + "get": { + "description": "Returns No Content. Works as a callback url after the IDP logout from their server.", + "operationId": "V1OidcLogout", + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "summary": "Identity provider logout url for the Oidc", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Organization name", + "in": "path", + "name": "org", + "required": true, + "type": "string" + }, + { + "description": "Describes a state to validate and associate request and response", + "in": "query", + "name": "state", + "type": "string" + } + ] + }, + "/v1/auth/org/{org}/saml/callback": { + "parameters": [ + { + "description": "Organization name", + "in": "path", + "name": "org", + "required": true, + "type": "string" + }, + { + "description": "Deprecated.", + "in": "query", + "name": "authToken", + "type": "string" + } + ], + "post": { + "consumes": [ + "application/x-www-form-urlencoded" + ], + "description": "Returns the Authorization token for the palette. This is called by the SAML based IDP as a callback url after IDP authenticates the user with its server.", + "operationId": "V1SamlCallback", + "parameters": [ + { + "description": "Describe the SAML compliant response sent by IDP which will be validated by Palette", + "in": "formData", + "name": "SAMLResponse", + "type": "string" + }, + { + "description": "Describes a state to validate and associate request and response", + "in": "formData", + "name": "RelayState", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1UserToken" + } + } + }, + "summary": "Identity provider callback url for the SMAL authentication", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/org/{org}/saml/logout": { + "parameters": [ + { + "description": "Organization name", + "in": "path", + "name": "org", + "required": true, + "type": "string" + }, + { + "description": "Deprecated.", + "in": "query", + "name": "authToken", + "type": "string" + } + ], + "post": { + "consumes": [ + "application/x-www-form-urlencoded" + ], + "description": "Returns No Content. Works as a callback url after the IDP logout from their server.", + "operationId": "V1SamlLogout", + "parameters": [ + { + "description": "Describe the SAML compliant response sent by IDP which will be validated by Palette to perform logout.", + "in": "formData", + "name": "SAMLResponse", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "summary": "Identity provider logout url for the SMAL", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/orgs": { + "get": { + "description": "Returns a list of user's organizations details and login methods", + "operationId": "V1AuthOrgs", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Organizations" + } + } + }, + "summary": "Returns a list of user's organizations", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/password/{passwordToken}/activate": { + "parameters": [ + { + "description": "Describes the expirable password token for the user to be used for authentication of user", + "in": "path", + "name": "passwordToken", + "required": true, + "type": "string" + } + ], + "patch": { + "description": "Updates and Activates user password with the help of password token", + "operationId": "v1PasswordActivate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "password": { + "description": "Describes the new password for the user", + "format": "password", + "type": "string" + } + }, + "required": [ + "password" + ], + "type": "object" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "summary": "Updates and Activates the specified user password using the password token", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/password/{passwordToken}/reset": { + "parameters": [ + { + "description": "Describes the expirable password token for the user to be used for authentication of user", + "in": "path", + "name": "passwordToken", + "required": true, + "type": "string" + } + ], + "patch": { + "description": "Updates the new user password with the help of password token", + "operationId": "v1PasswordReset", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "password": { + "description": "Describes the new password for the user", + "format": "password", + "type": "string" + } + }, + "required": [ + "password" + ], + "type": "object" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "summary": "Resets the user password using the password token", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/refresh/{token}": { + "get": { + "description": "Returns a new token within refresh timeout and same session id is maintained", + "operationId": "v1AuthRefresh", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1UserToken" + } + } + }, + "summary": "Refreshes authentication token", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "default": true, + "description": "Describes a way to set cookie from backend.", + "in": "query", + "name": "setCookie", + "type": "boolean" + }, + { + "description": "Non expired Authorization token", + "in": "path", + "name": "token", + "required": true, + "type": "string" + } + ] + }, + "/v1/auth/sso/idps": { + "get": { + "description": "Returns a list of predefined Identity Provider (IDP)", + "operationId": "V1SsoIdps", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1IdentityProviders" + } + } + }, + "summary": "Returns a list of predefined Identity Provider (IDP)", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/sso/logins": { + "get": { + "description": "Returns a list of supported sso logins and their authentication mechanism", + "operationId": "V1SsoLogins", + "parameters": [ + { + "in": "query", + "name": "org", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1SsoLogins" + } + } + }, + "summary": "Returns a list of supported sso logins", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/sso/providers": { + "get": { + "description": "Returns a list of supported sso auth providers", + "operationId": "V1AuthSsoProviders", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1SsoLogins" + } + } + }, + "summary": "Returns a list of supported sso auth providers", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/sso/{ssoApp}/callback": { + "get": { + "description": "Returns Authorization token. Works as a callback url for the system defined sso apps", + "operationId": "V1SsoCallback", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1UserToken" + } + } + }, + "summary": "Returns Authorization token. Works as a callback url for the system defined sso apps", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Describes the sso app use to login into the system", + "in": "path", + "name": "ssoApp", + "required": true, + "type": "string" + }, + { + "description": "Describes temporary and very short lived code sent by IDP to validate the token", + "in": "query", + "name": "code", + "type": "string" + }, + { + "description": "Describes a state to validate and associate request and response", + "in": "query", + "name": "state", + "type": "string" + }, + { + "description": "Describes a error code in case the IDP is not able to validate and authenticates the user", + "in": "query", + "name": "error", + "type": "string" + }, + { + "description": "Describes a error in case the IDP is not able to validate and authenticates the user", + "in": "query", + "name": "error_description", + "type": "string" + } + ] + }, + "/v1/auth/user/org/forgot": { + "get": { + "description": "Returns No Content. Sends the user organization(s) information via email", + "operationId": "V1AuthUserOrgForgot", + "parameters": [ + { + "description": "Describes user's email id for sending organzation(s) details via email.", + "in": "query", + "name": "emailId", + "required": true, + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "summary": "Returns No Content. Sends the user organization information via email", + "tags": [ + "v1" + ] + } + }, + "/v1/auth/user/password/reset": { + "post": { + "description": "Creates request to reset password via email. Password reset email will be sent to the user. Sends 204 No Content.", + "operationId": "v1PasswordResetRequest", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "emailId": { + "description": "Describes email if for which password reset email has to be sent", + "type": "string" + } + }, + "required": [ + "emailId" + ], + "type": "object" + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "summary": "Creates request to reset password via email", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/aws": { + "get": { + "operationId": "v1CloudAccountsAwsList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cloud account items", + "schema": { + "$ref": "#/definitions/v1AwsAccounts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AWS cloud accounts", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1CloudAccountsAwsCreate", + "parameters": [ + { + "description": "Request payload to validate AWS cloud account", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AwsAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an AWS cloud account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/aws/{uid}": { + "delete": { + "operationId": "v1CloudAccountsAwsDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified AWS account", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudAccountsAwsGet", + "parameters": [ + { + "default": false, + "in": "query", + "name": "assumeCredentials", + "type": "boolean" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AwsAccount" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified AWS account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "AWS cloud account uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudAccountsAwsUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AwsAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified AWS account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/azure": { + "get": { + "operationId": "v1CloudAccountsAzureList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of azure cloud account items", + "schema": { + "$ref": "#/definitions/v1AzureAccounts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of azure cloud accounts", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1CloudAccountsAzureCreate", + "parameters": [ + { + "description": "Request payload to validate Azure cloud account", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create azure cloud account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/azure/{uid}": { + "delete": { + "operationId": "v1CloudAccountsAzureDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified azure account", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudAccountsAzureGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AzureAccount" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified azure cloud account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Azure cloud account uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudAccountsAzureUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified azure account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/cloudTypes/{cloudType}": { + "get": { + "operationId": "v1CloudAccountsCustomList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cloud account by specified cloud type items", + "schema": { + "$ref": "#/definitions/v1CustomAccounts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cloud accounts by cloud type", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Custom cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudAccountsCustomCreate", + "parameters": [ + { + "description": "Request payload to validate Custom cloud account", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1CustomAccountEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an cloud account of specific cloud type", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/cloudTypes/{cloudType}/{uid}": { + "delete": { + "operationId": "v1CloudAccountsCustomDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified account by cloud type", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudAccountsCustomGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1CustomAccount" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified account by cloud type", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Custom cloud account uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Custom cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudAccountsCustomUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1CustomAccountEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified account by cloud type", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/gcp": { + "get": { + "operationId": "v1CloudAccountsGcpList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of gcp cloud account items", + "schema": { + "$ref": "#/definitions/v1GcpAccounts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of gcp cloud accounts", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1CloudAccountsGcpCreate", + "parameters": [ + { + "description": "Request payload to validate GCP cloud account", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpAccountEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a GCP cloud account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/gcp/{uid}": { + "delete": { + "operationId": "v1CloudAccountsGcpDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified GCP account", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudAccountsGcpGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1GcpAccount" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified GCP cloud account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "GCP cloud account uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudAccountsGcpUpdate", + "parameters": [ + { + "description": "Request payload to validate GCP cloud account", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpAccountEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified GCP account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/maas": { + "get": { + "operationId": "v1CloudAccountsMaasList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cloud account items", + "schema": { + "$ref": "#/definitions/v1MaasAccounts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Maas cloud accounts", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1CloudAccountsMaasCreate", + "parameters": [ + { + "description": "Request payload to validate Maas cloud account", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1MaasAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an Maas cloud account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/maas/{uid}": { + "delete": { + "operationId": "v1CloudAccountsMaasDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified Maas account", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudAccountsMaasGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1MaasAccount" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Maas account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Maas cloud account uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1CloudAccountsMaasPatch", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1CloudAccountsPatch" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Patches the specified CloudAccount Maas", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1CloudAccountsMaasUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1MaasAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified Maas account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/maas/{uid}/properties/azs": { + "get": { + "operationId": "v1MaasAccountsUidAzs", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1MaasZones" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the maas azs for a given account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/maas/{uid}/properties/domains": { + "get": { + "operationId": "v1MaasAccountsUidDomains", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1MaasDomains" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the maas domains for a given account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/maas/{uid}/properties/resourcePools": { + "get": { + "operationId": "v1MaasAccountsUidPools", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1MaasPools" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the maas pools for a given account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/maas/{uid}/properties/subnets": { + "get": { + "operationId": "v1MaasAccountsUidSubnets", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1MaasSubnets" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the maas subnets for a given account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/maas/{uid}/properties/tags": { + "get": { + "operationId": "v1MaasAccountsUidTags", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1MaasTags" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the maas tags for a given account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/openstack": { + "get": { + "operationId": "v1CloudAccountsOpenStackList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cloud account items", + "schema": { + "$ref": "#/definitions/v1OpenStackAccounts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of OpenStack cloud accounts", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1CloudAccountsOpenStackCreate", + "parameters": [ + { + "description": "Request payload to validate OpenStack cloud account", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OpenStackAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a OpenStack cloud account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/openstack/{uid}": { + "delete": { + "operationId": "v1CloudAccountsOpenStackDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified OpenStack account", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudAccountsOpenStackGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1OpenStackAccount" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified OpenStack account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "OpenStack cloud account uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudAccountsOpenStackUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OpenStackAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified OpenStack account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/openstack/{uid}/properties/azs": { + "get": { + "operationId": "v1OpenstackAccountsUidAzs", + "parameters": [ + { + "in": "query", + "name": "region", + "type": "string" + }, + { + "in": "query", + "name": "project", + "type": "string" + }, + { + "in": "query", + "name": "domain", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackAzs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the openstack azs for a given account and region", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/openstack/{uid}/properties/flavors": { + "get": { + "operationId": "v1OpenstackAccountsUidFlavors", + "parameters": [ + { + "in": "query", + "name": "project", + "type": "string" + }, + { + "in": "query", + "name": "region", + "type": "string" + }, + { + "in": "query", + "name": "domain", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackFlavors" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the openstack keypairs for a given account and scope", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/openstack/{uid}/properties/keypairs": { + "get": { + "operationId": "v1OpenstackAccountsUidKeypairs", + "parameters": [ + { + "in": "query", + "name": "project", + "type": "string" + }, + { + "in": "query", + "name": "region", + "type": "string" + }, + { + "in": "query", + "name": "domain", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackKeypairs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the openstack keypairs for a given account and scope", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/openstack/{uid}/properties/networks": { + "get": { + "operationId": "v1OpenstackAccountsUidNetworks", + "parameters": [ + { + "in": "query", + "name": "project", + "type": "string" + }, + { + "in": "query", + "name": "region", + "type": "string" + }, + { + "in": "query", + "name": "domain", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackNetworks" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the openstack networks for a given account and scope", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/openstack/{uid}/properties/projects": { + "get": { + "operationId": "v1OpenstackAccountsUidProjects", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackProjects" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the openstack projects for a given account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/openstack/{uid}/properties/regions": { + "get": { + "operationId": "v1OpenstackAccountsUidRegions", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackRegions" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the openstack regions for a given account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/summary": { + "get": { + "operationId": "v1CloudAccountsListSummary", + "parameters": [ + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cloud account summary items", + "schema": { + "$ref": "#/definitions/v1CloudAccountsSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cloud accounts summary", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/tencent": { + "get": { + "operationId": "v1CloudAccountsTencentList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cloud account items", + "schema": { + "$ref": "#/definitions/v1TencentAccounts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Tencent cloud accounts", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1CloudAccountsTencentCreate", + "parameters": [ + { + "description": "Request payload to validate Tencent cloud account", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TencentAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an Tencent cloud account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/tencent/{uid}": { + "delete": { + "operationId": "v1CloudAccountsTencentDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified Tencent account", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudAccountsTencentGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TencentAccount" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Tencent account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Tencent cloud account uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudAccountsTencentUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TencentAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified Tencent account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/vsphere": { + "get": { + "operationId": "v1CloudAccountsVsphereList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cloud account items", + "schema": { + "$ref": "#/definitions/v1VsphereAccounts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of vSphere cloud accounts", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1CloudAccountsVsphereCreate", + "parameters": [ + { + "description": "Request payload to validate VSphere cloud account", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VsphereAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a vSphere cloud account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/vsphere/{uid}": { + "delete": { + "operationId": "v1CloudAccountsVsphereDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified vSphere account", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudAccountsVsphereGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1VsphereAccount" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified vSphere account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "VSphere cloud account uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudAccountsVsphereUpdate", + "parameters": [ + { + "description": "Request payload to validate VSphere cloud account", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VsphereAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified VSphere account", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudaccounts/vsphere/{uid}/properties/computecluster/resources": { + "get": { + "operationId": "v1VsphereAccountsUidClusterRes", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VsphereComputeClusterResources" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the vSphere computecluster resources for the given overlord account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "datacenter", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "computecluster", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "useQualifiedNetworkName", + "type": "boolean" + } + ] + }, + "/v1/cloudaccounts/vsphere/{uid}/properties/datacenters": { + "get": { + "operationId": "v1VsphereAccountsUidDatacenters", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VsphereDatacenters" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the vSphere datacenters \u0026 datacluster for the given overlord account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudaccounts/{uid}/geoLocation": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1AccountsGeolocationPatch", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1GeolocationLatlong" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the geolocation annotation", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/aks/{configUid}": { + "get": { + "operationId": "v1CloudConfigsAksGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AzureCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified AKS cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/aks/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsAksUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/aks/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsAksMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an AKS cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/aks/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsAksMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsAksMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified AKS cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/aks/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsAksPoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of AKS machine items", + "schema": { + "$ref": "#/definitions/v1AzureMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AKS machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsAksPoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/aks/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsAksPoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified Azure machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsAksPoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AzureMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified AKS machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsAksPoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to the cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/aws/{configUid}": { + "get": { + "operationId": "v1CloudConfigsAwsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AwsCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified AWS cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/aws/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsAwsUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AwsCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/aws/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsAwsMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AwsMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an AWS cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/aws/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsAwsMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsAwsMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AwsMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified AWS cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/aws/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsAwsPoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of AWS machine items", + "schema": { + "$ref": "#/definitions/v1AwsMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AWS machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsAwsPoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AwsMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/aws/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsAwsPoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified AWS machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsAwsPoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AwsMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified AWS machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsAwsPoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AwsMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to the cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/azure/{configUid}": { + "get": { + "operationId": "v1CloudConfigsAzureGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AzureCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Azure cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/azure/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsAzureUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/azure/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsAzureMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an Azure cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/azure/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsAzureMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsAzureMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified Azure cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/azure/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "description": "Returns all the Azure machines restricted to the user role and filters.", + "operationId": "v1CloudConfigsAzurePoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of AWS machine items", + "schema": { + "$ref": "#/definitions/v1AzureMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Azure machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsAzurePoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/azure/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsAzurePoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified Azure machine", + "tags": [ + "v1" + ] + }, + "get": { + "description": "Returns a Azure machine for the specified uid.", + "operationId": "v1CloudConfigsAzurePoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AzureMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Azure machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsAzurePoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AzureMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}": { + "get": { + "operationId": "v1CloudConfigsCustomGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1CustomCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Custom cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + }, + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + }, + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsCustomUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1CustomCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + }, + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsCustomMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1CustomMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an Custom cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsCustomMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + }, + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsCustomMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1CustomMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified Custom cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsCustomPoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of Custom machine items", + "schema": { + "$ref": "#/definitions/v1CustomMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Custom machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + }, + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsCustomPoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1CustomMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/cloudTypes/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsCustomPoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified Custom machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsCustomPoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1CustomMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Custom machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + }, + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsCustomPoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1CustomMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to the cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/coxedge/{configUid}/machinePools/{machinePoolName}/machines": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsCoxEdgePoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1CoxEdgeMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/edge-native/{configUid}": { + "get": { + "operationId": "v1CloudConfigsEdgeNativeGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1EdgeNativeCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified edge-native cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/edge-native/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsEdgeNativeUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeNativeCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/edge-native/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsEdgeNativeMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeNativeMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a edge-native cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsEdgeNativeMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsEdgeNativeMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeNativeMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified edge-native cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsEdgeNativePoolMachinesList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of edge-native machine items", + "schema": { + "$ref": "#/definitions/v1EdgeNativeMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of edge-native machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsEdgeNativePoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeNativeMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the edge-native machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/edge-native/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsEdgeNativePoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified edge-native machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsEdgeNativePoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1EdgeNativeMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified edge-native machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsEdgeNativePoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeNativeMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/eks/{configUid}": { + "get": { + "operationId": "v1CloudConfigsEksGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1EksCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified EKS cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/eks/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsEksUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EksCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/eks/{configUid}/fargateProfiles": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsEksUidFargateProfilesUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EksFargateProfiles" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates EKS cloud config's fargate profiles", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/eks/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsEksMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EksMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an EKS cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsEksMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsEksMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EksMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified EKS cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsEksPoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of EKS machine items", + "schema": { + "$ref": "#/definitions/v1AwsMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of EKS machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsEksPoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AwsMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/eks/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsEksPoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified EKS machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsEksPoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AwsMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified EKS machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsEksPoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AwsMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to the cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/gcp/{configUid}": { + "get": { + "operationId": "v1CloudConfigsGcpGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1GcpCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified GCP cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/gcp/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsGcpUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/gcp/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsGcpMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a Gcp cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsGcpMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsGcpMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified GCP cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsGcpPoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of GCP machine items", + "schema": { + "$ref": "#/definitions/v1GcpMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of GCP machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsGcpPoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/gcp/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsGcpPoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified GCP machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsGcpPoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1GcpMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified GCP machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsGcpPoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to the cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/generic/{configUid}": { + "get": { + "operationId": "v1CloudConfigsGenericGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1GenericCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Generic cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/generic/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsGenericUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GenericCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/generic/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsGenericMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GenericMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a generic cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsGenericMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsGenericMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GenericMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified generic cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsGenericPoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of Generic machine items", + "schema": { + "$ref": "#/definitions/v1GenericMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Generic machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsGenericPoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GenericMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/generic/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsGenericPoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsGenericPoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1GenericMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified generic machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsGenericPoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GenericMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to the cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/gke/{configUid}": { + "get": { + "operationId": "v1CloudConfigsGkeGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1GcpCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified GKE cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/gke/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsGkeUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/gke/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsGkeMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an GKE cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsGkeMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsGkeMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified GKE cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsGkePoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of GKE machine items", + "schema": { + "$ref": "#/definitions/v1GcpMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of GKE machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsGkePoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/gke/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsGkePoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified Gcp machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsGkePoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1GcpMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified GKE machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsGkePoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1GcpMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to the cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/maas/{configUid}": { + "get": { + "operationId": "v1CloudConfigsMaasGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1MaasCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Maas cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/maas/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsMaasUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1MaasCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/maas/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsMaasMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1MaasMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an Maas cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsMaasMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsMaasMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1MaasMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified Maas cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsMaasPoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of Maas machine items", + "schema": { + "$ref": "#/definitions/v1MaasMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Maas machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsMaasPoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1MaasMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/maas/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsMaasPoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified Maas machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsMaasPoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1MaasMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Maas machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsMaasPoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1MaasMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to the cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/openstack/{configUid}": { + "get": { + "operationId": "v1CloudConfigsOpenStackGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1OpenStackCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified OpenStack cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/openstack/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsOpenStackUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OpenStackCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/openstack/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsOpenStackMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OpenStackMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a OpenStack cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsOpenStackMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsOpenStackMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OpenStackMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified OpenStack cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsOpenStackPoolMachinesList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of OpenStack machine items", + "schema": { + "$ref": "#/definitions/v1OpenStackMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of OpenStack machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsOpenStackPoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OpenStackMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the OpenStack machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/openstack/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsOpenStackPoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified OpenStack machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsOpenStackPoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1OpenStackMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified OpenStack machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsOpenStackPoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OpenStackMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/tke/{configUid}": { + "get": { + "operationId": "v1CloudConfigsTkeGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TencentCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified TKE cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/tke/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsTkeUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TencentCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/tke/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsTkeMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TencentMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an TKE cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsTkeMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsTkeMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TencentMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified TKE cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsTkePoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of TKE machine items", + "schema": { + "$ref": "#/definitions/v1TencentMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of TKE machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsTkePoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TencentMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/tke/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsTkePoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified Tencent machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsTkePoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TencentMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Tke machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsTkePoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TencentMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to the cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/virtual/{configUid}": { + "get": { + "operationId": "v1CloudConfigsVirtualGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1VirtualCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Virtual cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/virtual/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsVirtualUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VirtualCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/virtual/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsVirtualMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VirtualMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a virtual cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsVirtualMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsVirtualMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VirtualMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified virtual cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsVirtualPoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of virtual machine items", + "schema": { + "$ref": "#/definitions/v1VirtualMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of virtual machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsVirtualPoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VirtualMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/virtual/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsVirtualPoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified virtual machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsVirtualPoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1VirtualMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified virtual machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsVirtualPoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VirtualMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to the cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/virtual/{configUid}/resize": { + "parameters": [ + { + "description": "Specify virtual cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsVirtualUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VirtualClusterResize" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates and resizes the virtual cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/vsphere/{configUid}": { + "get": { + "operationId": "v1CloudConfigsVsphereGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1VsphereCloudConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified vSphere cloud config", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/cloudconfigs/vsphere/{configUid}/clusterConfig": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsVsphereUidClusterConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VsphereCloudClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster configuration information", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/vsphere/{configUid}/machinePools": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsVsphereMachinePoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VsphereMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a vSphere cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}": { + "delete": { + "operationId": "v1CloudConfigsVsphereMachinePoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified machine pool", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsVsphereMachinePoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VsphereMachinePoolConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified vSphere cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}/machines": { + "get": { + "operationId": "v1CloudConfigsVspherePoolMachinesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of vSphere machine items", + "schema": { + "$ref": "#/definitions/v1VsphereMachines" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of vSphere machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1CloudConfigsVspherePoolMachinesAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VsphereMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds the vSphere machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/vsphere/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}": { + "delete": { + "operationId": "v1CloudConfigsVspherePoolMachinesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified vSphere machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1CloudConfigsVspherePoolMachinesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1VsphereMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified vSphere machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsVspherePoolMachinesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VsphereMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine to cloud config's machine pool", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}/maintenance": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + }, + { + "description": "Cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsMachinePoolsMachineUidMaintenanceUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1MachineMaintenance" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine maintenance", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/{cloudType}/{configUid}/machinePools/{machinePoolName}/machines/{machineUid}/maintenance/status": { + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + }, + { + "description": "Machine pool name", + "in": "path", + "name": "machinePoolName", + "required": true, + "type": "string" + }, + { + "description": "Machine uid", + "in": "path", + "name": "machineUid", + "required": true, + "type": "string" + }, + { + "description": "Cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1CloudConfigsMachinePoolsMachineUidMaintenanceStatusUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1MachineMaintenanceStatus" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified machine maintenance", + "tags": [ + "v1" + ] + } + }, + "/v1/cloudconfigs/{configUid}/machinePools/machineUids": { + "get": { + "operationId": "v1CloudConfigsMachinePoolsMachineUidsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1MachinePoolsMachineUids" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cloud config's machine pools and machine uid", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster's cloud config uid", + "in": "path", + "name": "configUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/clouds/aws/account/sts": { + "get": { + "operationId": "V1AwsAccountStsGet", + "parameters": [ + { + "default": "aws", + "description": "AWS accounts are scoped to a single partition. Allowed values [aws, aws-us-gov], Default values", + "enum": [ + "aws", + "aws-us-gov" + ], + "in": "query", + "name": "partition", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/V1AwsAccountSts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves AWS external id and account id", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/account/validate": { + "post": { + "operationId": "V1AwsAccountValidate", + "parameters": [ + { + "description": "Request payload to validate AWS cloud account", + "in": "body", + "name": "awsCloudAccount", + "required": true, + "schema": { + "$ref": "#/definitions/v1AwsCloudAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate the specified AWS account credentials", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/cloudwatch/validate": { + "post": { + "description": "Validates aws cloud watch credentials", + "operationId": "V1CloudsAwsCloudWatchValidate", + "parameters": [ + { + "description": "Request payload for cloud watch config", + "in": "body", + "name": "cloudWatchConfig", + "required": true, + "schema": { + "$ref": "#/definitions/v1.CloudWatchConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "validates aws cloud watch credentials", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/cost": { + "post": { + "operationId": "v1AwsCloudCost", + "parameters": [ + { + "description": "Request payload for AWS cloud cost", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1AwsCloudCostSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsCloudCostSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves AWS cloud account usage cost from cost explorer.", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/imageIds/{imageId}/volumeSize": { + "get": { + "description": "Get AWS Volume Size", + "operationId": "V1AwsVolumeSizeGet", + "parameters": [ + { + "description": "Specific AWS Region", + "in": "query", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "AWS image id", + "in": "path", + "name": "imageId", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsVolumeSize" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get AWS Volume Size", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/policies": { + "post": { + "operationId": "V1AwsIamPolicies", + "parameters": [ + { + "description": "Request payload for AWS Cloud Account", + "in": "body", + "name": "account", + "required": true, + "schema": { + "$ref": "#/definitions/v1AwsCloudAccount" + } + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsPolicies" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AWS policies for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/policyArns/validate": { + "post": { + "operationId": "V1AwsPolicyArnsValidate", + "parameters": [ + { + "description": "Request payload to validate AWS policy ARN", + "in": "body", + "name": "spec", + "required": true, + "schema": { + "$ref": "#/definitions/v1AwsPolicyArnsSpec" + } + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate the aws policy arns validate", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/properties/validate": { + "post": { + "operationId": "V1AwsPropertiesValidate", + "parameters": [ + { + "description": "Request payload for AWS properties validate spec", + "in": "body", + "name": "properties", + "required": true, + "schema": { + "$ref": "#/definitions/V1AwsPropertiesValidateSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate AWS properties", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions": { + "get": { + "operationId": "V1AwsRegions", + "parameters": [ + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsRegions" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AWS regions for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/availabilityzones": { + "get": { + "operationId": "V1AwsZones", + "parameters": [ + { + "description": "Region for which zones are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsAvailabilityZones" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AWS availability zones for the specified region", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/copydefaultimages": { + "post": { + "operationId": "V1AwsCopyImageFromDefaultRegion", + "parameters": [ + { + "description": "Region to copy AWS image from", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Request payload to copy the AWS image", + "in": "body", + "name": "spectroClusterAwsImageTag", + "schema": { + "$ref": "#/definitions/v1AwsFindImageRequest" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AsyncOperationIdEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Copies the specified image from one region to another region", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/eksClusters/name/validate": { + "get": { + "description": "Returns no contents if aws cluster name is valid else error.", + "operationId": "V1AwsClusterNameValidate", + "parameters": [ + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "cluster name to be validated", + "in": "query", + "name": "name", + "required": true, + "type": "string" + }, + { + "description": "Region for which cluster name is validated", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Check if Aws cluster name is valid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/images": { + "post": { + "operationId": "V1AwsFindImage", + "parameters": [ + { + "description": "Region to find AWS image", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Request payload to find the AWS image", + "in": "body", + "name": "awsImageRequest", + "schema": { + "$ref": "#/definitions/v1AwsFindImageRequest" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsImage" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns AWS image for the specified AMI name", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/instancetypes": { + "get": { + "operationId": "V1AwsInstanceTypes", + "parameters": [ + { + "description": "Region for which AWS instances are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Filter for instances having cpu greater than or equal", + "format": "double", + "in": "query", + "name": "cpuGtEq", + "type": "number" + }, + { + "description": "Filter for instances having memory greater than or equal", + "format": "double", + "in": "query", + "name": "memoryGtEq", + "type": "number" + }, + { + "description": "Filter for instances having gpu greater than or equal", + "format": "double", + "in": "query", + "name": "gpuGtEq", + "type": "number" + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsInstanceTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AWS instance types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/keypairs": { + "get": { + "operationId": "V1AwsKeyPairs", + "parameters": [ + { + "description": "Region for which AWS key pairs are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsKeyPairs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AWS keypairs", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/keypairs/{keypair}/validate": { + "post": { + "operationId": "V1AwsKeyPairValidate", + "parameters": [ + { + "description": "Region for which AWS key pairs is validated", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "AWS Key pair which is to be validated", + "in": "path", + "name": "keypair", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate the specified AWS keypair", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/kms/{keyId}": { + "get": { + "operationId": "V1AwsKmsKeyGet", + "parameters": [ + { + "description": "Region for which AWS KMS key belongs", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "The globally unique identifier for the KMS key", + "in": "path", + "name": "keyId", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsKmsKeyEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get AWS KMS key by Id", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/kmskeys": { + "get": { + "operationId": "V1AwsKmsKeys", + "parameters": [ + { + "description": "Region for which AWS KMS key are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsKmsKeys" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AWS KMS keys for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/kmskeys/validate": { + "get": { + "operationId": "V1AwsKmsKeyValidate", + "parameters": [ + { + "description": "Region for which AWS KMS key is validated", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "AWS KEY ARN for validation", + "in": "query", + "name": "keyArn", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate an Aws KMS key for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/storagetypes": { + "get": { + "operationId": "V1AwsStorageTypes", + "parameters": [ + { + "description": "Region for which AWS storage types are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsStorageTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AWS storage types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/regions/{region}/vpcs": { + "get": { + "operationId": "V1AwsVpcs", + "parameters": [ + { + "description": "Region for which VPCs are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsVpcs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of VPCs for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/s3/validate": { + "post": { + "operationId": "V1AwsS3Validate", + "parameters": [ + { + "description": "AWS S3 bucket credentials", + "in": "body", + "name": "awsS3Credential", + "required": true, + "schema": { + "$ref": "#/definitions/v1AwsS3BucketCredentials" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate the AWS S3 bucket", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/securitygroups": { + "get": { + "operationId": "V1AwsSecurityGroups", + "parameters": [ + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Region for which security groups are requested", + "in": "query", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Vpc Id for which security groups are requested", + "in": "query", + "name": "vpcId", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AwsSecurityGroups" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of AWS security groups for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/aws/volumeTypes": { + "get": { + "description": "List all AWS Volume Types", + "operationId": "V1AwsVolumeTypesGet", + "parameters": [ + { + "description": "Specific AWS Region", + "in": "query", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AWSVolumeTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get all AWS Volume Types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/account/validate": { + "post": { + "description": "Returns no contents if account is valid else error.", + "operationId": "V1AzureAccountValidate", + "parameters": [ + { + "description": "Request payload for Azure cloud account", + "in": "body", + "name": "azureCloudAccount", + "required": true, + "schema": { + "$ref": "#/definitions/v1AzureCloudAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Check if Azure account is valid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/groups": { + "get": { + "operationId": "V1AzureGroups", + "parameters": [ + { + "description": "Uid for the specific Azure cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureGroups" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Azure groups", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/regions": { + "get": { + "operationId": "V1AzureRegions", + "parameters": [ + { + "description": "Uid for the specific Azure cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "SubscriptionId for which resources is requested", + "in": "query", + "name": "subscriptionId", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureRegions" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Azure regions", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/regions/{region}/instancetypes": { + "get": { + "operationId": "V1AzureInstanceTypes", + "parameters": [ + { + "description": "Region for which Azure instance types are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Filter for instances having cpu greater than or equal", + "format": "double", + "in": "query", + "name": "cpuGtEq", + "type": "number" + }, + { + "description": "Filter for instances having memory greater than or equal", + "format": "double", + "in": "query", + "name": "memoryGtEq", + "type": "number" + }, + { + "description": "Filter for instances having gpu greater than or equal", + "format": "double", + "in": "query", + "name": "gpuGtEq", + "type": "number" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureInstanceTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Azure instance types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/regions/{region}/storagetypes": { + "get": { + "operationId": "V1AzureStorageTypes", + "parameters": [ + { + "description": "Region for which Azure storage types are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureStorageTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Azure storage types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/aksClusters/name/validate": { + "get": { + "description": "Returns no contents if Azure cluster name is valid else error.", + "operationId": "V1AzureClusterNameValidate", + "parameters": [ + { + "description": "Uid for the specific Azure cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "cluster name to be validated", + "in": "query", + "name": "name", + "required": true, + "type": "string" + }, + { + "description": "region in which cluster name is to be validated", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "subscriptionId in which cluster name is to be validated", + "in": "path", + "name": "subscriptionId", + "required": true, + "type": "string" + }, + { + "description": "resourceGroup in which cluster name is to be validated", + "in": "query", + "name": "resourceGroup", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Check if Azure cluster name is valid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/networks": { + "get": { + "operationId": "V1AzureVirtualNetworkList", + "parameters": [ + { + "description": "Uid for the specific Azure cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Region for which Azure virtual networks are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for which Azure virtual networks are requested", + "in": "path", + "name": "subscriptionId", + "required": true, + "type": "string" + }, + { + "description": "Resource group for which Azure virtual networks are requested", + "in": "query", + "name": "resourceGroup", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureVirtualNetworkList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Azure virtual network list for the sepcified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/regions/{region}/subscriptions/{subscriptionId}/resourceGroups": { + "get": { + "operationId": "V1AzureResourceGroupList", + "parameters": [ + { + "description": "Uid for the specific Azure cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Region for which Azure resource group are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for which Azure resource group are requested", + "in": "path", + "name": "subscriptionId", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureResourceGroupList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Azure resource group for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/regions/{region}/zones": { + "get": { + "operationId": "V1AzureZones", + "parameters": [ + { + "description": "Region for which Azure zones are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific Azure cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "subscriptionId of azure account", + "in": "query", + "name": "subscriptionId", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureZoneEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Azure zones for the specified region", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/resourceGroups/{resourceGroup}/privateDnsZones": { + "get": { + "description": "Returns Azure private DNS zones", + "operationId": "V1AzurePrivateDnsZones", + "parameters": [ + { + "description": "resourceGroup for which Azure private dns zones are requested", + "in": "path", + "name": "resourceGroup", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific Azure cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "subscriptionId for which Azure private dns zones are requested", + "in": "query", + "name": "subscriptionId", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzurePrivateDnsZones" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get Azure private DNS zones for the given resource group", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/resourceGroups/{resourceGroup}/storageAccounts": { + "get": { + "description": "Returns Azure storage accounts.", + "operationId": "V1AzureStorageAccounts", + "parameters": [ + { + "description": "resourceGroup for which Azure storage accounts are requested", + "in": "path", + "name": "resourceGroup", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific Azure cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "subscriptionId for which Azure storage accounts are requested", + "in": "query", + "name": "subscriptionId", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureStorageAccounts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get Azure storage accounts", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/resourceGroups/{resourceGroup}/storageAccounts/{storageAccountName}/containers": { + "get": { + "description": "Returns Azure storage containers for the given account.", + "operationId": "V1AzureStorageContainers", + "parameters": [ + { + "description": "resourceGroup for which Azure storage accounts are requested", + "in": "path", + "name": "resourceGroup", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific Azure cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "subscriptionId for which Azure storage accounts are requested", + "in": "query", + "name": "subscriptionId", + "required": true, + "type": "string" + }, + { + "description": "resourceGroup for which Azure storage accounts are requested", + "in": "path", + "name": "storageAccountName", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureStorageContainers" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get Azure storage containers", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/storageaccounttypes": { + "get": { + "description": "Returns Azure storage account types.", + "operationId": "V1AzureStorageAccountTypes", + "parameters": [ + { + "description": "Region for which Azure storage account types are requested", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureStorageAccountEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get Azure storage account types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/subscriptions": { + "get": { + "description": "Returns list of Azure subscription list.", + "operationId": "V1AzureSubscriptionList", + "parameters": [ + { + "description": "Uid for the specific Azure cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureSubscriptionList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Azure subscription list for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/azure/vhds/{vhd}/url": { + "get": { + "operationId": "V1AzureVhdUrl", + "parameters": [ + { + "description": "vhd location for which Azure vhd url is requested", + "in": "path", + "name": "vhd", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1AzureVhdUrlEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the Azure vhd url for the specified vhd location", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes": { + "get": { + "operationId": "V1CustomCloudTypesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CustomCloudTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the custom cloud types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/register": { + "post": { + "operationId": "V1CustomCloudTypeRegister", + "parameters": [ + { + "description": "Request payload to register custom cloud type", + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1CustomCloudRequestEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Registers the custom cloud type", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/{cloudType}": { + "delete": { + "operationId": "V1CustomCloudTypesDelete", + "parameters": [ + { + "description": "Unique cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the custom cloud type", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/{cloudType}/cloudAccountKeys": { + "get": { + "operationId": "V1CustomCloudTypeCloudAccountKeysGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CustomCloudTypeCloudAccountKeys" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns valid keys for the cloud account used for custom cloud type", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Unique cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "V1CustomCloudTypeCloudAccountKeysUpdate", + "parameters": [ + { + "description": "Request payload for custom cloud meta entity", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1CustomCloudTypeCloudAccountKeys" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the custom cloud type cloud account keys", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/{cloudType}/content/bootstrap": { + "delete": { + "operationId": "V1CustomCloudTypeBootstrapDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the custom cloud type bootstrap", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "V1CustomCloudTypeBootstrapGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CustomCloudTypeContentResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the custom cloud type bootstrap", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Unique cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "consumes": [ + "multipart/form-data" + ], + "operationId": "V1CustomCloudTypeBootstrapUpdate", + "parameters": [ + { + "in": "formData", + "name": "fileName", + "type": "file" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the custom cloud type bootstrap", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/{cloudType}/content/cloudProvider": { + "delete": { + "operationId": "V1CustomCloudTypeCloudProviderDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the custom cloud type cloud provider", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "V1CustomCloudTypeCloudProviderGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CustomCloudTypeContentResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the custom cloud type cloud provider", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Unique cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "consumes": [ + "multipart/form-data" + ], + "operationId": "V1CustomCloudTypeCloudProviderUpdate", + "parameters": [ + { + "in": "formData", + "name": "fileName", + "type": "file" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the custom cloud type cloud provider", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/{cloudType}/content/controlPlane": { + "delete": { + "operationId": "V1CustomCloudTypeControlPlaneDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the custom cloud type control plane", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "V1CustomCloudTypeControlPlaneGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CustomCloudTypeContentResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the custom cloud type control plane", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Unique cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "consumes": [ + "multipart/form-data" + ], + "operationId": "V1CustomCloudTypeControlPlaneUpdate", + "parameters": [ + { + "in": "formData", + "name": "fileName", + "type": "file" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the custom cloud type control plane", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/{cloudType}/content/templates/clusterTemplate": { + "delete": { + "operationId": "V1CustomCloudTypeClusterTemplateDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the custom cloud type cluster template", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "V1CustomCloudTypeClusterTemplateGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CustomCloudTypeContentResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the custom cloud type cluster template", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Unique cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "consumes": [ + "multipart/form-data" + ], + "operationId": "V1CustomCloudTypeClusterTemplateUpdate", + "parameters": [ + { + "in": "formData", + "name": "fileName", + "type": "file" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the custom cloud type cluster template", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/{cloudType}/content/templates/controlPlanePoolTemplate": { + "delete": { + "operationId": "V1CustomCloudTypeControlPlanePoolTemplateDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the custom cloud type controlPlane pool template", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "V1CustomCloudTypeControlPlanePoolTemplateGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CustomCloudTypeContentResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the custom cloud type controlPlane pool template", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Unique cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "consumes": [ + "multipart/form-data" + ], + "operationId": "V1CustomCloudTypeControlPlanePoolTemplateUpdate", + "parameters": [ + { + "in": "formData", + "name": "fileName", + "type": "file" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the custom cloud type controlPlane pool template", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/{cloudType}/content/templates/workerPoolTemplate": { + "delete": { + "operationId": "V1CustomCloudTypeWorkerPoolTemplateDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the custom cloud type worker pool template", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "V1CustomCloudTypeWorkerPoolTemplateGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CustomCloudTypeContentResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the custom cloud type worker pool template", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Unique cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "consumes": [ + "multipart/form-data" + ], + "operationId": "V1CustomCloudTypeWorkerPoolTemplateUpdate", + "parameters": [ + { + "in": "formData", + "name": "fileName", + "type": "file" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the custom cloud type worker pool template", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/{cloudType}/logo": { + "get": { + "operationId": "V1CustomCloudTypeLogoGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "Download the logo", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the custom cloud type logo", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Unique cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "consumes": [ + "multipart/form-data" + ], + "operationId": "V1CustomCloudTypeLogoUpdate", + "parameters": [ + { + "in": "formData", + "name": "fileName", + "type": "file" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the custom cloud type logo", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/cloudTypes/{cloudType}/meta": { + "get": { + "operationId": "V1CustomCloudTypeMetaGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CustomCloudMetaEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the custom cloud type meta", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Unique cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "V1CustomCloudTypeMetaUpdate", + "parameters": [ + { + "description": "Request payload for custom cloud meta entity", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1CustomCloudRequestEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the custom cloud type meta", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/coxedge/account/validate": { + "post": { + "operationId": "V1CoxEdgeAccountValidate", + "parameters": [ + { + "description": "Request payload to validate CoxEdge cloud account", + "in": "body", + "name": "account", + "required": true, + "schema": { + "$ref": "#/definitions/v1CoxEdgeCloudAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate the specified CoxEdge account credentials", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/coxedge/default/baseurls": { + "get": { + "operationId": "V1CoxEdgeBaseUrls", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CoxEdgeBaseUrls" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of default base urls", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/coxedge/environments": { + "get": { + "operationId": "V1CoxEdgeEnvironmentsGet", + "parameters": [ + { + "description": "Uid for the specific CoxEdge cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "OrganizationId for the specific CoxEdge account", + "in": "query", + "name": "organizationId", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "List of CoxEdge environments", + "schema": { + "$ref": "#/definitions/v1CoxEdgeEnvironments" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of environments for the specified account", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "V1CoxEdgeEnvironments", + "parameters": [ + { + "description": "Request payload to get CoxEdge environments", + "in": "body", + "name": "spec", + "required": true, + "schema": { + "$ref": "#/definitions/v1CoxEdgeEnvironmentsRequest" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "List of CoxEdge environments", + "schema": { + "$ref": "#/definitions/v1CoxEdgeEnvironments" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of environments for baseUrl and apiKey", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/coxedge/organizations": { + "get": { + "operationId": "V1CoxEdgeOrganizationsGet", + "parameters": [ + { + "description": "Uid for the specific CoxEdge cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "List of CoxEdge organizations", + "schema": { + "$ref": "#/definitions/v1CoxEdgeOrganizations" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of organizations for the specified account", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "V1CoxEdgeOrganizations", + "parameters": [ + { + "description": "Request payload to get CoxEdge organizations", + "in": "body", + "name": "spec", + "required": true, + "schema": { + "$ref": "#/definitions/v1CoxEdgeCredentials" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "List of CoxEdge organizations", + "schema": { + "$ref": "#/definitions/v1CoxEdgeOrganizations" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of organizations for baseUrl and apiKey", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/coxedge/regions": { + "get": { + "operationId": "V1CoxEdgeRegions", + "parameters": [ + { + "description": "Uid for the specific AWS cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "CoxEdge organization id", + "in": "query", + "name": "organizationId", + "type": "string" + }, + { + "description": "CoxEdge service name", + "in": "query", + "name": "service", + "type": "string" + }, + { + "description": "CoxEdge environment name", + "in": "query", + "name": "environment", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CoxEdgeRegions" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of CoxEdge regions for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/coxedge/regions/{region}/instancetypes": { + "get": { + "operationId": "V1CoxEdgeInstanceTypes", + "parameters": [ + { + "description": "Region for which CoxEdge instances are listed", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Filter for instances having cpu greater than or equal", + "format": "double", + "in": "query", + "name": "cpuGtEq", + "type": "number" + }, + { + "description": "Filter for instances having memory greater than or equal", + "format": "double", + "in": "query", + "name": "memoryGtEq", + "type": "number" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CoxEdgeInstanceTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of CoxEdge instance types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/coxedge/services": { + "get": { + "operationId": "V1CoxEdgeServicesGet", + "parameters": [ + { + "description": "Uid for the specific CoxEdge cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "OrganizationId for the specific CoxEdge account", + "in": "query", + "name": "organizationId", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "List of CoxEdge services", + "schema": { + "$ref": "#/definitions/v1CoxEdgeServices" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of services for the specified account", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "V1CoxEdgeServices", + "parameters": [ + { + "description": "Request payload to get CoxEdge services", + "in": "body", + "name": "spec", + "required": true, + "schema": { + "$ref": "#/definitions/v1CoxEdgeCredentials" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CoxEdgeServices" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of services for baseUrl and apiKey", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/eks/properties/validate": { + "post": { + "operationId": "V1EksPropertiesValidate", + "parameters": [ + { + "description": "Request payload for EKS properties validate spec", + "in": "body", + "name": "properties", + "required": true, + "schema": { + "$ref": "#/definitions/V1EksPropertiesValidateSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate EKS properties", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/account/validate": { + "post": { + "operationId": "V1GcpAccountValidate", + "parameters": [ + { + "description": "Uid for the specific GCP cloud account", + "in": "body", + "name": "gcpCloudAccount", + "required": true, + "schema": { + "$ref": "#/definitions/v1GcpCloudAccountValidateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate the specified GCP account credentials", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/azs/validate": { + "post": { + "operationId": "V1GcpAzValidate", + "parameters": [ + { + "description": "Uid for the specific GCP cloud account", + "in": "body", + "name": "entity", + "required": true, + "schema": { + "$ref": "#/definitions/v1AzValidateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate the specified GCP az", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/bucketname/validate": { + "post": { + "operationId": "V1GcpBucketNameValidate", + "parameters": [ + { + "description": "Request payload for GCP account name validate", + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1GcpAccountNameValidateSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate the specified GCP bucket name credentials", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/image/container/validate": { + "get": { + "operationId": "V1GcpContainerImageValidate", + "parameters": [ + { + "description": "image path in the container", + "in": "query", + "name": "imagePath", + "required": true, + "type": "string" + }, + { + "description": "tag in the GCP container", + "in": "query", + "name": "tag", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates the image with tag", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/images/{imageName}/url": { + "get": { + "operationId": "V1GcpImageUrl", + "parameters": [ + { + "description": "imageName for which GCP image url is requested", + "in": "path", + "name": "imageName", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1GcpImageUrlEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the Gcp image url for the specified image location", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/projects": { + "get": { + "operationId": "V1GcpProjects", + "parameters": [ + { + "description": "Uid for the specific GCP cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1GcpProjects" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of GCP projects for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/projects/{project}/regions": { + "get": { + "operationId": "V1GcpRegions", + "parameters": [ + { + "description": "Uid for the specific GCP cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Project Name for which GCP zones are requested", + "in": "path", + "name": "project", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1GcpRegions" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of GCP regions", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/projects/{project}/regions/{region}/networks": { + "get": { + "operationId": "V1GcpNetworks", + "parameters": [ + { + "description": "Uid for the specific GCP cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Region for which GCP networks are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Project Name for which GCP networks are requested", + "in": "path", + "name": "project", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1GcpNetworks" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of GCP networks for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/projects/{project}/regions/{region}/zones": { + "get": { + "operationId": "V1GcpZones", + "parameters": [ + { + "description": "Uid for the specific GCP cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Region for which GCP zones are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Project Name for which GCP zones are requested", + "in": "path", + "name": "project", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1GcpZones" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of GCP zones for the specified account and region", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/projects/{project}/validate": { + "post": { + "operationId": "V1GcpProjectValidate", + "parameters": [ + { + "description": "GCP project uid", + "in": "path", + "name": "project", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific GCP cloud account", + "in": "body", + "name": "cloudAccountUid", + "required": true, + "schema": { + "$ref": "#/definitions/v1CloudAccountUidEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate the specified GCP project", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/projects/{project}/zones": { + "get": { + "operationId": "V1GcpAvailabilityZones", + "parameters": [ + { + "description": "Uid for the specific GCP cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Project Name for which GCP zones are requested", + "in": "path", + "name": "project", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1GcpZones" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of GCP zones for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/properties/validate": { + "post": { + "operationId": "V1GcpPropertiesValidate", + "parameters": [ + { + "description": "Request payload for GCP properties validate spec", + "in": "body", + "name": "properties", + "required": true, + "schema": { + "$ref": "#/definitions/V1GcpPropertiesValidateSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate GCP properties", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/regions/{region}/instancetypes": { + "get": { + "operationId": "V1GcpInstanceTypes", + "parameters": [ + { + "description": "Region for which GCP instance types are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Filter for instances having cpu greater than or equal", + "format": "double", + "in": "query", + "name": "cpuGtEq", + "type": "number" + }, + { + "description": "Filter for instances having memory greater than or equal", + "format": "double", + "in": "query", + "name": "memoryGtEq", + "type": "number" + }, + { + "description": "Filter for instances having gpu greater than or equal", + "format": "double", + "in": "query", + "name": "gpuGtEq", + "type": "number" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1GcpInstanceTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of GCP instance types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/gcp/regions/{region}/storagetypes": { + "get": { + "operationId": "V1GcpStorageTypes", + "parameters": [ + { + "description": "Region for which GCP storage types are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1GcpStorageTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Gcp storage types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/maas/account/validate": { + "post": { + "description": "Returns no contents if account is valid else error.", + "operationId": "V1MaasAccountValidate", + "parameters": [ + { + "description": "Request payload for Maas cloud account", + "in": "body", + "name": "account", + "required": true, + "schema": { + "$ref": "#/definitions/v1MaasCloudAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Check if Maas account is valid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/maas/azs": { + "get": { + "operationId": "V1MaasZonesGet", + "parameters": [ + { + "description": "Uid for the specific Maas cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1MaasZones" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Maas zones for a particular account uid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/maas/domains": { + "get": { + "operationId": "V1MaasDomainsGet", + "parameters": [ + { + "description": "Uid for the specific Maas cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1MaasDomains" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Maas domains", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/maas/resourcePools": { + "get": { + "operationId": "V1MaasPoolsGet", + "parameters": [ + { + "description": "Uid for the specific Maas cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1MaasPools" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Maas pools for a particular account uid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/maas/subnets": { + "get": { + "operationId": "V1MaasSubnetsGet", + "parameters": [ + { + "description": "Uid for the specific Maas cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1MaasSubnets" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Maas subnets for a particular account uid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/maas/tags": { + "get": { + "operationId": "V1MaasTagsGet", + "parameters": [ + { + "description": "Uid for the specific Maas cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1MaasTags" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Maas tags for a particular account uid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/openstack/account/validate": { + "post": { + "description": "Returns no contents if account is valid else error.", + "operationId": "V1OpenStackAccountValidate", + "parameters": [ + { + "description": "Request payload for OpenStack cloud account", + "in": "body", + "name": "openstackCloudAccount", + "required": true, + "schema": { + "$ref": "#/definitions/v1OpenStackCloudAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Check if OpenStack account is valid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/openstack/azs": { + "get": { + "operationId": "V1OpenStackAzsGet", + "parameters": [ + { + "description": "Uid for the specific OpenStack cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "project for which OpenStack azs are requested", + "in": "query", + "name": "project", + "type": "string" + }, + { + "description": "region for which OpenStack azs are requested", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "domain for which OpenStack azs are requested", + "in": "query", + "name": "domain", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackAzs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of OpenStack azs for a particular account uid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/openstack/flavors": { + "get": { + "operationId": "V1OpenStackFlavorsGet", + "parameters": [ + { + "description": "Uid for the specific OpenStack cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "project for which OpenStack flavors are requested", + "in": "query", + "name": "project", + "type": "string" + }, + { + "description": "region for which OpenStack flavors are requested", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "domain for which OpenStack flavors are requested", + "in": "query", + "name": "domain", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackFlavors" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the OpenStack flavors", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/openstack/keypairs": { + "get": { + "operationId": "V1OpenStackKeypairsGet", + "parameters": [ + { + "description": "Uid for the specific OpenStack cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "project for which OpenStack keypairs are requested", + "in": "query", + "name": "project", + "type": "string" + }, + { + "description": "region for which OpenStack keypairs are requested", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "domain for which OpenStack keypairs are requested", + "in": "query", + "name": "domain", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackKeypairs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the OpenStack keypair", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/openstack/networks": { + "get": { + "operationId": "V1OpenStackNetworksGet", + "parameters": [ + { + "description": "Uid for the specific OpenStack cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "project for which OpenStack networks are requested", + "in": "query", + "name": "project", + "type": "string" + }, + { + "description": "region for which OpenStack networks are requested", + "in": "query", + "name": "region", + "type": "string" + }, + { + "description": "domain for which OpenStack networks are requested", + "in": "query", + "name": "domain", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackNetworks" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the OpenStack networks", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/openstack/projects": { + "get": { + "operationId": "V1OpenStackProjectsGet", + "parameters": [ + { + "description": "Uid for the specific OpenStack cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackProjects" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the OpenStack projects", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/openstack/regions": { + "get": { + "operationId": "V1OpenStackRegionsGet", + "parameters": [ + { + "description": "Uid for the specific OpenStack cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OpenStackRegions" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the OpenStack regions", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/tencent/account/validate": { + "post": { + "operationId": "V1TencentAccountValidate", + "parameters": [ + { + "description": "Request payload to validate tencent cloud account", + "in": "body", + "name": "account", + "required": true, + "schema": { + "$ref": "#/definitions/v1TencentCloudAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate the specified Tencent account credentials", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/tencent/regions": { + "get": { + "operationId": "V1TencentRegions", + "parameters": [ + { + "description": "Uid for the specific Tencent cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TencentRegions" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Tencent regions for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/tencent/regions/{region}/instancetypes": { + "get": { + "operationId": "V1TencentInstanceTypes", + "parameters": [ + { + "description": "Region for which tencent instances are listed", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Filter for instances having cpu greater than or equal", + "format": "double", + "in": "query", + "name": "cpuGtEq", + "type": "number" + }, + { + "description": "Filter for instances having memory greater than or equal", + "format": "double", + "in": "query", + "name": "memoryGtEq", + "type": "number" + }, + { + "description": "Filter for instances having gpu greater than or equal", + "format": "double", + "in": "query", + "name": "gpuGtEq", + "type": "number" + }, + { + "description": "Uid for the specific tencent cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TencentInstanceTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Tencent instance types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/tencent/regions/{region}/keypairs": { + "get": { + "operationId": "V1TencentKeypairs", + "parameters": [ + { + "description": "Region for which keypairs are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific Tencent cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TencentKeypairs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of keypairs for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/tencent/regions/{region}/securitygroups": { + "get": { + "operationId": "V1TencentSecurityGroups", + "parameters": [ + { + "description": "Region for which security groups are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific Tencent cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TencentSecurityGroups" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of secutity groups for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/tencent/regions/{region}/storagetypes": { + "get": { + "operationId": "V1TencentStorageTypes", + "parameters": [ + { + "description": "Region for which tencent storages are listed", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific tencent cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Zone for which tencent storages are listed", + "in": "query", + "name": "zone", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TencentStorageTypes" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Tencent storage types", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/tencent/regions/{region}/vpcs": { + "get": { + "operationId": "V1TencentVpcs", + "parameters": [ + { + "description": "Region for which VPCs are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific Tencent cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TencentVpcs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of VPCs for the specified account", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/tencent/regions/{region}/zones": { + "get": { + "operationId": "V1TencentZones", + "parameters": [ + { + "description": "Region for which zones are requested", + "in": "path", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Uid for the specific Tencent cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TencentAvailabilityZones" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Tencent availability zones for the specified region", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/vsphere/account/validate": { + "post": { + "description": "Returns no contents if account is valid else error.", + "operationId": "V1VsphereAccountValidate", + "parameters": [ + { + "description": "Request payload for VSphere cloud account", + "in": "body", + "name": "vsphereCloudAccount", + "required": true, + "schema": { + "$ref": "#/definitions/v1VsphereCloudAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Check if Vsphere account is valid", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/vsphere/datacenters": { + "get": { + "operationId": "V1VsphereDatacenters", + "parameters": [ + { + "description": "Uid for the specific OpenStack cloud account", + "in": "query", + "name": "cloudAccountUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VsphereDatacenters" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the vsphere data centers", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/vsphere/datacenters/{uid}/computeclusters/{computecluster}": { + "get": { + "operationId": "V1VsphereComputeClusterResources", + "parameters": [ + { + "description": "Uid for the specific VSphere cloud account", + "in": "query", + "name": "cloudAccountUid", + "required": true, + "type": "string" + }, + { + "description": "computecluster for which resources is requested", + "in": "path", + "name": "computecluster", + "required": true, + "type": "string" + }, + { + "description": "VSphere datacenter uid for which resources is requested", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VsphereComputeClusterResources" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the resources for vsphere compute cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/vsphere/env": { + "get": { + "operationId": "V1VsphereEnv", + "parameters": [ + { + "description": "Request payload for VSphere cloud account", + "in": "body", + "name": "vsphereCloudAccount", + "required": true, + "schema": { + "$ref": "#/definitions/v1VsphereCloudAccount" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VsphereEnv" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves vsphere env", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/{cloudType}/instance/spotprice": { + "get": { + "operationId": "V1CloudInstanceSpotPriceGet", + "parameters": [ + { + "description": "Cloud type [aws/azure/gcp/tencent]", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + }, + { + "description": "Instance type for a specific cloud type", + "in": "query", + "name": "instanceType", + "required": true, + "type": "string" + }, + { + "description": "Availability zone for a specific cloud type", + "in": "query", + "name": "zone", + "required": true, + "type": "string" + }, + { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "format": "date-time", + "in": "query", + "name": "timestamp", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CloudSpotPrice" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves the cloud instance spot price based on zone and timestamp for a specific cloud", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/{cloud}/compute/{type}/rate": { + "get": { + "operationId": "V1CloudComputeRate", + "parameters": [ + { + "description": "cloud for which compute rate is requested", + "in": "path", + "name": "cloud", + "required": true, + "type": "string" + }, + { + "description": "instance type for which compute rate is requested", + "in": "path", + "name": "type", + "required": true, + "type": "string" + }, + { + "description": "region for which compute rate is requested", + "in": "query", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CloudCost" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the cloud compute rate", + "tags": [ + "v1" + ] + } + }, + "/v1/clouds/{cloud}/storage/{type}/rate": { + "get": { + "operationId": "V1CloudStorageRate", + "parameters": [ + { + "description": "cloud for which compute rate is requested", + "in": "path", + "name": "cloud", + "required": true, + "type": "string" + }, + { + "description": "storage type for which compute rate is requested", + "in": "path", + "name": "type", + "required": true, + "type": "string" + }, + { + "description": "region for which compute rate is requested", + "in": "query", + "name": "region", + "required": true, + "type": "string" + }, + { + "description": "maxDiskType for which compute rate is requested", + "in": "query", + "name": "maxDiskType", + "type": "integer" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1CloudCost" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the cloud storage rate", + "tags": [ + "v1" + ] + } + }, + "/v1/clustergroups": { + "post": { + "operationId": "v1ClusterGroupsCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterGroupEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create cluster groups", + "tags": [ + "v1" + ] + } + }, + "/v1/clustergroups/developerCredit/usage/{scope}": { + "get": { + "operationId": "v1ClusterGroupsDeveloperCreditUsageGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster group developer credit usage", + "schema": { + "$ref": "#/definitions/v1ClusterGroupsDeveloperCreditUsage" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get cluster group developer credit usage by scope", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "enum": [ + "system", + "tenant" + ], + "in": "path", + "name": "scope", + "required": true, + "type": "string" + } + ] + }, + "/v1/clustergroups/hostCluster": { + "get": { + "operationId": "v1ClusterGroupsHostClusterSummary", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster groups of host cluster type summary", + "schema": { + "$ref": "#/definitions/v1ClusterGroupsHostClusterSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster groups host cluster summary", + "tags": [ + "v1" + ] + } + }, + "/v1/clustergroups/hostCluster/metadata": { + "get": { + "operationId": "v1ClusterGroupsHostClusterMetadata", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster groups host cluster metadata items", + "schema": { + "$ref": "#/definitions/v1ClusterGroupsHostClusterMetadata" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster groups host cluster metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/clustergroups/validate/name": { + "get": { + "operationId": "v1ClusterGroupsValidateName", + "parameters": [ + { + "in": "query", + "name": "name", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates the cluster groups name", + "tags": [ + "v1" + ] + } + }, + "/v1/clustergroups/{uid}": { + "delete": { + "operationId": "v1ClusterGroupsUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified cluster group", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1ClusterGroupsUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterGroup" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster groups", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/clustergroups/{uid}/hostCluster": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ClusterGroupsUidHostClusterUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterGroupHostClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates cluster reference and host cluster config", + "tags": [ + "v1" + ] + } + }, + "/v1/clustergroups/{uid}/meta": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ClusterGroupsUidMetaUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ObjectMeta" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster groups meta", + "tags": [ + "v1" + ] + } + }, + "/v1/clustergroups/{uid}/packs/resolvedValues": { + "get": { + "operationId": "v1ClusterGroupsUidPacksResolvedValuesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfilesResolvedValues" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified clustergroup's profile packs resolved values", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster group uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfilesParamReferenceEntity" + } + } + ] + }, + "/v1/clustergroups/{uid}/profiles": { + "get": { + "operationId": "v1ClusterGroupsUidProfilesGet", + "parameters": [ + { + "description": "includes pack meta such as schema, presets", + "in": "query", + "name": "includePackMeta", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfileList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the associated profiles of a specified cluster group", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "ClusterGroup uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ClusterGroupsUidProfilesUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfiles" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster groups profiles", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles": { + "post": { + "operationId": "v1ClusterProfilesCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterProfileEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a cluster profile", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/bulk": { + "delete": { + "operationId": "v1ClusterProfilesBulkDelete", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1BulkDeleteRequest" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1BulkDeleteResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes list of cluster profiles", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/import": { + "post": { + "operationId": "v1ClusterProfilesImport", + "parameters": [ + { + "description": "If true then cluster profile will be published post successful import", + "in": "query", + "name": "publish", + "type": "boolean" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterProfileImportEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Imports a cluster profile", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/import/file": { + "post": { + "consumes": [ + "multipart/form-data" + ], + "operationId": "v1ClusterProfilesImportFile", + "parameters": [ + { + "description": "If true then cluster profile will be published post successful import", + "in": "query", + "name": "publish", + "type": "boolean" + }, + { + "description": "Cluster profile import file", + "in": "formData", + "name": "importFile", + "type": "file" + }, + { + "default": "json", + "description": "Cluster profile import file format [\"yaml\", \"json\"]", + "enum": [ + "yaml", + "json" + ], + "in": "query", + "name": "format", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Imports a cluster profile via file", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/import/validate": { + "post": { + "operationId": "v1ClusterProfilesImportValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterProfileImportEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster profile import validated response", + "schema": { + "$ref": "#/definitions/v1ClusterProfileImportEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates cluster profile import", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/macros": { + "get": { + "operationId": "v1MacrosList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of macros", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/validate/name": { + "get": { + "description": "Validates the cluster profile name and version", + "operationId": "v1ClusterProfilesValidateNameVersion", + "parameters": [ + { + "description": "Cluster profile name", + "in": "query", + "name": "name", + "type": "string" + }, + { + "description": "Cluster profile version", + "in": "query", + "name": "version", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates the cluster profile metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/validate/packs": { + "post": { + "operationId": "v1ClusterProfilesValidatePacks", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterProfileTemplateDraft" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster profile packs validation response", + "schema": { + "$ref": "#/definitions/v1ClusterProfileValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates cluster profile packs", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}": { + "delete": { + "operationId": "v1ClusterProfilesDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified cluster profile", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1ClusterProfilesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterProfile" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns a specified cluster profile", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Comma seperated pack meta such as schema, presets", + "in": "query", + "name": "includePackMeta", + "type": "string" + } + ], + "put": { + "operationId": "v1ClusterProfilesUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterProfileUpdateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster profile", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/clone": { + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1ClusterProfilesUidClone", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterProfileCloneEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a clone of the specified cluster profile", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/clone/validate": { + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "description": "Validates the cloned cluster profile name, version and target project uid", + "operationId": "v1ClusterProfilesUidCloneValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterProfileCloneMetaInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates the cluster profile clone", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/export": { + "get": { + "operationId": "V1ClusterProfilesUidExport", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "Exports cluster profile as a file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Export the specified cluster profile", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "default": "json", + "description": "Cluster profile export file format [ \"yaml\", \"json\" ]", + "enum": [ + "yaml", + "json" + ], + "in": "query", + "name": "format", + "type": "string" + } + ] + }, + "/v1/clusterprofiles/{uid}/export/terraform": { + "get": { + "operationId": "V1ClusterProfilesUidExportTerraform", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "Downloads cluster profile export file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Downloads the specified cluster profile", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "default": "yaml", + "description": "Cluster profile export file format [ \"yaml\", \"json\" ]", + "enum": [ + "yaml", + "json" + ], + "in": "query", + "name": "format", + "type": "string" + } + ] + }, + "/v1/clusterprofiles/{uid}/metadata": { + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1ClusterProfilesUidMetadataUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ProfileMetaEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster profile metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/packRefs": { + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Cluster profile notification uid", + "in": "query", + "name": "notify", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterProfileNotificationUpdateEntity" + } + } + ], + "patch": { + "operationId": "v1ClusterProfilesPacksRefUpdate", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates cluster profile packs ref", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/packs": { + "get": { + "operationId": "v1ClusterProfilesUidPacksGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterProfilePacksEntities" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster profile packs", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Comma seperated pack meta such as schema, presets", + "in": "query", + "name": "includePackMeta", + "type": "string" + } + ], + "post": { + "operationId": "v1ClusterProfilesUidPacksAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1PackInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds a new pack to the specified cluster profile and returns the created pack uid", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/packs/manifests": { + "get": { + "operationId": "v1ClusterProfilesUidPacksManifestsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterProfilePacksManifests" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster profile pack manifests", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Comma seperated pack meta such as schema, presets", + "in": "query", + "name": "includePackMeta", + "type": "string" + } + ] + }, + "/v1/clusterprofiles/{uid}/packs/resolvedValues": { + "get": { + "operationId": "v1ClusterProfilesUidPacksResolvedValuesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1PackResolvedValues" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster profile packs resolved values", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1PackParamsEntity" + } + } + ] + }, + "/v1/clusterprofiles/{uid}/packs/{packName}": { + "delete": { + "operationId": "v1ClusterProfilesUidPacksNameDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified pack information in the cluster profile", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "V1ClusterProfilesUidPacksNameGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1PackRefSummaryResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster profile pack", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Cluster profile pack name", + "in": "path", + "name": "packName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ClusterProfilesUidPacksNameUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1PackUpdateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified pack information in the cluster profile", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/packs/{packName}/config": { + "get": { + "operationId": "v1ClusterProfilesUidPacksConfigGet", + "parameters": [ + { + "description": "cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Cluster profile pack name", + "in": "path", + "name": "packName", + "required": true, + "type": "string" + }, + { + "description": "Cluster profile pack uid", + "in": "query", + "name": "packUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster profile pack configurations", + "schema": { + "$ref": "#/definitions/v1ClusterProfilePackConfigList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster profile pack configuration", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/packs/{packName}/manifests": { + "get": { + "operationId": "v1ClusterProfilesUidPacksUidManifests", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ManifestEntities" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the associated manifests for the specified profile's pack", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Cluster profile pack name", + "in": "path", + "name": "packName", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1ClusterProfilesUidPacksNameManifestsAdd", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ManifestInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Adds manifest to the profiles packs and returns the added manifests uid", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/packs/{packName}/manifests/{manifestUid}": { + "delete": { + "operationId": "v1ClusterProfilesUidPacksNameManifestsUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified cluster profile pack manifest", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1ClusterProfilesUidPacksNameManifestsUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ManifestEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster profile pack manifest", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Cluster profile pack name", + "in": "path", + "name": "packName", + "required": true, + "type": "string" + }, + { + "description": "Cluster profile pack manifest uid", + "in": "path", + "name": "manifestUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ClusterProfilesUidPacksNameManifestsUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ManifestInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified manifest of the profile's pack", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/publish": { + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "description": "Publish the draft cluster profile with next revision, the current draft cluster profile will be marked to published\nand the draft cluster profile will be set to null in the cluster profile template.\n", + "operationId": "v1ClusterProfilesPublish", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Cluster profile published successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Publishes the specified cluster profile", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/spc/download": { + "get": { + "operationId": "v1ClusterProfilesUidSpcDownload", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "Download cluster profile archive file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Downloads the specified cluster profile", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/clusterprofiles/{uid}/validate/packs": { + "post": { + "operationId": "v1ClusterProfilesUidValidatePacks", + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterProfileTemplateDraft" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster profile packs validation response", + "schema": { + "$ref": "#/definitions/v1ClusterProfileValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates specified cluster profile packs", + "tags": [ + "v1" + ] + } + }, + "/v1/clusterprofiles/{uid}/variables": { + "delete": { + "operationId": "V1ClusterProfilesUidVariablesDelete", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VariableNames" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified cluster profile variables", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "V1ClusterProfilesUidVariablesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Variables" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieve a list of variables defined for the cluster profile", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster profile uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "V1ClusterProfilesUidVariablesPatch", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Variables" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update specific variables defined for a cluster profile", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "V1ClusterProfilesUidVariablesPut", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Variables" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the variables defined for a cluster profile", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/appDeployments": { + "post": { + "operationId": "v1DashboardAppDeployments", + "parameters": [ + { + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "maximum": 20, + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppDeploymentsFilterSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of application deployment summary items", + "schema": { + "$ref": "#/definitions/v1AppDeploymentsSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of application deployments filter summary Supported filter fields - [\"appDeploymentName\", \"clusterUid\", \"tags\"] Supported sort fields - [\"appDeploymentName\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/appProfiles": { + "post": { + "operationId": "v1DashboardAppProfiles", + "parameters": [ + { + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "maximum": 20, + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AppProfilesFilterSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of application profiles summary items", + "schema": { + "$ref": "#/definitions/v1AppProfilesSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of application profiles filter summary Supported filter fields - [\"profileName\", \"tags\"] Supported sort fields - [\"profileName\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/appProfiles/metadata": { + "get": { + "operationId": "v1DashboardAppProfilesMetadata", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of application profile summary items", + "schema": { + "$ref": "#/definitions/v1AppProfilesMetadata" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of application profile metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/appliances/metadata": { + "post": { + "operationId": "v1EdgeHostsMetadata", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeHostsMetadataFilter" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of edgehost summary items", + "schema": { + "$ref": "#/definitions/v1EdgeHostsMetadataSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of edgehosts summary", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/cloudaccounts/metadata": { + "get": { + "operationId": "v1DashboardCloudAccountsMetadata", + "parameters": [ + { + "in": "query", + "name": "environment", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cloud accounts summary items", + "schema": { + "$ref": "#/definitions/v1CloudAccountsMetadata" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cloud accounts metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/clustergroups/{uid}/hostClusters": { + "post": { + "operationId": "v1ClusterGroupUidHostClustersSummary", + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SearchFilterSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "$ref": "#/definitions/v1SpectroClustersSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster summary for a given cluster group", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/clustergroups/{uid}/virtualClusters": { + "post": { + "operationId": "v1ClusterGroupUidVirtualClustersSummary", + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SearchFilterSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "$ref": "#/definitions/v1SpectroClustersSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster summary for a given cluster group", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/clusterprofiles": { + "post": { + "operationId": "v1ClusterProfilesFilterSummary", + "parameters": [ + { + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "maximum": 20, + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterProfilesFilterSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster profiles summary items", + "schema": { + "$ref": "#/definitions/v1ClusterProfilesSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster profiles filter summary Supported filter fields - [\"profileName\", \"tags\", \"profileType\", \"environment\"] Supported sort fields - [\"profileName\", \"environment\", \"profileType\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/clusterprofiles/metadata": { + "get": { + "operationId": "v1ClusterProfilesMetadata", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "$ref": "#/definitions/v1ClusterProfilesMetadata" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster profiles metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/clusterprofiles/{uid}": { + "get": { + "operationId": "v1ClusterProfilesUidSummary", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster profile summary response", + "schema": { + "$ref": "#/definitions/v1ClusterProfileSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a specified cluster profile summary", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/dashboard/edgehosts/search": { + "post": { + "operationId": "v1DashboardEdgehostsSearch", + "parameters": [ + { + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "maximum": 20, + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SearchFilterSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of edgehost summary items", + "schema": { + "$ref": "#/definitions/v1EdgeHostsSearchSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Edgehosts summary with provided search filter. Supported fields as per schema /v1/dashboard/edgehosts/search/schema", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/edgehosts/search/schema": { + "get": { + "operationId": "v1DashboardEdgehostsSearchSchemaGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of schema items", + "schema": { + "$ref": "#/definitions/v1SearchFilterSchemaSpec" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a schema for the Edgehost search filter", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/pcgs/search": { + "post": { + "operationId": "v1DashboardPcgsSearchSummary", + "parameters": [ + { + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "maximum": 20, + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SearchFilterSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "$ref": "#/definitions/v1PcgsSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of PCG summary with provided search filter. Supported fields as per schema /v1/dashboard/pcgs/search/schema", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/pcgs/search/schema": { + "get": { + "operationId": "v1DashboardPcgSearchSchemaGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of schema items", + "schema": { + "$ref": "#/definitions/v1SearchFilterSchemaSpec" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a schema for the PCG search filter", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/projects": { + "get": { + "description": "Deprecated: Use POST /v1/dashboard/projects", + "operationId": "v1ProjectsSummary", + "parameters": [ + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "default": 60, + "description": "Metric period in minutes defines latest metrics by period", + "format": "int32", + "in": "query", + "name": "metricPeriod", + "type": "integer" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of project summary items", + "schema": { + "$ref": "#/definitions/v1ProjectsSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of project summary", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1ProjectsFilterSummary", + "parameters": [ + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ProjectsFilterSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of project filter summary items", + "schema": { + "$ref": "#/definitions/v1ProjectsSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/projects/metadata": { + "get": { + "operationId": "v1ProjectsMetadata", + "parameters": [ + { + "description": "Name of the project", + "in": "query", + "name": "name", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of project metadata items", + "schema": { + "$ref": "#/definitions/v1ProjectsMetadata" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of projects metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters": { + "post": { + "description": "Deprecated: Use POST /v1/dashboard/spectroclusters/search", + "operationId": "v1SpectroClustersFilterSummary", + "parameters": [ + { + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "maximum": 20, + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "$ref": "#/definitions/v1SpectroClustersSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster summary with provided filter spec Supported filter fields - [\"cpuUsage\", \"memoryUsage\", \"clusterName\", \"tags\", \"healthState\", \"clusterStates\", \"isDeleted\", \"environments\", \"metricPeriod\"] Supported sort fields - [\"environment\", \"clusterName\", \"memoryUsage\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/cost": { + "post": { + "operationId": "v1DashboardSpectroClustersCostSummary", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterCloudCostSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of resources cloud cost summary items", + "schema": { + "$ref": "#/definitions/v1ResourcesCloudCostSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves spectro clusters cloud cost summary information", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/filters/workspace": { + "get": { + "operationId": "v1SpectroClustersFiltersWorkspace", + "parameters": [ + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "$ref": "#/definitions/v1SpectroClustersSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of running, non rbac configured clusters in a workspace", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/metadata": { + "get": { + "operationId": "v1SpectroClustersMetadataGet", + "parameters": [ + { + "enum": [ + "hostclusters", + "strictHostclusters" + ], + "in": "query", + "name": "quickFilter", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "$ref": "#/definitions/v1SpectroClustersMetadata" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster summary metadata", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1SpectroClustersMetadata", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterMetadataSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "$ref": "#/definitions/v1SpectroClustersMetadata" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster summary", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/metadata/search": { + "post": { + "operationId": "v1SpectroClustersMetadataSearch", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SearchFilterSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary meta items", + "schema": { + "$ref": "#/definitions/v1SpectroClustersMetadataSearch" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster metadata with provided search filter spec Supported sort fields - [\"environment\", \"clusterName\", \"clusterState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/metadata/search/schema": { + "get": { + "operationId": "v1SpectroClustersMetadataSearchSchema", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster meta schema items", + "schema": { + "$ref": "#/definitions/v1SearchFilterSchemaSpec" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a schema for the cluster metadata search filter", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/repaveStatus": { + "get": { + "operationId": "v1DashboardSpectroClustersRepaveList", + "parameters": [ + { + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "maximum": 20, + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "default": "Pending", + "enum": [ + "Pending", + "Approved", + "Reverted" + ], + "in": "query", + "name": "repaveState", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "$ref": "#/definitions/v1SpectroClustersSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of clusters with the desired repave state", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/resources/consumption": { + "post": { + "operationId": "v1SpectroClustersResourcesConsumption", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ResourceConsumptionSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of resource consumption data items", + "schema": { + "$ref": "#/definitions/v1ResourcesConsumption" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves spectro clusters resource consumption", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/resources/cost": { + "post": { + "operationId": "v1SpectroClustersResourcesCostSummary", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ResourceCostSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of resources cost summary items", + "schema": { + "$ref": "#/definitions/v1ResourcesCostSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves spectro clusters resources cost summary information", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/resources/usage": { + "post": { + "operationId": "v1SpectroClustersResourcesUsageSummary", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ResourceUsageSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of resources usage summary items", + "schema": { + "$ref": "#/definitions/v1ResourcesUsageSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves spectro clusters resources usage summary information", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/search": { + "post": { + "operationId": "v1SpectroClustersSearchFilterSummary", + "parameters": [ + { + "description": "limit is a maximum number of responses to return for a list call. Maximum value of the limit is 20.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "maximum": 20, + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SearchFilterSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster summary items", + "schema": { + "$ref": "#/definitions/v1SpectroClustersSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of cluster summary with provided search filter spec Supported sort fields - [\"environment\", \"clusterName\", \"memoryUsage\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/search/export": { + "get": { + "operationId": "v1DashboardClustersSearchSummaryExportGet", + "parameters": [ + { + "in": "query", + "name": "encodedFilter", + "type": "string" + }, + { + "default": "csv", + "enum": [ + "csv" + ], + "in": "query", + "name": "format", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + }, + "schema": { + "type": "file" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Export and download the list of cluster summary with matching search filter and download as a file(csv)", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1DashboardClustersSearchSummaryExport", + "parameters": [ + { + "default": "csv", + "enum": [ + "csv" + ], + "in": "query", + "name": "format", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SearchFilterSummarySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Export the list of cluster summary with matching search filter and download as a file(csv) Supported sort fields - [\"environment\", \"clusterName\", \"healthState\", \"creationTimestamp\", \"lastModifiedTimestamp\"]", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/search/input": { + "get": { + "operationId": "v1DashboardSpectroClustersSearchInput", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster search filter input items", + "schema": { + "$ref": "#/definitions/v1ClusterSearchInputSpec" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a supported input values for the cluster search filter", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/search/schema": { + "get": { + "operationId": "v1SpectroClustersSearchSchema", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster filter schema items", + "schema": { + "$ref": "#/definitions/v1SearchFilterSchemaSpec" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a schema for the cluster search filter", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/vms": { + "get": { + "operationId": "V1DashboardVMEnabledClustersList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of schema items", + "schema": { + "$ref": "#/definitions/v1VMClusters" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Virtual machine enabled clusters", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}": { + "get": { + "operationId": "v1SpectroClustersSummaryUid", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An spectro cluster summary", + "schema": { + "$ref": "#/definitions/v1SpectroClusterUidSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster summary", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/dashboard/spectroclusters/{uid}/cost": { + "get": { + "operationId": "v1SpectroClustersUidCostSummary", + "parameters": [ + { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "format": "date-time", + "in": "query", + "name": "startTime", + "type": "string" + }, + { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "format": "date-time", + "in": "query", + "name": "endTime", + "type": "string" + }, + { + "description": "period in minutes, group the data point by the specified period", + "format": "int32", + "in": "query", + "minimum": 60, + "name": "period", + "type": "integer" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An spectro cluster cost summary", + "schema": { + "$ref": "#/definitions/v1SpectroClusterCostSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves the specified cluster cost summary", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/dashboard/spectroclusters/{uid}/overview": { + "get": { + "operationId": "v1SpectroClustersSummaryUidOverview", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An spectro cluster summary overview", + "schema": { + "$ref": "#/definitions/v1SpectroClusterUidSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster summary overview", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/dashboard/spectroclusters/{uid}/resources/consumption": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1SpectroClustersUidResourcesConsumption", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ResourceConsumptionSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of resource consumption data items", + "schema": { + "$ref": "#/definitions/v1ResourcesConsumption" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified spectro cluster resource consumption", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}/workloads": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardSpectroClustersUidWorkloads", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster workloads", + "schema": { + "$ref": "#/definitions/v1ClusterWorkload" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified cluster workloads", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/clusterrolebinding": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardSpectroClustersUidWorkloadsClusterRoleBinding", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload clusterrolebindings", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadRoleBindings" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified cluster workload clusterrolebindings", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/cronjob": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardSpectroClustersUidWorkloadsCronJob", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload cronjobs", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadCronJobs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified cluster workload cronjobs", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/daemonset": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardSpectroClustersUidWorkloadsDaemonSet", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload daemonsets", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadDaemonSets" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified cluster workload daemonsets", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/deployment": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardSpectroClustersUidWorkloadsDeployment", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload deployments", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadDeployments" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified cluster workload deployments", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/job": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardSpectroClustersUidWorkloadsJob", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload jobs", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadJobs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified cluster workload jobs", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/namespace": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardSpectroClustersUidWorkloadsNamespace", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload namespaces", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadNamespaces" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified cluster workload namespaces", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/pod": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardSpectroClustersUidWorkloadsPod", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload pods", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadPods" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified cluster workload pods", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/rolebinding": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardSpectroClustersUidWorkloadsRoleBinding", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload rolebindings", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadRoleBindings" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified cluster workload rolebindings", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/spectroclusters/{uid}/workloads/statefulset": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardSpectroClustersUidWorkloadsStatefulSet", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster workload statefulsets", + "schema": { + "$ref": "#/definitions/v1ClusterWorkloadStatefulSets" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified cluster workload statefulsets", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/workspaces": { + "get": { + "operationId": "v1DashboardWorkspacesList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of workspace", + "schema": { + "$ref": "#/definitions/v1DashboardWorkspaces" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of workspace", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/clusterrolebinding": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsClusterRoleBinding", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of clusters workload clusterrolebindings", + "schema": { + "$ref": "#/definitions/v1WorkspaceClustersWorkloadRoleBindings" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified workspace clusters workload clusterrolebindings", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/cronjob": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsCronJob", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of clusters workload cronjobs", + "schema": { + "$ref": "#/definitions/v1WorkspaceClustersWorkloadCronJobs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified workspace clusters workload cronjobs", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/daemonset": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsDaemonSet", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of clusters workload daemonsets", + "schema": { + "$ref": "#/definitions/v1WorkspaceClustersWorkloadDaemonSets" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified workspace clusters workload daemonsets", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/deployment": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsDeployment", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of clusters workload deployments", + "schema": { + "$ref": "#/definitions/v1WorkspaceClustersWorkloadDeployments" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified workspace clusters workload deployments", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/job": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsJob", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of clusters workload jobs", + "schema": { + "$ref": "#/definitions/v1WorkspaceClustersWorkloadJobs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified workspace clusters workload jobs", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/namespace": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsNamespace", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of clusters workload namespaces", + "schema": { + "$ref": "#/definitions/v1WorkspaceClustersWorkloadNamespaces" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified workspace clusters workload namespaces", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/pod": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsPod", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of clusters workload pods", + "schema": { + "$ref": "#/definitions/v1WorkspaceClustersWorkloadPods" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified workspace clusters workload pods", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/rolebinding": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsRoleBinding", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of clusters workload rolebindings", + "schema": { + "$ref": "#/definitions/v1WorkspaceClustersWorkloadRoleBindings" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified workspace clusters workload rolebindings", + "tags": [ + "v1" + ] + } + }, + "/v1/dashboard/workspaces/{uid}/spectroclusters/workloads/statefulset": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1DashboardWorkspacesUidSpectroClustersWorkloadsStatefulSet", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceWorkloadsSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of clusters workload statefulsets", + "schema": { + "$ref": "#/definitions/v1WorkspaceClustersWorkloadStatefulSets" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves specified workspace clusters workload statefulsets", + "tags": [ + "v1" + ] + } + }, + "/v1/datasinks/cloudwatch": { + "post": { + "description": "Sync data to cloud watch", + "operationId": "V1DataSinksCloudWatchSink", + "parameters": [ + { + "description": "Request payload for cloud watch config", + "in": "body", + "name": "dataSinkCloudWatchConfig", + "required": true, + "schema": { + "$ref": "#/definitions/v1.DataSinkCloudWatchConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "sync data to cloud watch", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts": { + "get": { + "description": "Deprecated. Use POST /v1/dashboard/edgehosts/search , to retrieve all the edgehosts without pagination use GET /v1/edgehosts/metadata.", + "operationId": "v1EdgeHostDevicesList", + "parameters": [ + { + "enum": [ + "libvirt", + "edge-native", + "vsphere" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of edge host device items", + "schema": { + "$ref": "#/definitions/v1EdgeHostDevices" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieve the Complete Edgehost Metadata List", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1EdgeHostDevicesCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeHostDeviceEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create the edge host device", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/metadata": { + "get": { + "operationId": "v1EdgeHostsMetadataQuickFilterGet", + "parameters": [ + { + "enum": [ + "libvirt", + "edge-native", + "vsphere" + ], + "in": "query", + "name": "type", + "type": "string" + }, + { + "enum": [ + "unusedEdgeHosts" + ], + "in": "query", + "name": "quickFilter", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of edge host metadata", + "schema": { + "$ref": "#/definitions/v1EdgeHostsMeta" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of edge hosts metadata matching the filter condition", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/register": { + "post": { + "operationId": "v1EdgeHostDevicesRegister", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeHostDevice" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1EdgeHostDevice" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Registers the edge host device", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/tags": { + "get": { + "operationId": "v1EdgeHostsTagsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of edge hosts tags", + "schema": { + "$ref": "#/definitions/v1EdgeHostsTags" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of edge hosts tags", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/tokens": { + "get": { + "operationId": "v1EdgeTokensList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of edge tokens", + "schema": { + "$ref": "#/definitions/v1EdgeTokens" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of edge tokens", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1EdgeTokensCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeTokenEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create the edge token", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/tokens/{uid}": { + "delete": { + "operationId": "v1EdgeTokensUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified edge token", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1EdgeTokensUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1EdgeToken" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified edge token", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Edge token uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1EdgeTokensUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeTokenUpdate" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified edge token", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/tokens/{uid}/state": { + "parameters": [ + { + "description": "Edge token uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1EdgeTokensUidState", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeTokenActiveState" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Revoke or re-activate the edge token access", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}": { + "delete": { + "operationId": "v1EdgeHostDevicesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified edge host device", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1EdgeHostDevicesUidGet", + "parameters": [ + { + "default": false, + "description": "resolve pack values if set to true", + "in": "query", + "name": "resolvePackValues", + "type": "boolean" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1EdgeHostDevice" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified edge host device", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1EdgeHostDevicesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeHostDevice" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified edge host device", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}/cluster/associate": { + "delete": { + "operationId": "v1EdgeHostDevicesUidClusterDeassociate", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deassociate the clusters to the edge host", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1EdgeHostDevicesUidClusterAssociate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeHostClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Associate the clusters to the edge host", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}/health": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1EdgeHostDevicesHealthUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeHostHealth" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the edge host health", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}/hostCheckSum": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1EdgeHostDeviceHostCheckSumUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeHostDeviceHostCheckSum" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the specified edge host device host check sum", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}/hostPairingKey": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1EdgeHostDeviceHostPairingKeyUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeHostDeviceHostPairingKey" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the specified edge host device host pairing key", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}/meta": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1EdgeHostDevicesUidMetaUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeHostDeviceMetaUpdateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified edge host device meta", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}/pack/manifests/{manifestUid}": { + "get": { + "operationId": "v1EdgeHostDevicesUidPackManifestsUidGet", + "parameters": [ + { + "description": "edge host uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "manifest uid which is part of the pack ref", + "in": "path", + "name": "manifestUid", + "required": true, + "type": "string" + }, + { + "default": false, + "description": "resolve pack manifest values if set to true", + "in": "query", + "name": "resolveManifestValues", + "type": "boolean" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Pack manifest content", + "schema": { + "$ref": "#/definitions/v1Manifest" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified edge host's manifest", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}/packs/status": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1EdgeHostDevicesUidPacksStatusPatch", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterPacksStatusEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Patch update specified edge host's packs status", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}/profiles": { + "get": { + "operationId": "v1EdgeHostDevicesUidProfilesGet", + "parameters": [ + { + "description": "includes pack meta such as schema, presets", + "in": "query", + "name": "includePackMeta", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfileList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the associated profiles of a specified edge host device", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1EdgeHostDevicesUidProfilesUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfiles" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Associate cluster profiles to the specified edge host device", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}/reset": { + "parameters": [ + { + "description": "Edge host uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "V1EdgeHostsUidReset", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Reset the cluster through edge host", + "tags": [ + "v1" + ] + } + }, + "/v1/edgehosts/{uid}/spc/download": { + "get": { + "operationId": "v1EdgeHostDevicesUidSpcDownload", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download spc archive file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Download the specified edge host device spc", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/edgehosts/{uid}/vsphere/properties": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1EdgeHostDevicesUidVspherePropertiesUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EdgeHostVsphereCloudProperties" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified edge host device vsphere properties", + "tags": [ + "v1" + ] + } + }, + "/v1/events/components": { + "get": { + "description": "Returns a paginated list of component events based on request parameters", + "operationId": "v1EventsComponentsList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of component events items", + "schema": { + "$ref": "#/definitions/v1Events" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns a paginated list of component events based on request parameters", + "tags": [ + "v1" + ] + }, + "post": { + "description": "Creates a component event", + "operationId": "v1EventsComponentsCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Event" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a component event", + "tags": [ + "v1" + ] + } + }, + "/v1/events/components/bulk": { + "post": { + "description": "Creates the component events in bulk", + "operationId": "v1EventsComponentsCreateBulk", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1BulkEvents" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "schema": { + "$ref": "#/definitions/v1Uids" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates the component events in bulk", + "tags": [ + "v1" + ] + } + }, + "/v1/events/components/{objectKind}/{objectUid}": { + "delete": { + "operationId": "v1EventsComponentsObjTypeUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete all the components events for the specified related object", + "tags": [ + "v1" + ] + }, + "get": { + "description": "Returns a list of components events for the specified related object", + "operationId": "v1EventsComponentsObjTypeUidList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of component event items", + "schema": { + "$ref": "#/definitions/v1Events" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns a list of components events for the specified related object", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Describes the related object uid for which events has to be fetched", + "enum": [ + "spectrocluster", + "edgehost" + ], + "in": "path", + "name": "objectKind", + "required": true, + "type": "string" + }, + { + "description": "Describes the related object kind for which events has to be fetched", + "in": "path", + "name": "objectUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/features": { + "get": { + "operationId": "v1FeaturesList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Features" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves the list of features", + "tags": [ + "v1" + ] + } + }, + "/v1/features/{uid}": { + "parameters": [ + { + "description": "Specify the feature uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1FeaturesUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1FeatureUpdate" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update a feature", + "tags": [ + "v1" + ] + } + }, + "/v1/filters": { + "get": { + "operationId": "v1FiltersList", + "parameters": [ + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of filters", + "schema": { + "$ref": "#/definitions/v1FiltersSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns a list of Filters", + "tags": [ + "v1" + ] + } + }, + "/v1/filters/metadata": { + "get": { + "operationId": "v1FiltersMetadata", + "parameters": [ + { + "description": "filterType can be - [tag, meta, resource]", + "in": "query", + "name": "filterType", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of filters", + "schema": { + "$ref": "#/definitions/v1FiltersMetadata" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns a list of Filters metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/filters/tag": { + "post": { + "operationId": "v1TagFiltersCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TagFilter" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a Tag filter", + "tags": [ + "v1" + ] + } + }, + "/v1/filters/tag/{uid}": { + "delete": { + "operationId": "v1TagFilterUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the specified Filter object", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1TagFilterUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "A Filter object", + "schema": { + "$ref": "#/definitions/v1TagFilterSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Filter object", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1TagFilterUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TagFilter" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates a Tag filter", + "tags": [ + "v1" + ] + } + }, + "/v1/metrics/{resourceKind}/values": { + "get": { + "description": "Returns all the metrics for a given resource kind", + "operationId": "v1MetricsList", + "parameters": [ + { + "enum": [ + "pod", + "namespace", + "spectrocluster", + "machine", + "project" + ], + "in": "path", + "name": "resourceKind", + "required": true, + "type": "string" + }, + { + "default": "all", + "in": "query", + "name": "metricKind", + "type": "string" + }, + { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "format": "date-time", + "in": "query", + "name": "startTime", + "type": "string" + }, + { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "format": "date-time", + "in": "query", + "name": "endTime", + "type": "string" + }, + { + "default": 1, + "format": "int32", + "in": "query", + "name": "period", + "type": "integer" + }, + { + "default": false, + "description": "Deprecated. includeMasterMachines in boolean, group the data point by including control plane nodes if set to true", + "in": "query", + "name": "includeMasterMachines", + "type": "boolean" + }, + { + "default": false, + "description": "includeControlPlaneMachines in boolean, group the data point by including control plane nodes if set to true", + "in": "query", + "name": "includeControlPlaneMachines", + "type": "boolean" + }, + { + "default": false, + "description": "if true then api returns only aggregation values, else api returns all data points by default", + "in": "query", + "name": "discrete", + "type": "boolean" + }, + { + "in": "query", + "name": "spectroClusterUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of metric items", + "schema": { + "$ref": "#/definitions/v1MetricTimeSeriesList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves the list of metrics for a specified resource kind", + "tags": [ + "v1" + ] + } + }, + "/v1/metrics/{resourceKind}/{resourceUid}/values": { + "delete": { + "operationId": "v1MetricsUidDelete", + "parameters": [ + { + "enum": [ + "pod", + "namespace", + "spectrocluster", + "machine", + "project" + ], + "in": "path", + "name": "resourceKind", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "resourceUid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the metrics of the specified resource", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1MetricsUidList", + "parameters": [ + { + "enum": [ + "pod", + "namespace", + "spectrocluster", + "machine", + "project" + ], + "in": "path", + "name": "resourceKind", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "resourceUid", + "required": true, + "type": "string" + }, + { + "default": "all", + "description": "multiple metric kinds can be provided with comma separated", + "in": "query", + "name": "metricKind", + "type": "string" + }, + { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "format": "date-time", + "in": "query", + "name": "startTime", + "type": "string" + }, + { + "description": "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", + "format": "date-time", + "in": "query", + "name": "endTime", + "type": "string" + }, + { + "default": 1, + "description": "period in minutes, group the data point by the specified period", + "format": "int32", + "in": "query", + "name": "period", + "type": "integer" + }, + { + "default": false, + "description": "Deprecated. includeMasterMachines in boolean, group the data point by including control plane nodes if set to true", + "in": "query", + "name": "includeMasterMachines", + "type": "boolean" + }, + { + "default": false, + "description": "includeControlPlaneMachines in boolean, group the data point by including control plane nodes if set to true", + "in": "query", + "name": "includeControlPlaneMachines", + "type": "boolean" + }, + { + "default": false, + "description": "if true then api returns only aggregation values, else api returns all data points by default", + "in": "query", + "name": "discrete", + "type": "boolean" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of metric items", + "schema": { + "$ref": "#/definitions/v1MetricTimeSeries" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the metrics for a specified resource uid", + "tags": [ + "v1" + ] + } + }, + "/v1/notifications/": { + "get": { + "description": "Returns a paginated list of notifications based on request parameters", + "operationId": "v1NotificationsList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of notification items", + "schema": { + "$ref": "#/definitions/v1Notifications" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns a paginated list of notifications based on request parameters", + "tags": [ + "v1" + ] + } + }, + "/v1/notifications/events": { + "post": { + "description": "Creates a notification event", + "operationId": "v1NotificationsEventCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1NotificationEvent" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a notification event", + "tags": [ + "v1" + ] + } + }, + "/v1/notifications/{objectKind}/{objectUid}": { + "get": { + "description": "Returns a list of notifications for the specified related object", + "operationId": "v1NotificationsObjTypeUidList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of component event items", + "schema": { + "$ref": "#/definitions/v1Notifications" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns a list of notifications for the specified related object", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Describes the related object kind for which notifications have to be fetched", + "enum": [ + "spectrocluster", + "clusterprofile", + "appdeployment" + ], + "in": "path", + "name": "objectKind", + "required": true, + "type": "string" + }, + { + "description": "Describes the related object uid for which notifications have to be fetched", + "in": "path", + "name": "objectUid", + "required": true, + "type": "string" + }, + { + "description": "Describes a way to fetch \"done\" notifications", + "in": "query", + "name": "isDone", + "type": "string" + } + ] + }, + "/v1/notifications/{uid}/ack": { + "parameters": [ + { + "description": "Describes acknowledging notification uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "description": "Updates the specified notification for the acknowledgment", + "operationId": "v1NotificationsUidAck", + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified notification for the acknowledgment", + "tags": [ + "v1" + ] + } + }, + "/v1/notifications/{uid}/done": { + "parameters": [ + { + "description": "Describes notification uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "description": "Updates the specified notification action as done", + "operationId": "v1NotificationsUidDone", + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified notification action as done", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords": { + "get": { + "operationId": "v1OverlordsList", + "parameters": [ + { + "in": "query", + "name": "name", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1Overlords" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of overlords owned by the tenant", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/maas/manifest": { + "get": { + "operationId": "V1OverlordsMaasManifest", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OverlordManifest" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the manifests required for the private gateway installation", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "query", + "name": "pairingCode", + "required": true, + "type": "string" + } + ] + }, + "/v1/overlords/maas/{uid}/account": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1OverlordsUidMaasAccountCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordMaasAccountCreate" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "create the maas cloudaccount for the private gateway", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1OverlordsUidMaasAccountUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordMaasAccountEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "update the maas cloudaccount for the private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/maas/{uid}/account/validate": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1OverlordsUidMaasAccountValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "properties": { + "account": { + "$ref": "#/definitions/v1MaasCloudAccount" + } + } + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "validate the maas cloudaccount for the private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/maas/{uid}/cloudconfig": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "V1OverlordsUidMaasCloudConfigCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordMaasCloudConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "create the maas cloud config for the private gateway", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "V1OverlordsUidMaasCloudConfigUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordMaasCloudConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "update the maas cloud config for the private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/maas/{uid}/clusterprofile": { + "get": { + "operationId": "v1OverlordsUidMaasClusterProfile", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterProfile" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified maas private gateway cluster profile", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/overlords/migrate": { + "post": { + "operationId": "V1OverlordsMigrate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordMigrateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "migrate all the clusters from source overlord to target overlord", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/openstack/manifest": { + "get": { + "operationId": "v1OverlordsOpenStackManifest", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OverlordManifest" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the manifests required for the private gateway installation", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "query", + "name": "pairingCode", + "required": true, + "type": "string" + } + ] + }, + "/v1/overlords/openstack/{uid}/account": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1OverlordsUidOpenStackAccountCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordOpenStackAccountCreate" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "create the OpenStack cloudaccount for the private gateway", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1OverlordsUidOpenStackAccountUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordOpenStackAccountEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "update the OpenStack cloudaccount for the private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/openstack/{uid}/account/validate": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1OverlordsUidOpenStackAccountValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "properties": { + "account": { + "$ref": "#/definitions/v1OpenStackCloudAccount" + } + } + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "validate the OpenStack cloudaccount for the private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/openstack/{uid}/cloudconfig": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1OverlordsUidOpenStackCloudConfigCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordOpenStackCloudConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "create the OpenStack cloud config for the private gateway", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1OverlordsUidOpenStackCloudConfigUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordOpenStackCloudConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "update the OpenStack cloud config for the private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/openstack/{uid}/clusterprofile": { + "get": { + "operationId": "v1OverlordsUidOpenStackClusterProfile", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterProfile" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified OpenStack private gateway cluster profile", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/overlords/pairing/code": { + "get": { + "operationId": "v1OverlordsPairingCode", + "parameters": [ + { + "enum": [ + "vsphere", + "openstack", + "maas" + ], + "in": "query", + "name": "cloudType", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1PairingCode" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the pairing code for the private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/vsphere/manifest": { + "get": { + "operationId": "v1OverlordsVsphereManifest", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OverlordManifest" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the manifests required for the private gateway installation", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "query", + "name": "pairingCode", + "required": true, + "type": "string" + } + ] + }, + "/v1/overlords/vsphere/ova": { + "get": { + "operationId": "v1OverlordsVsphereOvaGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OverloadVsphereOva" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns overlord's ova information", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/vsphere/{uid}/account": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1OverlordsUidVsphereAccountCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordVsphereAccountCreate" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "create the vSphere cloudaccount for the private gateway", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1OverlordsUidVsphereAccountUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordVsphereAccountEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "update the vSphere cloudaccount for the private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/vsphere/{uid}/account/validate": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1OverlordsUidVsphereAccountValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "properties": { + "account": { + "$ref": "#/definitions/v1VsphereCloudAccount" + } + } + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "validate the vSphere cloudaccount for the private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/vsphere/{uid}/cloudconfig": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1OverlordsUidVsphereCloudConfigCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordVsphereCloudConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "create the vSphere cloud config for the private gateway", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1OverlordsUidVsphereCloudConfigUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OverlordVsphereCloudConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "update the vSphere cloud config for the private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/vsphere/{uid}/clusterprofile": { + "get": { + "operationId": "v1OverlordsUidVsphereClusterProfile", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterProfile" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified vsphere private gateway cluster profile", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/overlords/vsphere/{uid}/pools": { + "get": { + "operationId": "v1OverlordsUidPoolsList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1IpPools" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of IP Pools for the specified private gateway", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1OverlordsUidPoolCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1IpPoolInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an IP pool defintion for the sepcified private gateway", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/vsphere/{uid}/pools/{poolUid}": { + "delete": { + "operationId": "v1OverlordsUidPoolDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the private gateways's specified IP Pool data", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "poolUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1OverlordsUidPoolUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1IpPoolInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the private gateways's specified IP Pool data", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/vsphere/{uid}/properties/computecluster/resources": { + "get": { + "operationId": "v1OverlordsUidVsphereComputeclusterRes", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VsphereComputeClusterResources" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves the vSphere computecluster resources for the specified private gateway's account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "datacenter", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "computecluster", + "required": true, + "type": "string" + } + ] + }, + "/v1/overlords/vsphere/{uid}/properties/datacenters": { + "get": { + "operationId": "v1OverlordsUidVsphereDatacenters", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VsphereDatacenters" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves the vSphere datacenters \u0026 datacluster for the specified private gateway's account", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/overlords/{uid}": { + "delete": { + "operationId": "v1OverlordsUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1DeletedMsg" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "delete the private gateway", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1OverlordsUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1Overlord" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified private gateway's for the given uid", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/overlords/{uid}/metadata": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1OverlordsUidMetadataUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ObjectMetaInputEntitySchema" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "update the private gateway's metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/overlords/{uid}/reset": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1OverlordsUidReset", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1UpdatedMsg" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "reset the private gateway by disaaociating the private gateway's resources", + "tags": [ + "v1" + ] + } + }, + "/v1/packs": { + "delete": { + "operationId": "v1PacksSummaryDelete", + "parameters": [ + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1DeleteMeta" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the packs", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1PacksSummaryList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of pack summary items", + "schema": { + "$ref": "#/definitions/v1PackSummaries" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of packs", + "tags": [ + "v1" + ] + } + }, + "/v1/packs/search": { + "post": { + "operationId": "v1PacksSearch", + "parameters": [ + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1PacksFilterSpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of pack summary items", + "schema": { + "$ref": "#/definitions/v1PackMetadataList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of packs based on filter", + "tags": [ + "v1" + ] + } + }, + "/v1/packs/{packName}/registries/{registryUid}": { + "get": { + "operationId": "v1PacksNameRegistryUidList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1PackTagEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of packs", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Pack registry uid", + "in": "path", + "name": "registryUid", + "required": true, + "type": "string" + }, + { + "description": "Pack name", + "in": "path", + "name": "packName", + "required": true, + "type": "string" + }, + { + "default": "all", + "description": "Pack cloud type", + "in": "query", + "name": "cloudType", + "type": "string" + }, + { + "description": "Pack layer", + "in": "query", + "name": "layer", + "type": "string" + }, + { + "description": "Comma seperated pack states. Example values are \"deprecated\" \"deprecated,disabled\". If states is not specified or empty then by default API will return all packs except \"disabled\" packs", + "in": "query", + "name": "states", + "type": "string" + } + ] + }, + "/v1/packs/{packUid}/logo": { + "get": { + "operationId": "v1PacksPackUidLogo", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "image/png", + "image/gif", + "image/jpeg" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Cache-Control": { + "description": "Cache control directive for the response", + "type": "string" + }, + "Expires": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the logo for a specified pack", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Pack uid", + "in": "path", + "name": "packUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/packs/{uid}": { + "get": { + "operationId": "v1PacksUid", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "A pack for the specified uid", + "schema": { + "$ref": "#/definitions/v1PackTagEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified pack", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Pack uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/packs/{uid}/readme": { + "get": { + "operationId": "v1PacksUidReadme", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Readme describes the documentation of the specified pack", + "schema": { + "$ref": "#/definitions/v1PackReadme" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the readme of a specified pack", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Pack uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/pcg/selfHosted": { + "post": { + "operationId": "v1PcgSelfHosted", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1PcgSelfHostedParams" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1PcgServiceKubectlCommands" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the private gateway manifest link", + "tags": [ + "v1" + ] + } + }, + "/v1/pcg/{uid}/register": { + "post": { + "operationId": "v1PcgUidRegister", + "parameters": [ + { + "in": "body", + "name": "pairingCode", + "schema": { + "$ref": "#/definitions/v1PairingCode" + } + }, + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Registers the pcg", + "tags": [ + "v1" + ] + } + }, + "/v1/pcg/{uid}/services/ally/manifest": { + "get": { + "operationId": "v1PcgUidAllyManifestGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the pcg ally manifest", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/pcg/{uid}/services/jet/manifest": { + "get": { + "operationId": "v1PcgUidJetManifestGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the pcg jet manifest", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/permissions": { + "get": { + "operationId": "v1PermissionsList", + "parameters": [ + { + "enum": [ + "system", + "tenant", + "project", + "resource" + ], + "in": "query", + "name": "scope", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of permissions", + "schema": { + "$ref": "#/definitions/v1Permissions" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of permissions", + "tags": [ + "v1" + ] + } + }, + "/v1/projects": { + "get": { + "description": "Deprecated: Use POST /v1/dashboard/projects", + "operationId": "v1ProjectsList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of projects", + "schema": { + "$ref": "#/definitions/v1Projects" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of projects", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1ProjectsCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ProjectEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a project", + "tags": [ + "v1" + ] + } + }, + "/v1/projects/alerts": { + "get": { + "operationId": "v1ProjectsAlerts", + "responses": { + "200": { + "description": "An array of alert components", + "schema": { + "$ref": "#/definitions/v1ProjectAlertComponents" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of supported alerts for a project", + "tags": [ + "v1" + ] + } + }, + "/v1/projects/{uid}": { + "delete": { + "operationId": "v1ProjectsUidDelete", + "parameters": [ + { + "in": "query", + "name": "cleanupProjectResources", + "type": "boolean" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ProjectCleanup" + } + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified project", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1ProjectsUidGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Project" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified project", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ProjectsUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ProjectEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified project", + "tags": [ + "v1" + ] + } + }, + "/v1/projects/{uid}/alerts/{component}": { + "delete": { + "operationId": "v1ProjectsUidAlertDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified alert to the specified project", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "component", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1ProjectsUidAlertCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Channel" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create the specified alert to the specified project", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1ProjectsUidAlertUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AlertEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Upsert the specified alert to the specified project", + "tags": [ + "v1" + ] + } + }, + "/v1/projects/{uid}/alerts/{component}/{alertUid}": { + "delete": { + "operationId": "v1ProjectsUidAlertsUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified alert of the specified project", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1ProjectsUidAlertsUidGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Channel" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the specified alert of the specified project", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "component", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "alertUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ProjectsUidAlertsUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Channel" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the specified alert of the specified project", + "tags": [ + "v1" + ] + } + }, + "/v1/projects/{uid}/macros": { + "delete": { + "operationId": "v1ProjectsUidMacrosDeleteByMacroName", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the macros for the specified project by macro name", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1ProjectsUidMacrosList", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "List the macros of the specified project", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1ProjectsUidMacrosUpdateByMacroName", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the macros for the specified project by macro name", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1ProjectsUidMacrosCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create or add new macros for the specified project", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1ProjectsUidMacrosUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the macros of the specified project", + "tags": [ + "v1" + ] + } + }, + "/v1/projects/{uid}/meta": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ProjectsUidMetaUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ObjectMeta" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the metadata of the specified project", + "tags": [ + "v1" + ] + } + }, + "/v1/projects/{uid}/preferences/clusterSettings": { + "get": { + "operationId": "v1ProjectClusterSettingsGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1ProjectClusterSettings" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get project cluster settings", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/projects/{uid}/preferences/clusterSettings/nodesAutoRemediationSetting": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ProjectClustersNodesAutoRemediationSettingUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1NodesAutoRemediationSettings" + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update project clusters nodes auto remediation setting", + "tags": [ + "v1" + ] + } + }, + "/v1/projects/{uid}/teams": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ProjectsUidTeamsUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ProjectTeamsEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the teams association to the specified project", + "tags": [ + "v1" + ] + } + }, + "/v1/projects/{uid}/users": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ProjectsUidUsersUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ProjectUsersEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the users association to the specified project", + "tags": [ + "v1" + ] + } + }, + "/v1/projects/{uid}/validate": { + "delete": { + "operationId": "v1ProjectsUidValidate", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1ProjectActiveResources" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validate and returns active resource of project before delete", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/registries/helm": { + "get": { + "operationId": "v1RegistriesHelmList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of registry items", + "schema": { + "$ref": "#/definitions/v1HelmRegistries" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Helm registries", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "default": "all", + "enum": [ + "system", + "tenant", + "all" + ], + "in": "query", + "name": "scope", + "type": "string" + } + ], + "post": { + "operationId": "v1RegistriesHelmCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1HelmRegistryEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a helm registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/helm/summary": { + "get": { + "operationId": "v1RegistriesHelmSummaryList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of registry items", + "schema": { + "$ref": "#/definitions/v1HelmRegistriesSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of helm registries as summary", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "default": "all", + "enum": [ + "system", + "tenant", + "all" + ], + "in": "query", + "name": "scope", + "type": "string" + } + ] + }, + "/v1/registries/helm/validate": { + "post": { + "description": "Returns no contents if helm registry is valid else error.", + "operationId": "V1RegistriesHelmValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1HelmRegistrySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Check if helm registry is valid", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/helm/{uid}": { + "delete": { + "operationId": "v1RegistriesHelmUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified helm registry", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1RegistriesHelmUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1HelmRegistry" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Helm registry", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1RegistriesHelmUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1HelmRegistry" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified helm registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/helm/{uid}/sync": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "default": false, + "in": "query", + "name": "forceSync", + "type": "boolean" + } + ], + "post": { + "description": "Sync all the helm charts from the registry", + "operationId": "v1RegistriesHelmUidSync", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Sync Helm registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/helm/{uid}/sync/status": { + "get": { + "description": "Get the sync status for the specified helm registry", + "operationId": "v1RegistriesHelmUidSyncStatus", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Helm registry sync status", + "schema": { + "$ref": "#/definitions/v1RegistrySyncStatus" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get helm registry sync status", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/registries/metadata": { + "get": { + "operationId": "v1RegistriesMetadata", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of registry metadata items", + "schema": { + "$ref": "#/definitions/v1RegistriesMetadata" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of registries metadata", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "default": "all", + "enum": [ + "system", + "tenant", + "all" + ], + "in": "query", + "name": "scope", + "type": "string" + } + ] + }, + "/v1/registries/oci/basic": { + "post": { + "operationId": "v1BasicOciRegistriesCreate", + "parameters": [ + { + "default": false, + "in": "query", + "name": "skipPackSync", + "type": "boolean" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1BasicOciRegistry" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a basic oci registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/oci/basic/validate": { + "post": { + "description": "Returns no contents if oci registry is valid else error.", + "operationId": "v1BasicOciRegistriesValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1BasicOciRegistrySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Check if oci registry is valid", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/oci/ecr": { + "post": { + "operationId": "v1EcrRegistriesCreate", + "parameters": [ + { + "default": false, + "in": "query", + "name": "skipPackSync", + "type": "boolean" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EcrRegistry" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a ecr registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/oci/ecr/validate": { + "post": { + "description": "Returns no contents if ecr registry is valid else error.", + "operationId": "v1EcrRegistriesValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1EcrRegistrySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Check if ecr registry is valid", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/oci/image": { + "get": { + "operationId": "v1OciImageRegistryGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1OciImageRegistry" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a image registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/oci/summary": { + "get": { + "operationId": "v1OciRegistriesSummary", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of oci registry items", + "schema": { + "$ref": "#/definitions/v1OciRegistries" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a oci registries summary", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/oci/{uid}": { + "get": { + "operationId": "v1OciRegistriesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1OciRegistryEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the information of specified oci registry", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "clusterUid", + "type": "string" + } + ] + }, + "/v1/registries/oci/{uid}/basic": { + "delete": { + "operationId": "v1BasicOciRegistriesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified basic oci registry", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1BasicOciRegistriesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1BasicOciRegistry" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the basic oci registry", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1BasicOciRegistriesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1BasicOciRegistry" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified basic oci registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/oci/{uid}/basic/sync": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "default": false, + "in": "query", + "name": "forceSync", + "type": "boolean" + } + ], + "post": { + "description": "Sync all the content from the oci registry", + "operationId": "v1BasicOciRegistriesUidSync", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Sync oci registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/oci/{uid}/basic/sync/status": { + "get": { + "description": "Get sync status for the oci specified registry", + "operationId": "v1BasicOciRegistriesUidSyncStatus", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Oci registry sync status", + "schema": { + "$ref": "#/definitions/v1RegistrySyncStatus" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get oci registry sync status", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/registries/oci/{uid}/ecr": { + "delete": { + "operationId": "v1EcrRegistriesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified ecr registry", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1EcrRegistriesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1EcrRegistry" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified ecr registry", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1EcrRegistriesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1EcrRegistry" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified ecr registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/oci/{uid}/ecr/sync": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "default": false, + "in": "query", + "name": "forceSync", + "type": "boolean" + } + ], + "post": { + "description": "Sync all the content from the ecr registry", + "operationId": "v1EcrRegistriesUidSync", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Sync ecr registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/oci/{uid}/ecr/sync/status": { + "get": { + "description": "Get sync status for the ecr specified registry", + "operationId": "v1EcrRegistriesUidSyncStatus", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Ecr registry sync status", + "schema": { + "$ref": "#/definitions/v1RegistrySyncStatus" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get ecr registry sync status", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/registries/pack": { + "get": { + "operationId": "v1RegistriesPackList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of registry items", + "schema": { + "$ref": "#/definitions/v1PackRegistries" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of Pack registries", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "default": "all", + "enum": [ + "system", + "tenant", + "all" + ], + "in": "query", + "name": "scope", + "type": "string" + } + ], + "post": { + "operationId": "v1RegistriesPackCreate", + "parameters": [ + { + "default": false, + "in": "query", + "name": "skipPackSync", + "type": "boolean" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1PackRegistry" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a pack registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/pack/summary": { + "get": { + "operationId": "v1RegistriesPackSummaryList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of registry items", + "schema": { + "$ref": "#/definitions/v1PackRegistriesSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of pack registries as summary", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "default": "all", + "enum": [ + "system", + "tenant", + "all" + ], + "in": "query", + "name": "scope", + "type": "string" + } + ] + }, + "/v1/registries/pack/validate": { + "post": { + "description": "Returns no contents if pack registry is valid else error.", + "operationId": "V1RegistriesPackValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1PackRegistrySpec" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Check if pack registry is valid", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/pack/{uid}": { + "delete": { + "operationId": "v1RegistriesPackUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified pack registry", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1RegistriesPackUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1PackRegistry" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Pack registry", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1RegistriesPackUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1PackRegistry" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified pack registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/pack/{uid}/sync": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "default": false, + "in": "query", + "name": "forceSync", + "type": "boolean" + } + ], + "post": { + "description": "Sync all the packs from the registry", + "operationId": "v1RegistriesPackUidSync", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Sync Pack registry", + "tags": [ + "v1" + ] + } + }, + "/v1/registries/pack/{uid}/sync/status": { + "get": { + "description": "Get sync status for the pack specified registry", + "operationId": "v1RegistriesPackUidSyncStatus", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Pack registry sync status", + "schema": { + "$ref": "#/definitions/v1RegistrySyncStatus" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get pack registry sync status", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/registries/{registryName}/config": { + "get": { + "operationId": "v1RegistriesNameConfigGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1RegistryConfigEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified system scope registry configuration", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "registryName", + "required": true, + "type": "string" + } + ] + }, + "/v1/registries/{uid}": { + "delete": { + "operationId": "v1RegistriesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified registry", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/roles": { + "get": { + "operationId": "v1RolesList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Roles" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of roles", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1RolesCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Role" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a role with specified permissions", + "tags": [ + "v1" + ] + } + }, + "/v1/roles/{uid}": { + "delete": { + "operationId": "v1RolesUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified role", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1RolesUidGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Role" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified role", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1RolesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Role" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified role", + "tags": [ + "v1" + ] + } + }, + "/v1/roles/{uid}/clone": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1RolesClone", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1RoleClone" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Clone the role", + "tags": [ + "v1" + ] + } + }, + "/v1/services/{serviceName}/version": { + "get": { + "operationId": "v1ServiceVersionGet", + "parameters": [ + { + "description": "service name", + "enum": [ + "ally", + "jet", + "palette", + "ambit", + "ally-lite", + "palette-lite", + "crony", + "tick", + "edge", + "lodge", + "level", + "edgeconfig", + "firth", + "stylus" + ], + "in": "path", + "name": "serviceName", + "required": true, + "type": "string" + }, + { + "description": "spectro cluster uid", + "in": "query", + "name": "clusterUid", + "type": "string" + }, + { + "description": "edge host uid", + "in": "query", + "name": "edgeHostUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ServiceVersion" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns a latest version for a given service name", + "tags": [ + "v1" + ] + } + }, + "/v1/services/{serviceName}/versions/{version}/manifest": { + "get": { + "operationId": "v1ServiceManifestGet", + "parameters": [ + { + "description": "service name", + "enum": [ + "ally", + "jet", + "palette", + "ambit", + "ally-lite", + "palette-lite", + "crony", + "tick", + "edge", + "lodge", + "level", + "edgeconfig", + "firth", + "stylus" + ], + "in": "path", + "name": "serviceName", + "required": true, + "type": "string" + }, + { + "description": "service version", + "in": "path", + "name": "version", + "required": true, + "type": "string" + }, + { + "description": "action type", + "enum": [ + "apply", + "delete", + "resources" + ], + "in": "query", + "name": "action", + "required": true, + "type": "string" + }, + { + "description": "resource file name", + "in": "query", + "name": "resourceFilename", + "type": "string" + }, + { + "description": "spectro cluster uid", + "in": "query", + "name": "clusterUid", + "type": "string" + }, + { + "description": "edge host uid", + "in": "query", + "name": "edgeHostUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ServiceManifest" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns a service manifest for a given service name and version", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/aks": { + "post": { + "operationId": "v1SpectroClustersAksCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAzureClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an AKS cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/aks/rate": { + "post": { + "operationId": "v1SpectroClustersAksRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAzureClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Aks Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get AKS cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/aks/validate": { + "post": { + "operationId": "v1SpectroClustersAksValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAzureClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Aks Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates AKS cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/aws": { + "post": { + "operationId": "v1SpectroClustersAwsCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAwsClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an AWS cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/aws/import": { + "post": { + "operationId": "v1SpectroClustersAwsImport", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAwsClusterImportEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Imports an AWS cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/aws/rate": { + "post": { + "operationId": "v1SpectroClustersAwsRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAwsClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Aws Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get AWS cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/aws/validate": { + "post": { + "operationId": "v1SpectroClustersAwsValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAwsClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Aws Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates AWS cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/azure": { + "post": { + "operationId": "v1SpectroClustersAzureCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAzureClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an Azure cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/azure/import": { + "post": { + "operationId": "v1SpectroClustersAzureImport", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAzureClusterImportEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Imports an Azure cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/azure/rate": { + "post": { + "operationId": "v1SpectroClustersAzureRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAzureClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Azure Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get Azure cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/azure/validate": { + "post": { + "operationId": "v1SpectroClustersAzureValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroAzureClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Azure Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates Azure cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/cloudTypes/{cloudType}": { + "parameters": [ + { + "description": "Cluster's cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1SpectroClustersCustomCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroCustomClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a Custom cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/cloudTypes/{cloudType}/validate": { + "parameters": [ + { + "description": "Cluster's cloud type", + "in": "path", + "name": "cloudType", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1SpectroClustersCustomValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroCustomClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Custom Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates Custom cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/edge-native": { + "post": { + "operationId": "v1SpectroClustersEdgeNativeCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroEdgeNativeClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an EdgeNative cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/edge-native/import": { + "post": { + "operationId": "v1SpectroClustersEdgeNativeImport", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroEdgeNativeClusterImportEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Imports an EdgeNative cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/edge-native/rate": { + "post": { + "operationId": "v1SpectroClustersEdgeNativeRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroEdgeNativeClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "EdgeNative Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get edge-native cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/edge-native/validate": { + "post": { + "operationId": "v1SpectroClustersEdgeNativeValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroEdgeNativeClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "EdgeNative Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates edge-native cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/eks": { + "post": { + "operationId": "v1SpectroClustersEksCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroEksClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an EKS cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/eks/rate": { + "post": { + "operationId": "v1SpectroClustersEksRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroEksClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Eks Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get EKS cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/eks/validate": { + "post": { + "operationId": "v1SpectroClustersEksValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroEksClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Eks Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates EKS cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/features/backup/locations/{uid}": { + "get": { + "operationId": "V1ClusterFeatureBackupLocationUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterRefs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the cluster object references based on locationUid", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "V1ClusterFeatureBackupLocationUidChange", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterBackupLocationType" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Change cluster backup location", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/features/logFetcher/{uid}/download": { + "get": { + "operationId": "v1ClusterFeatureLogFetcherLogDownload", + "parameters": [ + { + "in": "query", + "name": "fileName", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + }, + "schema": { + "type": "file" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Download log fetcher logs for cluster by log fetcher uid", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid for which log is requested", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/features/logFetcher/{uid}/log": { + "parameters": [ + { + "description": "Cluster uid for which log is requested", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "consumes": [ + "multipart/form-data" + ], + "operationId": "v1ClusterFeatureLogFetcherLogUpdate", + "parameters": [ + { + "description": "Log file by agent", + "in": "formData", + "name": "fileName", + "type": "file" + }, + { + "description": "Unique request Id", + "in": "query", + "name": "requestId", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update log fetcher logs by log fetcher uid", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/gcp": { + "post": { + "operationId": "v1SpectroClustersGcpCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroGcpClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a GCP cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/gcp/import": { + "post": { + "operationId": "v1SpectroClustersGcpImport", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroGcpClusterImportEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Imports a GCP cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/gcp/rate": { + "post": { + "operationId": "v1SpectroClustersGcpRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroGcpClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Gcp Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get GCP cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/gcp/validate": { + "post": { + "operationId": "v1SpectroClustersGcpValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroGcpClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Gcp Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates GCP cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/generic/import": { + "post": { + "description": "The machines information will be captured, whereas the cloud specific configuration info will not be retrieved", + "operationId": "v1SpectroClustersGenericImport", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroGenericClusterImportEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Imports a cluster of any cloud type in generic way", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/generic/rate": { + "post": { + "operationId": "v1SpectroClustersGenericRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroGenericClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Genric Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get generic cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/gke": { + "post": { + "operationId": "v1SpectroClustersGkeCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroGcpClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates an GKE cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/gke/rate": { + "post": { + "operationId": "v1SpectroClustersGkeRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroGcpClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Gke Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get GKE cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/gke/validate": { + "post": { + "operationId": "v1SpectroClustersGkeValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroGcpClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Gke Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates GKE cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/maas": { + "post": { + "operationId": "v1SpectroClustersMaasCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroMaasClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a MAAS cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/maas/import": { + "post": { + "operationId": "v1SpectroClustersMaasImport", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroMaasClusterImportEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Imports a Maas cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/maas/rate": { + "post": { + "operationId": "v1SpectroClustersMaasRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroMaasClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Maas Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get maas cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/maas/validate": { + "post": { + "operationId": "v1SpectroClustersMaasValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroMaasClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Maas Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates MAAS cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/openstack": { + "post": { + "operationId": "v1SpectroClustersOpenStackCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroOpenStackClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a OpenStack cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/openstack/import": { + "post": { + "operationId": "v1SpectroClustersOpenStackImport", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroOpenStackClusterImportEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Imports an OpenStack cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/openstack/rate": { + "post": { + "operationId": "v1SpectroClustersOpenStackRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroOpenStackClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Openstack Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get openstack cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/openstack/validate": { + "post": { + "operationId": "v1SpectroClustersOpenStackValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroOpenStackClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "vSphere Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates OpenStack cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/spc/download": { + "post": { + "operationId": "v1SpectroClustersSpcDownload", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterDefinitionEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "Cluster definition archive file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Downloads the cluster definition archive file", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/tke": { + "post": { + "operationId": "v1SpectroClustersTkeCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroTencentClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a Tke cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/tke/rate": { + "post": { + "operationId": "v1SpectroClustersTkeRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroTencentClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Tke Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get TKE cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/tke/validate": { + "post": { + "operationId": "v1SpectroClustersTkeValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroTencentClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Tke Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates TKE cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/upgrade/settings": { + "get": { + "operationId": "v1SpectroClustersUpgradeSettingsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1ClusterUpgradeSettingsEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get cluster settings by context", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/validate/name": { + "get": { + "operationId": "v1SpectroClustersValidateName", + "parameters": [ + { + "description": "Cluster name", + "in": "query", + "name": "name", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates the cluster name", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/validate/packs": { + "post": { + "operationId": "v1SpectroClustersValidatePacks", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterPacksEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster packs validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates spectro cluster packs", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/virtual": { + "post": { + "operationId": "v1SpectroClustersVirtualCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroVirtualClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a virtual cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/virtual/packs/values": { + "get": { + "operationId": "v1VirtualClustersPacksValues", + "parameters": [ + { + "default": "k3s", + "description": "Kubernetes distribution type", + "enum": [ + "k3s", + "cncf_k8s" + ], + "in": "query", + "name": "kubernetesDistroType", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Successful response", + "schema": { + "$ref": "#/definitions/v1ClusterVirtualPacksValues" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the cluster pack values yaml", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/virtual/validate": { + "post": { + "operationId": "v1SpectroClustersVirtualValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroVirtualClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Virtual Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates virtual cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/vsphere": { + "post": { + "operationId": "v1SpectroClustersVsphereCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroVsphereClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a vSphere cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/vsphere/import": { + "post": { + "operationId": "v1SpectroClustersVsphereImport", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroVsphereClusterImportEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Imports a vSphere cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/vsphere/rate": { + "post": { + "operationId": "v1SpectroClustersVsphereRate", + "parameters": [ + { + "default": "hourly", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroVsphereClusterRateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Vsphere Cluster estimated rate response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get vSphere cluster estimated rate information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/vsphere/validate": { + "post": { + "operationId": "v1SpectroClustersVsphereValidate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroVsphereClusterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "vSphere Cluster validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates vSphere cluster create operation", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}": { + "delete": { + "operationId": "v1SpectroClustersDelete", + "parameters": [ + { + "description": "If set to true the cluster will be force deleted and user has to manually clean up the provisioned cloud resources", + "in": "query", + "name": "forceDelete", + "type": "boolean" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified cluster", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1SpectroClustersGet", + "parameters": [ + { + "description": "Comma separated tags like system,profile", + "in": "query", + "name": "includeTags", + "type": "string" + }, + { + "default": false, + "description": "Resolve pack values if set to true", + "in": "query", + "name": "resolvePackValues", + "type": "boolean" + }, + { + "description": "Includes pack meta such as schema, presets", + "in": "query", + "name": "includePackMeta", + "type": "string" + }, + { + "description": "Filter cluster profile templates by profileType", + "in": "query", + "name": "profileType", + "type": "string" + }, + { + "default": false, + "description": "Include non spectro labels in the cluster labels if set to true", + "in": "query", + "name": "includeNonSpectroLabels", + "type": "boolean" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroCluster" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/assets": { + "get": { + "operationId": "v1SpectroClustersUidAssetsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterAssetEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the cluster asset doc", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1SpectroClustersUidAssets", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterAssetEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Associate the assets for the cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/assets/adminKubeconfig": { + "get": { + "operationId": "v1SpectroClustersUidAdminKubeConfig", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster's kube config file", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/assets/frpKubeconfig": { + "delete": { + "operationId": "v1SpectroClustersUidFrpKubeConfigDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the cluster's frp kube config client data", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1SpectroClustersUidFrpKubeConfigGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster's frp kube config file", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUidFrpKubeConfigUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterAssetFrpKubeConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster's frp kube config data", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/assets/kubeconfig": { + "get": { + "operationId": "v1SpectroClustersUidKubeConfig", + "parameters": [ + { + "default": true, + "description": "FRP (reverse-proxy) based kube config will be returned if available", + "in": "query", + "name": "frp", + "type": "boolean" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster's kube config file", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUidKubeConfigUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterAssetKubeConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster's manifest data", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/assets/kubeconfigclient": { + "delete": { + "operationId": "v1SpectroClustersUidKubeConfigClientDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the cluster's kube config client data", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1SpectroClustersUidKubeConfigClientGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster's kube config client file", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUidKubeConfigClientUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterAssetKubeConfigClient" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster's kube config client data", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/assets/manifest": { + "get": { + "operationId": "v1SpectroClustersUidManifestGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster's manifest data", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUidManifestUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterAssetManifest" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster's manifest data", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/clusterConfig/clusterMetaAttribute": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersUidClusterMetaAttributeUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterMetaAttributeEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster meta attribute", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/clusterConfig/controlPlaneHealthCheckTimeout": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "V1ControlPlaneHealthCheckTimeoutUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ControlPlaneHealthCheckTimeoutEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster controlPlane health check timeout", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/clusterConfig/hostCluster": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "V1HostClusterConfigUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1HostClusterConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster host config", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/clusterConfig/lifecycleConfig": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersUidLifecycleConfigUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1LifecycleConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster Life cycle configuration", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/clusterConfig/osPatch": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersUidOsPatchUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1OsPatchEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster OS patch configuration", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/config/namespaces": { + "get": { + "operationId": "v1SpectroClustersUidConfigNamespacesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterNamespaceResources" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves namespaces for the specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUidConfigNamespacesUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterNamespaceResourcesUpdateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates namespaces for the specified cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/config/namespaces/{namespaceUid}": { + "get": { + "operationId": "v1SpectroClustersUidConfigNamespacesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster's namespace response", + "schema": { + "$ref": "#/definitions/v1ClusterNamespaceResource" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves the specified namespace of the cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Cluster namespace uid", + "in": "path", + "name": "namespaceUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUidConfigNamespacesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterNamespaceResourceInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified namespace of the cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/config/rbacs": { + "get": { + "operationId": "v1SpectroClustersUidConfigRbacsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterRbacs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves RBAC information for the specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUidConfigRbacsUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterRbacResourcesUpdateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates RBAC information for the specified cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/config/rbacs/{rbacUid}": { + "get": { + "operationId": "v1SpectroClustersUidConfigRbacsUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster's RBAC response", + "schema": { + "$ref": "#/definitions/v1ClusterRbac" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves the specified RBAC of the cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "RBAC resource uid", + "in": "path", + "name": "rbacUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUidConfigRbacsUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterRbacInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified RBAC of the cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/download": { + "get": { + "operationId": "v1SpectroClustersUidDownload", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download cluster archive file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Download the specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/edge-native/edgeHosts": { + "get": { + "operationId": "v1EdgeNativeClustersHostsList", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "List of edge host device", + "schema": { + "$ref": "#/definitions/v1EdgeHostDevices" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of edge host of edge-native cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/backup": { + "delete": { + "operationId": "v1ClusterFeatureBackupScheduleReset", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Reset cluster backup schedule settings", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1ClusterFeatureBackupGet", + "parameters": [ + { + "in": "query", + "name": "backupRequestUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterBackup" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the cluster backup result", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1ClusterFeatureBackupCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterBackupConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create cluster backup settings", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1ClusterFeatureBackupUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterBackupConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update cluster backup settings", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/features/backup/onDemand": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1ClusterFeatureBackupOnDemandCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterBackupConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create on demand cluster backup", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/features/backup/{backupName}/request/{requestUid}": { + "delete": { + "operationId": "v1ClusterFeatureBackupDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete cluster backup", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "backupName", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "requestUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan": { + "get": { + "operationId": "v1ClusterFeatureComplianceScanGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterComplianceScan" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the compliance scan of cluster, if driverType is provided then specific status of driverType will be returned", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1ClusterFeatureComplianceScanCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterComplianceScheduleConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create cluster compliance scan", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1ClusterFeatureComplianceScanUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterComplianceScheduleConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update cluster compliance scan settings", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers": { + "get": { + "operationId": "v1ClusterFeatureComplianceScanLogsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterComplianceScanLogs" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the compliance scan log by cluster uid and driver type", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/kubeBench": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ClusterFeatureScanKubeBenchLogUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1KubeBenchEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the KubeBench compliance scan log by uid", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/kubeHunter": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ClusterFeatureScanKubeHunterLogUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1KubeHunterEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the KubeHunter compliance scan log by uid", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/sonobuoy": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1ClusterFeatureScanSonobuoyLogUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SonobuoyEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the Sonobuoy compliance scan log by uid", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/drivers/syft": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1ClusterFeatureScanSyftLogUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SyftEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the Syft compliance scan log by uid", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}": { + "delete": { + "operationId": "v1ClusterFeatureComplianceScanLogDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the compliance scan log by uid", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "logUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/kubeBench": { + "get": { + "operationId": "v1ClusterFeatureKubeBenchLogGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterScanLogKubeBench" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the KubeBench compliance scan log by uid", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "logUid", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "reportId", + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/kubeHunter": { + "get": { + "operationId": "v1ClusterFeatureKubeHunterLogGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterScanLogKubeHunter" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the KubeHunter compliance scan log by uid", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "logUid", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "reportId", + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/sonobuoy": { + "get": { + "operationId": "v1ClusterFeatureSonobuoyLogGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterScanLogSonobuoy" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the Sonobuoy compliance scan log by uid", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "logUid", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "reportId", + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/syft": { + "get": { + "operationId": "v1ClusterFeatureSyftLogGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterScanLogSyft" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the Syft compliance scan log by uid", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "logUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/syft/sbom": { + "get": { + "operationId": "v1SyftScanLogImageSBOMGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the image sbom of syft scan log of cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "logUid", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "image", + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/logs/{logUid}/drivers/{driver}/download": { + "get": { + "operationId": "v1ClusterFeatureDriverLogDownload", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + }, + "schema": { + "type": "file" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Downloads the driver cluster logs", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "logUid", + "required": true, + "type": "string" + }, + { + "enum": [ + "kubeBench", + "kubeHunter", + "sonobuoy", + "syft" + ], + "in": "path", + "name": "driver", + "required": true, + "type": "string" + }, + { + "default": "pdf", + "in": "query", + "name": "fileFormat", + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/complianceScan/onDemand": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1ClusterFeatureComplianceScanOnDemandCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterComplianceOnDemandConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create on demand cluster compliance scan", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/features/helmCharts": { + "get": { + "operationId": "v1ClusterFeatureHelmChartsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterHelmCharts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the installed helm charts of a specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/logFetcher": { + "get": { + "operationId": "v1ClusterFeatureLogFetcherGet", + "parameters": [ + { + "in": "query", + "name": "requestId", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterLogFetcher" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the log fetcher for cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid for which log is requested", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1ClusterFeatureLogFetcherCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterLogFetcherRequest" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create the log fetcher for cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/features/manifests": { + "get": { + "operationId": "v1ClusterFeatureManifestsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterManifests" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the installed manifests of a specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/restore": { + "get": { + "operationId": "v1ClusterFeatureRestoreGet", + "parameters": [ + { + "in": "query", + "name": "restoreRequestUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterRestore" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the cluster restore of cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/features/restore/onDemand": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1ClusterFeatureRestoreOnDemandCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterRestoreConfig" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create on demand cluster restore", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/import/manifest": { + "get": { + "operationId": "v1SpectroClustersUidImportManifest", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "download file", + "headers": { + "Content-Disposition": { + "type": "string" + } + }, + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster's import manifest file", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/import/upgrade": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersUidImportUpgradePatch", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Upgrade the specified imported read only cluster with full permissions", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/k8certificates": { + "get": { + "operationId": "v1SpectroClustersK8Certificate", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1MachineCertificates" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get K8Certificate for spectro cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/k8certificates/renew": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersCertificatesRenew", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Sets the cluster control plane nodes Kubernetes certificates for renewal", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/kubectl/redirect": { + "get": { + "operationId": "V1SpectroClustersUidKubeCtlRedirect", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1SpectroClusterKubeCtlRedirect" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster's kube config file", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/location": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUidLocationPut", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterLocationInputEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Associate the assets for the cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/metadata": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersUidMetadataUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ObjectMetaInputEntitySchema" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the specified spectro cluster metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/namespaces": { + "get": { + "operationId": "v1ClusterNamespacesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterNamespaces" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns available namespaces for the cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "default": false, + "in": "query", + "name": "skipEmptyNamespaces", + "type": "boolean" + } + ] + }, + "/v1/spectroclusters/{uid}/oidc": { + "get": { + "operationId": "V1SpectroClustersUidOIDC", + "parameters": [ + { + "description": "spc uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterOidcSpec" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns k8s spectrocluster oidc", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/oidc/dashboard/url": { + "get": { + "operationId": "V1SpectroClustersUidOIDCDashboardUrl", + "parameters": [ + { + "description": "spc uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SectroClusterK8sDashboardUrl" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns k8s dashboard url", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/pack/manifests/{manifestUid}": { + "get": { + "operationId": "v1SpectroClustersUidPackManifestsUidGet", + "parameters": [ + { + "description": "cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "manifest uid which is part of the pack ref", + "in": "path", + "name": "manifestUid", + "required": true, + "type": "string" + }, + { + "default": false, + "description": "resolve pack manifest values if set to true", + "in": "query", + "name": "resolveManifestValues", + "type": "boolean" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Pack manifest content", + "schema": { + "$ref": "#/definitions/v1Manifest" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster's manifest", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/pack/properties": { + "get": { + "operationId": "v1SpectroClustersUidPackProperties", + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Pack layer", + "in": "query", + "name": "layer", + "required": true, + "type": "string" + }, + { + "description": "Pack values yaml field path", + "in": "query", + "name": "fieldPath", + "required": true, + "type": "string" + }, + { + "description": "Pack name", + "in": "query", + "name": "name", + "type": "string" + }, + { + "default": true, + "description": "Is the macros need to be resolved", + "in": "query", + "name": "resolveMacros", + "type": "boolean" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster's pack properties response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterPackProperties" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get specified cluster pack properties", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/packRefs": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "notify", + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersPacksRefUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterNotificationUpdateEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster's pack references", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/packs/resolvedValues": { + "get": { + "operationId": "v1SpectroClustersUidPacksResolvedValuesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfilesResolvedValues" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster's packs resolved values", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfilesParamReferenceEntity" + } + } + ] + }, + "/v1/spectroclusters/{uid}/packs/status": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersUidPacksStatusPatch", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterPacksStatusEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Patch update specified cluster's packs status", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/profileUpdates": { + "get": { + "operationId": "v1SpectroClustersGetProfileUpdates", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfileUpdates" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the profile updates of a specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/profiles": { + "delete": { + "operationId": "v1SpectroClustersDeleteProfiles", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfilesDeleteEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Remove cluster profiles from the specified cluster", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1SpectroClustersGetProfiles", + "parameters": [ + { + "description": "includes pack meta such as schema, presets", + "in": "query", + "name": "includePackMeta", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfileList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the associated profiles of a specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersPatchProfiles", + "parameters": [ + { + "default": false, + "description": "Resolve pending cluster notification if set to true", + "in": "query", + "name": "resolveNotification", + "type": "boolean" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfiles" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Patch cluster profiles to the specified cluster", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1SpectroClustersUpdateProfiles", + "parameters": [ + { + "default": false, + "description": "Resolve pending cluster notification if set to true", + "in": "query", + "name": "resolveNotification", + "type": "boolean" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfiles" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Associate cluster profiles to the specified cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/profiles/packs/manifests": { + "get": { + "operationId": "v1SpectroClustersGetProfilesPacksManifests", + "parameters": [ + { + "description": "Includes pack meta such as schema, presets", + "in": "query", + "name": "includePackMeta", + "type": "string" + }, + { + "default": false, + "description": "Resolve pack macro variables if set to true", + "in": "query", + "name": "resolveMacros", + "type": "boolean" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterProfilesPacksManifests" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the associated profile's pack manifests of a specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/profiles/{profileUid}/packs/{packName}/config": { + "get": { + "operationId": "v1SpectroClustersUidProfilesUidPacksConfigGet", + "parameters": [ + { + "description": "cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "profile uid", + "in": "path", + "name": "profileUid", + "required": true, + "type": "string" + }, + { + "description": "pack name", + "in": "path", + "name": "packName", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of cluster pack values", + "schema": { + "$ref": "#/definitions/v1SpectroClusterPackConfigList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified cluster's profile pack configuration", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/profiles/{profileUid}/packs/{packName}/manifests": { + "get": { + "operationId": "v1SpectroClustersProfilesUidPackManifestsGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1PackManifests" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the associated profiles pack manifests of the specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Cluster profile uid", + "in": "path", + "name": "profileUid", + "required": true, + "type": "string" + }, + { + "description": "Name of the pack", + "in": "path", + "name": "packName", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersProfilesUidPackManifestsUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ManifestRefInputEntities" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates cluster profiles pack manifests to the specified cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/rate": { + "get": { + "operationId": "v1SpectroClustersUidRate", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRate" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the estimated rate of the specified cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "default": "hourly", + "description": "Period type [hourly, monthly, yearly]", + "enum": [ + "hourly", + "monthly", + "yearly" + ], + "in": "query", + "name": "periodType", + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/repave/approve": { + "patch": { + "operationId": "v1SpectroClustersUidRepaveApproveUpdate", + "parameters": [ + { + "description": "cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the spectrocluster repave approve update", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/repave/status": { + "get": { + "operationId": "v1SpectroClustersUidRepaveGet", + "parameters": [ + { + "description": "cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Returns cluster repave status", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRepave" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the spectrocluster repave", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/reset": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "V1SpectroClustersUidReset", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "reset the cluster s by deleting machine pools and condtions", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/status": { + "get": { + "operationId": "v1SpectroClustersUidStatus", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1SpectroClusterStatusEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the cluster's status", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/status/condition": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUpdateStatusCondition", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterCondition" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster status condition", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/status/conditions": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersUpdateStatusConditions", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "items": { + "$ref": "#/definitions/v1ClusterCondition" + }, + "type": "array" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster status conditions", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/status/endpoints": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUpdateStatusEndpoints", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "items": { + "$ref": "#/definitions/v1ApiEndpoint" + }, + "type": "array" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster's service endpoints information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/status/imported": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersUpdateStatusImported", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster status as imported", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/status/services": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUpdateStatusServices", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "items": { + "$ref": "#/definitions/v1LoadBalancerService" + }, + "type": "array" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified cluster's services information", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/status/spcApply": { + "get": { + "operationId": "v1SpectroClustersUidStatusSpcApplyGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1SpcApply" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the SPC apply information for the agent", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1SpectroClustersUidStatusSpcApply", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Set the CanBeApplied to true on the spcApply status. CanBeApplied indicates the agent to orchestrate the spc changes", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/status/spcApply/patchTime": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1SpectroClustersUidStatusSpcPatchTime", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpcPatchTimeEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the agent patch time for the SPC changes", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/status/upgrades": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersUidUpgradesPut", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterUidUpgrades" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the cluster's upgrade status", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/validate/packs": { + "post": { + "operationId": "v1SpectroClustersUidValidatePacks", + "parameters": [ + { + "description": "cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterPacksEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster packs validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterValidatorResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates cluster packs", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/validate/repave": { + "post": { + "operationId": "v1SpectroClustersUidValidateRepave", + "parameters": [ + { + "description": "cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterPacksEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "Cluster repave validation response", + "schema": { + "$ref": "#/definitions/v1SpectroClusterRepaveValidationResponse" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates if cluster gets repaved for the specified packs", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/variables": { + "get": { + "operationId": "v1SpectroClustersUidVariablesGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1Variables" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieve a list of variables associated with the cluster", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid for which variables need to be retrieved", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/vms": { + "get": { + "operationId": "v1SpectroClustersVMList", + "parameters": [ + { + "collectionFormat": "csv", + "description": "Namespace names, comma separated value (ex: dev,test). If namespace is empty it returns the specific resource under all namespace", + "in": "query", + "items": { + "type": "string" + }, + "name": "namespace", + "type": "array" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ClusterVirtualMachineList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the list of virtual machines", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1SpectroClustersVMCreate", + "parameters": [ + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterVirtualMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1ClusterVirtualMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create virtual machine", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/snapshot": { + "get": { + "operationId": "v1ClusterVMSnapshotsList", + "parameters": [ + { + "collectionFormat": "csv", + "description": "vmName is comma separated value (ex: name1,name2).", + "in": "query", + "items": { + "type": "string" + }, + "name": "vmName", + "type": "array" + }, + { + "collectionFormat": "csv", + "description": "Namespace names, comma separated value (ex: dev,test). If namespace is empty it returns the specific resource under all namespace", + "in": "query", + "items": { + "type": "string" + }, + "name": "namespace", + "type": "array" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1VirtualMachineSnapshotList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the list of snapshots of given namespaces", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/spectroclusters/{uid}/vms/{vmName}": { + "delete": { + "operationId": "v1SpectroClustersVMDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the virtual machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1SpectroClustersVMGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1ClusterVirtualMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get virtual machine", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersVMUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterVirtualMachine" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1ClusterVirtualMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified virtual machine of the cluster", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/addVolume": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersVMAddVolume", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VMAddVolumeEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Add volume to the virtual machine instance", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/clone": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1SpectroClustersVMClone", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1SpectroClusterVMCloneEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1ClusterVirtualMachine" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Clone virtual machine", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/migrate": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersVMMigrate", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Migrate the virtual machine", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/pause": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersVMPause", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Pause the virtual machine instance", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/removeVolume": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersVMRemoveVolume", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VMRemoveVolumeEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Remove volume from the virtual machine instance", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/restart": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersVMRestart", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Restart the virtual machine", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/resume": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersVMResume", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Resume the virtual machine instance", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/snapshot": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name of virtual machine", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1VMSnapshotCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VirtualMachineSnapshot" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VirtualMachineSnapshot" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create snapshot of virtual machine", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/snapshot/{snapshotName}": { + "delete": { + "operationId": "v1VMSnapshotDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the snapshot of virtual machine", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1VMSnapshotGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VirtualMachineSnapshot" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get virtual machine snapshot", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Snapshot name", + "in": "path", + "name": "snapshotName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1VMSnapshotUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VirtualMachineSnapshot" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VirtualMachineSnapshot" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified snapshot of a virtual machine", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/start": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersVMStart", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Start the virtual machine", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/vms/{vmName}/stop": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Virtual Machine name", + "in": "path", + "name": "vmName", + "required": true, + "type": "string" + }, + { + "description": "Namespace name", + "in": "query", + "name": "namespace", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1SpectroClustersVMStop", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Stop the virtual machine", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/workloads/sync": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "description": "Sync specified cluster workload", + "operationId": "v1SpectroClustersUidWorkloadsSync", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Sync specified cluster workload", + "tags": [ + "v1" + ] + } + }, + "/v1/spectroclusters/{uid}/workloads/{workloadKind}/sync": { + "parameters": [ + { + "description": "Cluster uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Workload kind", + "enum": [ + "namespace", + "pod", + "deployment", + "statefulset", + "daemonset", + "job", + "cronjob", + "rolebinding", + "clusterrolebinding" + ], + "in": "path", + "name": "workloadKind", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1SpectroClustersUidWorkloadsKindSync", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "202": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Sync specified cluster workload", + "tags": [ + "v1" + ] + } + }, + "/v1/system/config/reverseproxy": { + "get": { + "operationId": "V1SystemConfigReverseProxyGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1SystemReverseProxy" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "get the system config reverse proxy", + "tags": [ + "v1", + "system", + "private", + "docs-show" + ] + }, + "put": { + "operationId": "V1SystemConfigReverseProxyUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1SystemReverseProxy" + } + } + ], + "responses": { + "204": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1Updated" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "updates the system config reverse proxy", + "tags": [ + "v1", + "system", + "private", + "docs-show" + ] + } + }, + "/v1/system/passwords/blocklist": { + "delete": { + "operationId": "V1PasswordsBlockListDelete", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/V1PasswordsBlockList" + } + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete a list of block listed passwords", + "tags": [ + "v1", + "system", + "docs-show" + ] + }, + "patch": { + "operationId": "V1PasswordsBlockListUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/V1PasswordsBlockList" + } + } + ], + "responses": { + "204": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1Updated" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "List of block listed passwords", + "tags": [ + "v1", + "system", + "docs-show" + ] + } + }, + "/v1/teams": { + "get": { + "operationId": "v1TeamsList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "An array of teams", + "schema": { + "$ref": "#/definitions/v1Teams" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of teams", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1TeamsCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Team" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a team with the specified users and roles", + "tags": [ + "v1" + ] + } + }, + "/v1/teams/summary": { + "get": { + "description": "Deprecated, Use Post api - Returns a list of team summaries", + "operationId": "v1TeamsSummary", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TeamsSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of team summary", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1TeamsSummaryGet", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TeamsSummarySpec" + } + } + ], + "responses": { + "200": { + "description": "An array of teams summary items", + "schema": { + "$ref": "#/definitions/v1TeamsSummaryList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of teams summary with provided filter spec", + "tags": [ + "v1" + ] + } + }, + "/v1/teams/{uid}": { + "delete": { + "operationId": "v1TeamsUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified team", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1TeamsUidGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Team" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the sepcified team", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1TeamsUidPatch", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1TeamPatch" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Patches the specified team", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1TeamsUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Team" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the sepcified team", + "tags": [ + "v1" + ] + } + }, + "/v1/teams/{uid}/projects": { + "get": { + "operationId": "v1TeamsProjectRoles", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ProjectRolesEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified team's project and roles data", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1TeamsProjectRolesPut", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1ProjectRolesPatch" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the projects and roles for the specified team", + "tags": [ + "v1" + ] + } + }, + "/v1/teams/{uid}/resourceRoles": { + "get": { + "description": "Returns resource roles for team", + "operationId": "v1TeamsUidResourceRoles", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ResourceRoles" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified individual and resource roles for a team", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "description": "Resource roles added to specific team", + "operationId": "v1TeamsUidResourceRolesCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1ResourceRolesUpdateEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Add resource roles for team", + "tags": [ + "v1" + ] + } + }, + "/v1/teams/{uid}/resourceRoles/{resourceRoleUid}": { + "delete": { + "operationId": "v1TeamsUidResourceRolesUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deleted the resource roles from team", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "resourceRoleUid", + "required": true, + "type": "string" + } + ], + "patch": { + "description": "Specific resource roles fo team is updated", + "operationId": "v1TeamsResourceRolesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1ResourceRolesUpdateEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the resource roles for team", + "tags": [ + "v1" + ] + } + }, + "/v1/teams/{uid}/roles": { + "get": { + "operationId": "V1TeamsUidTenantRolesGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TeamTenantRolesEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified team's tenant roles", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "V1TeamsUidTenantRolesUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1TeamTenantRolesUpdate" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the tenant roles of the specified team", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/address": { + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1PatchTenantAddress", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantAddressPatch" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update tenant address", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/assets/certs": { + "get": { + "operationId": "V1TenantUIdAssetsCertsList", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TenantAssetCerts" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "lists the certificates for the tenant", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "V1TenantUidAssetsCertsCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantAssetCert" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "create the tenant certificate", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/assets/certs/{certificateUid}": { + "delete": { + "operationId": "V1TenantUidAssetsCertsUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "deletes the tenant certificate", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "V1TenantUidAssetsCertsUidGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TenantAssetCert" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the ca certificate for the tenant", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "certificateUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "V1TenantUidAssetsCertsUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantAssetCert" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "updates the tenant certificate", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/assets/dataSinks": { + "delete": { + "operationId": "V1TenantUidAssetsDataSinksDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "deletes the tenant data sink config", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "V1TenantUidAssetsDataSinksGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1DataSinkConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns data sink config of tenant", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "V1TenantUidAssetsDataSinksCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1DataSinkConfig" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "create data sink config", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "V1TenantUidAssetsDataSinksUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1DataSinkConfig" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "updates the tenant data sink config", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/authTokenSettings": { + "get": { + "operationId": "v1TenantUidAuthTokenSettingsGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AuthTokenSettings" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get tenant auth token settings", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1TenantUidAuthTokenSettingsUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AuthTokenSettings" + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update tenant auth token settings", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/contract/accept": { + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1TenantsUidContractAccept", + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Tenant to accept the contract agreement", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/creditAccount/aws": { + "delete": { + "operationId": "v1TenantsCreditAccountDelete", + "parameters": [ + { + "default": false, + "in": "query", + "name": "forceDelete", + "type": "boolean" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the aws credit account for tenants", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1TenantsCreditAccountGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1AwsCreditAccountEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the credit accounts for the tenants with free tier access", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/tenants/{tenantUid}/domains": { + "get": { + "operationId": "V1TenantUidDomainsGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TenantDomains" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "retrieves the domains for tenant", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "V1TenantUidDomainsUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantDomains" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "creates or updates domains for tenant", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/emailId": { + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1PatchTenantEmailId", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantEmailPatch" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update tenant emailId", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/freemium": { + "get": { + "operationId": "v1TenantFreemiumGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TenantFreemium" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get tenant level freemium configuration", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1TenantFreemiumUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantFreemium" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update tenant freemium configuration", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/freemiumUsage": { + "get": { + "operationId": "v1TenantFreemiumUsageGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TenantFreemiumUsage" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get tenant freemium usage", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/tenants/{tenantUid}/invoices/{invoiceUid}": { + "get": { + "operationId": "v1InvoicesUidGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1Invoice" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns a specified invoice", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the tenant uid", + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + }, + { + "description": "Specify the invoice uid", + "in": "path", + "name": "invoiceUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/tenants/{tenantUid}/invoices/{invoiceUid}/report/invoice/pdf": { + "get": { + "operationId": "V1InvoiceUidReportInvoicePdf", + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + }, + "schema": { + "type": "file" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Downloads the specified invoice report", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the tenant uid", + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + }, + { + "description": "Specify the invoice uid", + "in": "path", + "name": "invoiceUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/tenants/{tenantUid}/invoices/{invoiceUid}/report/pdf": { + "get": { + "operationId": "V1InvoiceUidReportPdf", + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + }, + "schema": { + "type": "file" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Downloads the specified monthly invoice report", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the tenant uid", + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + }, + { + "description": "Specify the invoice uid", + "in": "path", + "name": "invoiceUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/tenants/{tenantUid}/invoices/{invoiceUid}/report/usage/pdf": { + "get": { + "operationId": "V1InvoiceUidReportUsagePdf", + "produces": [ + "application/octet-stream" + ], + "responses": { + "200": { + "description": "OK", + "headers": { + "Content-Disposition": { + "type": "string" + }, + "Content-Type": { + "type": "string" + } + }, + "schema": { + "type": "file" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Downloads the specified tenant usage", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the tenant uid", + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + }, + { + "description": "Specify the invoice uid", + "in": "path", + "name": "invoiceUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/tenants/{tenantUid}/loginBanner": { + "get": { + "operationId": "v1TenantUidLoginBannerGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1LoginBannerSettings" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get tenant login banner settings", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1TenantUidLoginBannerUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1LoginBannerSettings" + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update tenant login banner settings", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/macros": { + "delete": { + "operationId": "v1TenantsUidMacrosDeleteByMacroName", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the macros for the specified tenant by given macro name", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1TenantsUidMacrosList", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "List the macros of the specified tenant", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1TenantsUidMacrosUpdateByMacroName", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the macros for the specified tenant by given macro name", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1TenantsUidMacrosCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create or add new macros for the specified tenant", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1TenantsUidMacrosUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the macros of the specified tenant", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/oidc/config": { + "get": { + "operationId": "V1TenantUidOidcConfigGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TenantOidcClientSpec" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the oidc Spec for tenant", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "V1TenantUidOidcConfigUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantOidcClientSpec" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Associates the oidc Spec for the tenant", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/password/policy": { + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "V1TenantUidPasswordPolicyUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantPasswordPolicyEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "creates or updates a password policy for tenant", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/preferences/clusterGroup": { + "get": { + "operationId": "V1TenantPrefClusterGroupGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TenantEnableClusterGroup" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get is cluster group enabled for a specific tenant", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "V1TenantPrefClusterGroupUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantEnableClusterGroup" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Enable or Disable cluster group for a specific tenant", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/preferences/clusterSettings": { + "get": { + "operationId": "v1TenantClusterSettingsGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TenantClusterSettings" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get tenant cluster settings", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ] + }, + "/v1/tenants/{tenantUid}/preferences/clusterSettings/nodesAutoRemediationSetting": { + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1TenantClustersNodesAutoRemediationSettingUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1NodesAutoRemediationSettings" + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update tenant clusters nodes auto remediation setting", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/preferences/developerCredit": { + "get": { + "operationId": "V1TenantDeveloperCreditGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1DeveloperCredit" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get developer credit enabled for a specific tenant", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "V1TenantDeveloperCreditUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1DeveloperCredit" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "update developer credit for a specific tenant", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/preferences/fips": { + "get": { + "operationId": "v1TenantFipsSettingsGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1FipsSettings" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get tenant fips settings", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1TenantFipsSettingsUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1FipsSettings" + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update tenant fips setting", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/rateConfig": { + "get": { + "operationId": "v1RateConfigGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1RateConfig" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get all rate config for public and private cloud", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1RateConfigUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1RateConfig" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "updates the rate config for public and private cloud", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/resourceLimits": { + "get": { + "operationId": "v1TenantResourceLimitsGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1TenantResourceLimits" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get tenant level resource limits configuration", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1TenantResourceLimitsUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantResourceLimitsEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update tenant resource limits configuration", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/saml/config": { + "get": { + "operationId": "V1TenantUidSamlConfigSpecGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TenantSamlSpec" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified service provider metadata and Saml Spec for tenant", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "V1TenantUidSamlConfigUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantSamlRequestSpec" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Associates the specified federation metadata for the tenant", + "tags": [ + "v1" + ] + } + }, + "/v1/tenants/{tenantUid}/sso/auth/providers": { + "get": { + "operationId": "V1TenantUidSsoAuthProvidersGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1TenantSsoAuthProvidersEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "get sso logins for the tenants", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "tenantUid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "V1TenantUidSsoAuthProvidersUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1TenantSsoAuthProvidersEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "enable sso logins for the tenants", + "tags": [ + "v1" + ] + } + }, + "/v1/users": { + "get": { + "description": "Lists users the given user context", + "operationId": "v1UsersList", + "parameters": [ + { + "description": "Set of fields to be presented in the response with values. The fields are comma separated. Eg: metadata.uid,metadata.name", + "in": "query", + "name": "fields", + "type": "string" + }, + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + }, + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Users" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Lists users", + "tags": [ + "v1" + ] + }, + "post": { + "description": "A user is created for the given user context", + "operationId": "v1UsersCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create User", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations": { + "get": { + "operationId": "v1UsersAssetsLocationGet", + "parameters": [ + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocations" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified users location", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations/azure": { + "post": { + "operationId": "v1UsersAssetsLocationAzureCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationAzure" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create a Azure location", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations/azure/{uid}": { + "get": { + "operationId": "v1UsersAssetsLocationAzureGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationAzure" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified Azure location", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the Azure location uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1UsersAssetsLocationAzureUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationAzure" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified Azure location", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations/gcp": { + "post": { + "operationId": "v1UsersAssetsLocationGcpCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationGcp" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create a GCP location", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations/gcp/{uid}": { + "get": { + "operationId": "v1UsersAssetsLocationGcpGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationGcp" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified GCP location", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the GCP location uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1UsersAssetsLocationGcpUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationGcp" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified GCP location", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations/minio": { + "post": { + "operationId": "v1UsersAssetsLocationMinioCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationS3" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create a MinIO location", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations/minio/{uid}": { + "get": { + "operationId": "v1UsersAssetsLocationMinioGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationS3" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified MinIO location", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the MinIO location uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1UsersAssetsLocationMinioUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationS3" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified MinIO location", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations/s3": { + "post": { + "operationId": "v1UsersAssetsLocationS3Create", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationS3" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create a S3 location", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations/s3/{uid}": { + "delete": { + "operationId": "v1UsersAssetsLocationS3Delete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified S3 location", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1UsersAssetsLocationS3Get", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationS3" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified S3 location", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the S3 location uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1UsersAssetsLocationS3Update", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserAssetsLocationS3" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified S3 location", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations/{type}/{uid}/default": { + "parameters": [ + { + "description": "Specify the location uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "description": "Specify the location type [aws/azure/gcp/minio/s3]", + "in": "path", + "name": "type", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1UsersAssetsLocationDefaultUpdate", + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the default backup location", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/locations/{uid}": { + "delete": { + "operationId": "v1UsersAssetsLocationDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified location", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the location uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/users/assets/sshkeys": { + "get": { + "operationId": "v1UsersAssetsSshGet", + "parameters": [ + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1UserAssetsSsh" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the SSH keys", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1UserAssetsSshCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserAssetSshEntity" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Creates a SSH key", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/sshkeys/{uid}": { + "delete": { + "operationId": "v1UsersAssetSshDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified user ssh key", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1UsersAssetSshGetUid", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1UserAssetSsh" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified user ssh key", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the SSH key uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1UsersAssetSshUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserAssetSsh" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified user ssh key", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/vsphere/dnsMapping": { + "get": { + "operationId": "v1VsphereMappingGet", + "parameters": [ + { + "description": "Specify the vSphere gateway uid", + "in": "query", + "name": "gatewayUid", + "required": true, + "type": "string" + }, + { + "description": "Specify the vSphere datacenter name", + "in": "query", + "name": "datacenter", + "required": true, + "type": "string" + }, + { + "description": "Specify the vSphere network name", + "in": "query", + "name": "network", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VsphereDnsMapping" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified vSphere DNS mapping", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/vsphere/dnsMappings": { + "get": { + "operationId": "v1VsphereDnsMappingsGet", + "parameters": [ + { + "description": "Filters can be combined with AND, OR operators with field path name. Eg: metadata.name=TestServiceANDspec.cloudType=aws\n\nServer will be restricted to certain fields based on the indexed data for each resource.", + "in": "query", + "name": "filters", + "type": "string" + }, + { + "description": "Specify the fields with sort order. 1 indicates ascending and -1 for descending. Eg: orderBy=metadata.name=1,metadata.uid=-1", + "in": "query", + "name": "orderBy", + "type": "string" + } + ], + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VsphereDnsMappings" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified vSphere DNS mappings", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1VsphereDnsMappingCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VsphereDnsMapping" + } + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create a vSphere DNS mapping", + "tags": [ + "v1" + ] + } + }, + "/v1/users/assets/vsphere/dnsMappings/{uid}": { + "delete": { + "operationId": "v1VsphereDnsMappingDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified vSphere DNS mapping", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1VsphereDnsMappingGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1VsphereDnsMapping" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified vSphere DNS mapping", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "description": "Specify the vSphere DNS mapping uid", + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1VsphereDnsMappingUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1VsphereDnsMapping" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified vSphere DNS mapping", + "tags": [ + "v1" + ] + } + }, + "/v1/users/auth/tokens/revoke": { + "post": { + "operationId": "v1UsersAuthTokensRevoke", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1AuthTokenRevoke" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Revoke access of specific token(s)", + "tags": [ + "v1" + ] + } + }, + "/v1/users/config/scar": { + "get": { + "operationId": "V1UsersConfigScarGet", + "responses": { + "200": { + "description": "(empty)", + "schema": { + "$ref": "#/definitions/v1SystemScarSpec" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Get the system Spectro repository. Restricted to edge services", + "tags": [ + "v1" + ] + } + }, + "/v1/users/kubectl/session/{sessionUid}": { + "get": { + "description": "gets users kubectl session", + "operationId": "V1UsersKubectlSessionUid", + "parameters": [ + { + "in": "path", + "name": "sessionUid", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1UserKubectlSession" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "gets users kubectl session", + "tags": [ + "v1" + ] + } + }, + "/v1/users/meta": { + "get": { + "operationId": "v1UsersMetadata", + "responses": { + "200": { + "description": "An array of users metadata items", + "schema": { + "$ref": "#/definitions/v1UsersMetadata" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of users metadata", + "tags": [ + "v1" + ] + } + }, + "/v1/users/password/change": { + "patch": { + "description": "User password change request via current password and emailId", + "operationId": "V1UsersPasswordChange", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "currentPassword": { + "type": "string" + }, + "emailId": { + "type": "string" + }, + "newPassword": { + "type": "string" + } + }, + "required": [ + "newPassword", + "emailId", + "currentPassword" + ], + "type": "object" + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "User password change request using the user emailId", + "tags": [ + "v1" + ] + } + }, + "/v1/users/password/reset": { + "patch": { + "description": "User password request will be sent to the supplied emailId", + "operationId": "v1UsersEmailPasswordReset", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "emailId": { + "type": "string" + } + }, + "required": [ + "emailId" + ], + "type": "object" + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "User password reset request using the email id", + "tags": [ + "v1" + ] + } + }, + "/v1/users/summary": { + "get": { + "description": "Deprecated, Use Post api - Returns a list of user summaries", + "operationId": "v1UsersSummary", + "parameters": [ + { + "default": 50, + "description": "limit is a maximum number of responses to return for a list call. Default and maximum value of the limit is 50.\nIf more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results.", + "format": "int64", + "in": "query", + "name": "limit", + "type": "integer" + }, + { + "description": "offset is the next index number from which the response will start. The response offset value can be used along with continue token for the pagination.", + "format": "int64", + "in": "query", + "name": "offset", + "type": "integer" + }, + { + "description": "continue token to paginate the subsequent data items", + "in": "query", + "name": "continue", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1UsersSummary" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified user summary list", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1UsersSummaryGet", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UsersSummarySpec" + } + } + ], + "responses": { + "200": { + "description": "An array of users summary items", + "schema": { + "$ref": "#/definitions/v1UsersSummaryList" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Retrieves a list of users summary with provided filter spec", + "tags": [ + "v1" + ] + } + }, + "/v1/users/system/macros": { + "delete": { + "operationId": "v1UsersSystemMacrosDeleteByMacroName", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete the macros for the system user by macro name", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1UsersSystemMacrosList", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "List the macros of the system", + "tags": [ + "v1" + ] + }, + "patch": { + "operationId": "v1UsersSystemMacrosUpdateByMacroName", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the macros for the system user by macro name", + "tags": [ + "v1" + ] + }, + "post": { + "operationId": "v1UsersSystemMacrosCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create or add new macros for the system user", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1UsersSystemMacrosUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1Macros" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update the macros of the system", + "tags": [ + "v1" + ] + } + }, + "/v1/users/{uid}": { + "delete": { + "description": "Deletes the specified User for given uid", + "operationId": "v1UsersUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified User", + "tags": [ + "v1" + ] + }, + "get": { + "description": "Returns a User for the specified uid.", + "operationId": "v1UsersUidGet", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1User" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified User", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "description": "User is patched for the specified information", + "operationId": "v1UsersUidPatch", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1UserPatch" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Patches the specified User", + "tags": [ + "v1" + ] + }, + "put": { + "description": "A user is created for the given user context", + "operationId": "v1UsersUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserUpdateEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update User", + "tags": [ + "v1" + ] + } + }, + "/v1/users/{uid}/password/change": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "description": "User password change request via current password", + "operationId": "v1UsersUidPasswordChange", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "properties": { + "currentPassword": { + "type": "string" + }, + "newPassword": { + "type": "string" + } + }, + "required": [ + "newPassword" + ], + "type": "object" + } + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "User password change request using the user uid", + "tags": [ + "v1" + ] + } + }, + "/v1/users/{uid}/password/reset": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "description": "User password reset request, will send the password reset option through the emailId", + "operationId": "v1UsersUidPasswordReset", + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "User password reset request using the user uid", + "tags": [ + "v1" + ] + } + }, + "/v1/users/{uid}/projects": { + "get": { + "description": "Returns a User with projects and roles", + "operationId": "v1UsersProjectRoles", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ProjectRolesEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified User Projects and Roles information", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "description": "User is updated with projects and roles", + "operationId": "v1UsersProjectRolesPut", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1ProjectRolesPatch" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the projects and roles for user", + "tags": [ + "v1" + ] + } + }, + "/v1/users/{uid}/resourceRoles": { + "get": { + "description": "Returns resource roles for user", + "operationId": "v1UsersUidResourceRoles", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1ResourceRoles" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified individual and resource roles for a user", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "description": "Resource roles added to specific user", + "operationId": "v1UsersUidResourceRolesCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1ResourceRolesUpdateEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Add resource roles for user", + "tags": [ + "v1" + ] + } + }, + "/v1/users/{uid}/resourceRoles/{resourceRoleUid}": { + "delete": { + "operationId": "v1UsersUidResourceRolesUidDelete", + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deleted the resource roles from user", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "resourceRoleUid", + "required": true, + "type": "string" + } + ], + "patch": { + "description": "Specific resource roles fo user is updated", + "operationId": "v1UsersResourceRolesUidUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1ResourceRolesUpdateEntity" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the resource roles for user", + "tags": [ + "v1" + ] + } + }, + "/v1/users/{uid}/roles": { + "get": { + "description": "Returns roles clubbed from team", + "operationId": "v1UsersUidRoles", + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1UserRolesEntity" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified individual and team roles for a user", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "description": "User is updated with roles", + "operationId": "v1UsersUidRolesUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1UserRoleUIDs" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the roles for user", + "tags": [ + "v1" + ] + } + }, + "/v1/users/{uid}/status/loginMode": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "patch": { + "operationId": "v1UsersStatusLoginMode", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1UserStatusLoginMode" + } + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Users status login mode", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces": { + "post": { + "operationId": "v1WorkspacesCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create workspace", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/teams/{teamUid}/roles": { + "get": { + "operationId": "v1TeamsWorkspaceGetRoles", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1WorkspaceScopeRoles" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified team's workspaces and roles data", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "teamUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1TeamsWorkspaceRolesPut", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1WorkspacesRolesPatch" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the workspace roles for the specified team", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/users/{userUid}/roles": { + "get": { + "description": "Returns a User with workspaces and roles", + "operationId": "v1UsersWorkspaceGetRoles", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1WorkspaceScopeRoles" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified User workspaces and Roles information", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "userUid", + "required": true, + "type": "string" + } + ], + "put": { + "description": "User is updated with workspace roles", + "operationId": "v1UsersWorkspaceRolesPut", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/v1WorkspacesRolesPatch" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the workspace roles for user", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/validate/name": { + "get": { + "operationId": "v1WorkspacesValidateName", + "parameters": [ + { + "in": "query", + "name": "name", + "required": true, + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "Ok response without content", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Validates the workspace name", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/{uid}": { + "delete": { + "operationId": "v1WorkspacesUidDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified workspace", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1WorkspacesUidGet", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1Workspace" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the specified workspace", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/workspaces/{uid}/backup": { + "delete": { + "operationId": "v1WorkspaceOpsBackupDelete", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceBackupDeleteEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Delete workspace backup", + "tags": [ + "v1" + ] + }, + "get": { + "operationId": "v1WorkspaceOpsBackupGet", + "parameters": [ + { + "in": "query", + "name": "backupRequestUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1WorkspaceBackup" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the workspace backup result", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1WorkspaceOpsBackupCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceBackupConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create workspace backup settings", + "tags": [ + "v1" + ] + }, + "put": { + "operationId": "v1WorkspaceOpsBackupUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceBackupConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Update workspace backup settings", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/{uid}/backup/onDemand": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1WorkspaceOpsBackupOnDemandCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceBackupConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create On demand Workspace Backup", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/{uid}/clusterNamespaces": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1WorkspacesUidClusterNamespacesUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceClusterNamespacesEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified workspace namespaces", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/{uid}/clusterRbacs": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1WorkspacesClusterRbacCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterRbac" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create cluster rbac in workspace", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/{uid}/clusterRbacs/{clusterRbacUid}": { + "delete": { + "operationId": "v1WorkspacesUidClusterRbacDelete", + "parameters": [ + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was deleted successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Deletes the specified workspace cluster rbac", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + }, + { + "in": "path", + "name": "clusterRbacUid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1WorkspacesUidClusterRbacUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ClusterRbac" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified workspace cluster rbac", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/{uid}/meta": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "operationId": "v1WorkspacesUidMetaUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1ObjectMeta" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified workspace meta", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/{uid}/resourceAllocations": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "put": { + "description": "Deprecated", + "operationId": "v1WorkspacesUidResourceAllocationsUpdate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceResourceAllocationsEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "204": { + "description": "The resource was updated successfully" + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Updates the specified workspace resource allocations", + "tags": [ + "v1" + ] + } + }, + "/v1/workspaces/{uid}/restore": { + "get": { + "operationId": "v1WorkspaceOpsRestoreGet", + "parameters": [ + { + "in": "query", + "name": "restoreRequestUid", + "type": "string" + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/v1WorkspaceRestore" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Returns the workspace restore result", + "tags": [ + "v1" + ] + }, + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ] + }, + "/v1/workspaces/{uid}/restore/onDemand": { + "parameters": [ + { + "in": "path", + "name": "uid", + "required": true, + "type": "string" + } + ], + "post": { + "operationId": "v1WorkspaceOpsRestoreOnDemandCreate", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/v1WorkspaceRestoreConfigEntity" + } + }, + { + "description": "Scope the request to the specified project uid", + "in": "header", + "name": "ProjectUid", + "type": "string" + } + ], + "responses": { + "201": { + "description": "Created successfully", + "headers": { + "AuditUid": { + "description": "Audit uid for the request", + "type": "string" + } + }, + "schema": { + "$ref": "#/definitions/v1Uid" + } + } + }, + "security": [ + { + "ApiKey": [] + }, + { + "Authorization": [] + } + ], + "summary": "Create On demand Workspace Restore", + "tags": [ + "v1" + ] + } + } + }, + "produces": [ + "application/json" + ], + "schemes": [ + "http", + "https" + ], + "securityDefinitions": { + "ApiKey": { + "description": "API key authorization where API key can be generated from Palette console under Profile \u003e My API Keys", + "in": "header", + "name": "ApiKey", + "type": "apiKey" + }, + "Authorization": { + "description": "JWT token authorization obtained using /v1/auth/authenticate api", + "in": "header", + "name": "Authorization", + "type": "apiKey" + } + }, + "swagger": "2.0" +} \ No newline at end of file From 798c9bc6e8d735125761f3efe29cb56985cd7afb Mon Sep 17 00:00:00 2001 From: Lenny Chen <55669665+lennessyy@users.noreply.github.com> Date: Fri, 24 May 2024 12:47:03 -0700 Subject: [PATCH 08/31] docs: name change to palette tui (#2847) * docs: change spectro edge console to tui * docs: add glossary entry --------- Co-authored-by: Lenny Chen --- .../edge/edge-configuration/installer-reference.md | 10 +++++----- .../clusters/edge/site-deployment/initial-setup.md | 11 +++++------ docs/docs-content/glossary-all.md | 6 ++++++ 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/docs/docs-content/clusters/edge/edge-configuration/installer-reference.md b/docs/docs-content/clusters/edge/edge-configuration/installer-reference.md index 06dfd32f9e..b483541968 100644 --- a/docs/docs-content/clusters/edge/edge-configuration/installer-reference.md +++ b/docs/docs-content/clusters/edge/edge-configuration/installer-reference.md @@ -79,13 +79,13 @@ stylus: ### Initial Configuration -You can configure the Edge Installer to enable the initial configuration in the Terminal User Interface (TUI) when you -boot up the Edge host for the first time. For more information about initial configuration, refer to +You can configure the Edge Installer to enable the initial configuration in the Palette Terminal User Interface (TUI) +when you boot up the Edge host for the first time. For more information about initial configuration, refer to [Initial Edge Host Configuration](../site-deployment/initial-setup.md). -| Parameter | Description | -| ------------ | --------------------------------------------------------------------- | -| `includeTui` | Enable the initial Edge host configuration. Default value is `false`. | +| Parameter | Description | +| ------------ | --------------------------------------------------------------------------------- | +| `includeTui` | Enable Palette TUI for initial Edge host configuration. Default value is `false`. | For example, the following configuration enables the Palette TUI. diff --git a/docs/docs-content/clusters/edge/site-deployment/initial-setup.md b/docs/docs-content/clusters/edge/site-deployment/initial-setup.md index 457737dfed..05fc5618a6 100644 --- a/docs/docs-content/clusters/edge/site-deployment/initial-setup.md +++ b/docs/docs-content/clusters/edge/site-deployment/initial-setup.md @@ -1,6 +1,6 @@ --- sidebar_label: "Initial Edge Host Configuration" -title: "Initial Edge Host Configuration" +title: "Initial Edge Host Configuration with Palette TUI" description: "Instructions for configuring the Edge host when booting up the Edge host for the first time." hide_table_of_contents: false sidebar_position: 32 @@ -20,7 +20,7 @@ For more information about EdgeForge and site user data, refer to :::warning If you are upgrading to 4.3 from an older version, the initial configuration does not get triggered. If you want to -perform the setup, you can issue the command `spectro-edge-console` in the terminal to trigger it manually. +perform the setup, you can issue the command `palette-tui` in the terminal to trigger it manually. ::: @@ -40,10 +40,9 @@ perform the setup, you can issue the command `spectro-edge-console` in the termi 1. Power up the Edge host. Do not make any input and allow Palette to choose the boot option automatically. If this is the first time you've started the Edge host since installation, you will be automatically directed to the TUI. - If you are accessing the Edge host with an SSH connection, you can issue the command `spectro-edge-console` to bring - up the TUI. You can also use the same command to bring up the TUI if you have gone through the initial setup in the - TUI and want to change any configuration. However, you can only do this before you have deployed a cluster on the - Edge host. + If you are accessing the Edge host with an SSH connection, you can issue the command `palette-tui` to bring up the + TUI. You can also use the same command to bring up the TUI if you have gone through the initial setup in the TUI and + want to change any configuration. However, you can only do this before you have deployed a cluster on the Edge host. 2. If you have already configured a user in your **user-data** file in the EdgeForge step, this step will be skipped automatically. diff --git a/docs/docs-content/glossary-all.md b/docs/docs-content/glossary-all.md index 5b87320da9..970aeab401 100644 --- a/docs/docs-content/glossary-all.md +++ b/docs/docs-content/glossary-all.md @@ -257,6 +257,12 @@ most desired versions of the base operating system and Kubernetes distribution. **Examples**: (Ubuntu20.0.4+CNCFK8s1.21.3, SLES+K3S). We also encourage our customers to build their own Operating system. +## Palette Terminal User Interface (TUI) + +Palette TUI is a terminal user interface that allows users to configure host and network settings for their Edge hosts. +Palette TUI is not enabled by default, and must have the `stylus.includeTui` parameter set to true for it to be enabled +automatically. + ## Palette Upgrade Controller A Kubernetes controller to be installed into the workload cluster to facilitate upgrades to new P6OS image. From 187b0bf792513e052895d33303cd925cf1dfad20 Mon Sep 17 00:00:00 2001 From: Karl Cardenas Date: Fri, 24 May 2024 14:25:37 -0700 Subject: [PATCH 09/31] chore: updated airgap video (#2904) --- .../assets/videos/vertex-airgap-install.mp4 | Bin 2458797 -> 5992688 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/static/assets/videos/vertex-airgap-install.mp4 b/static/assets/videos/vertex-airgap-install.mp4 index 9afccf9f38c1c97f9bc9c6a61fb71186cccc8ce0..feb1e381f5c78f0d3828dde9c207699cdce6fa8d 100644 GIT binary patch literal 5992688 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%0AdA7VBYahtfUhkJ zQ)gB`;0-`ul+$x{_Laz~&+_N4?Fyo!Iu~StQX_rb1u0>a)|aZw5ITeu zj3n(2Du36+Cq6Ynj=gi0!5#c)E&Vzja%KFdHvn)l&D-~7FTFZj1-R3M zy5f35SbtnDfdzS&0RzsVKK{?_%nu7`&~XkAGP*`P8ykh2(iN#%8|LU$#uFZyyxp$A z4Y9^Qfqs*(AJ|%xn>9HekM8H8) zpO3&jsjuSf`uPE3+adpGSEKUmtaG^i2;u)xg%y<>WFUZD-kEh|cUt+;<@ok`<1+^4!l!~pPR6(v~Xl-`Ce zMu&94R9TY}wIt^jrVF4+?%rN_DVxsW$Xwt4RKLe(Z$M~yd_1}Bo4uk^blG#a{9EDD zZRaE}cP}e`_kEp2BdehiGGYP$R4kLCKRLUlLYaot*{sj8uRW?8RLpv2wVKd?vfRX) zduG1FTy9dszUx_gn`(Tun}HPLw+x{?;+z%a7q4V{I`84|M;I)}%VV?6IS)O0rh?Y% zb4c9B&JpZAG%U zf2>u4{+E4(*jsboG5*#a7?S76q<#1-)ZBPx6dwTHOcWx3Unecp{x(WqFhsZ4%~R?l z4l;;7NZAI!*t72|-oY%yy_5@7l)j_o&*H`Nzo7E6`)`Ps0YN7;+R+Nc<$ErBW2O9q zvQ_Z7Ez8RuH$iQx9Ast6zaE~c_Lkq8T0A2z4c6drzKD$P{PBFP?MaQou8h*hH zI1e=e=%evMA!UJm_AwRlG@Kuu6V&1BIu97u# z)IZ~7_!Gi*x05Kd6RBp1tlujYTpjI?c*gfdI-rp~81EMW5>8lsB6qiJ1CC$#%NRV0 z_vF$>MLB|>GUwnQ7t;$l1Bd_qhKrrM^@`1UsXSQg=67^f_x9ufR1vUX+vri(cggZy z0k>U>(6jI#`&>7NhnFTQ1%{&ygV}6t^YulmZ|wc+Nq6r&P?*+l&=@6YC&cq%x$ng^ z!$s6!@=tl1?qA?bB#47vDT{T<(L78SgtpHh5rf)+&amE~`Z`TkB~`n$k%j`uUi7mR zET`1+Ex>c%RQu!+dP=403o+@S{26EKR8c6ZjWAZxoexsE0 zvc1b*)Mdpta8V&n-ShUW>E{F#39fJ5InqBr&$FwgY~Y7-j`!7qvn7kZ&y#XV2m3jj z>r0>jh0imC_+d`OxmN4cr3(G)^f9}FmbG*dc(MVAp-jD*pcb!3)sXY*MR4Ft@SK3{ zFmXiyjsOthKN!FdWDKed`U^SfUy66qI>@xoVi{zw@vpd`1HIn_SS~)Y zrK9X}Kr@(rk~eqaboggo-L~z?52y5h=nq5Aq9qJ~F6Ml!hs*Xe6S05jhh6*;hgZ1^ zd0Zf#(9>x^SKv@PZobz0^#<_uAJ(qlBR$N6ST8_x5>(cH0pDvITujHeym_w1y^ZF4dnY4!z zco=8vx?CSG- zpG^LY%{P25!IK!nGSsJJXdVE3JaK??n#3$9akavVBoL?Z^Ed+zJO<8#g_BOnHb*E{W#GnC^zBrNaKT=>A zpC)l5gyoI>WTbcyT)i${}h*UuhWSZf{-Okz;are0KfHYf0qpc~n;M21D*+;)|%5}}F^ zTW~$wq;Il}uY-|bLGJHF8+Qz(%&JKyh2NPqE2qN&tg|{N5(A+Scq)~x2=J6R^^dN1 zXm-=P-}(dtNV`YTEaO)K>2;#3@l$8-kP{|!UQm0e_;Dp{t>9TJHf~6lCvy@RF(*lW z0zU@MxOXdMQdY`NpA+aYh8A9QH$(E0OtVWDwak7rhB3L^J=9tFt~2MKA%-OK-H0!3 zp2*)YEf)Tu@!sR&tDGhXCsZ#XP}CSm$Vp50lVYhhc!{}RfK9PiEmSpcIoiw+y(Pk8Kz1!1fZAzE;#Qu&Pt07NF@A7=ggcyg1{H> z`TYi%M%GTClV_qjge};#y1K~pw%-bLy&DD3y?lk@wY+jevG2>P>QpwwVeyi6viot2 zUAr6A?Wie29@EEuG%@ytAEN@mZF9k1RKlM*3IqJY*~EBoX?L~V_>sxT>~)vyrvEoG zb15Hu7A7@@@AK6LV`9hn`4OH;L|bQcU>lMh92Z{=d90Ba>~i?HhP8+WW8oMHtJ)>u ziDclBA9TB*8Y~eaGm0cl(`YY&AmTP59HXq$0Xvj>0aRUf9X>z664P^)0zl|HglL&9 z-_>PCI@O4Qen)X;s$}q&moJuO{3eiE<1L>`gitP;mtd35u8FAGr_%TJ=v;cNxXdq# z+3V&Sjsc37**t=m#u5KS9~v&RjSTKy2id|(vKkl{cyuHvQT4m!iZBLJwaa49YG`3v zt^X0n$7u7f3cViD_@QIa0S{){Bz%S6>8&KC8ilu|n-RZ_UN-gz$J+9;YYA>0WCv!V zLeY8!Dios;+{84^2iEICQ$JKiL!@hd!SOD({tS*+4KrZn944C1%xI1)>ffTSmT-@} zDT0M9YDe%)y*n+RcowXkN2%psmVVQ7NM9tpQC-N==L4Bm|m2h|F0{tOg{7i@C=rVcaziiCn5(CRvBbp1u zCyVNwp?z4N6v2WCw9&)&^!@TZ98*+J!3Ezl%FM5!;wfP25b#u~L!QzPn~nc6x|jT) zm#2T=><%snv?29z8$NCQx%AcLM248qaCYM8b`2=sMjRm&^QONdS`d%eFvn1J#Q72M zq`6VIDWuu8GJxHJ!E4RSZN!d;4u(0phh^%BcYsv4$uprKgzJPDAN*EctdehstX$3R z-Hb|JSo*!tIPQ+tUG(#$YGBCkK%t_gGZoFh-Thy*3^QC02V;H4k6ad3dCz1g`isXN zc-I_F(+><3v&L&LX)PdPRqEaXHS(GEI9ESn*#cDCbY6@g5(4dKD0Exbq=-S!YAYvOy_7?N1m4K4#2H=$~Ou#lrS?Pnbj{3S;>rR>Spn>E{12tWO zvr8idZRs55O13MJ@5r9@njBO&YX~tXHouaz8=N5T;7PQBzJMg1W4~NU$4Bx&UUdO8 zJ7XAGcImb`SJf>Z_nX#?UnA%QtL>4!rh0m)p5Cw*S{Q9F03vI7Txx>ff3lOpu5|wV z%zfIXjeFodSS!)^dN1Gt@ycQLQE^jq=Dz6w?jYj%-o(8OigE?u%)cN>T?O{AR6eR{ zPW1q{8y@t0WH(Im1fw6Fs1F!M)<5&pK!48~ZBfJVHdDZr0&b2q*-%f(IBy5#7=jIa zN?sKeiHmc7r;b#o)^+%h{`-onj@5<`BCTQnjCE8eqkwFTnrz5rFUZ1b^uHK9z`^&FL0l2! zv6?Kvw7P{KNET@85Uri;G+MtReD@oIAv(hO?kknO9X1^Ak;W1Djb_rUDP;{`of#_4 zsyTTejO7ACH9sL&R{u?o_30b*AX??YA`*99HNfvq=9e&40s7xtpo(Ve9W^gAeLU^+ zU0s$~PGFpUFk}?&KPH*4DV88q{}Hz0|Ha@5@xQBs$bEs4MPDu-5$HxF6%LWk+CDML zcbgZ6&=%F90vOczPf&y}`h3OEa@Xf~;j6)b+xJj`JuKw^n)pS!iT^Ku0CTw~Eqxa) z!0mKbiJ1dHvrR!k>!vwwaO>_{|KW$x|HA41kGu2V!Jfc6ya8Kqe-`w*C2_cfbd3Ar z2^FplAumBTFeT>yTZQzO827);k4j%G+?l&BL(66l2oFG;CkP9kp$qIA<^uo#asT4t ze$y>u9XTYfcv{tr56J`Yy#X_wHP0z5)yH4*Q#UN7dlwUBQe5y`75daL+QoP3zi2Fm z`Bcqd=UBkW@mF7dRcL9?%m06nXs$@FK`n?{P5O`>SXA;JYV_tnZHZ zg@p|kQWBimL0Cg7zw(L|d#y3^?OB|UzBr`=OGO1<8##{p(g(2jL_m(wz)d)-5%pYD z8&3n!DPAXwZLN30T6pVuY>GW&@MND~;HwRKQ3h>4(trbCSmx&@!iv}#g5rHDv~4aOnB}xW(f<|PPPPGN za^Se&pltJs^ukOU+tRX9z~P52IMr@ga%PNRc{FQ^;at_hAV2VgZ15dnFrgu>+qUls zAN#7jGFCR}Rcg4`(~K$3#l$029ji3|C+PnVd2HOJ@X?~fm2Q1O>aX`9(v!jhr%AZz zJ7&Z9dW*S=V?dSa!}+^b0XlxSD?Wzrd1yYtDPVkU6Z8O%I_HQ+e-pj?i;py=2{Md6 zdJG`j#&DP$eMeU1A;`UE{Yi5n#`o}pk?im^vt-bwNfjI##HdGfD(yu-;YLBZz;8cO z{FOTV9qK&&j~0yaQpxFUbFPY>dA*!Vaj8rc$~H+zDm;uwIRGw;y>+@&A2d z-d_OWe~-5z6E^{}G zal8N2ApNBe{@)DoUn1n0#Q%Hx;Bi_m*OxZB+&eH;0tNPZH-aiyD&jXpyBFR_N)qLN zrx|2zK6;Ms|8E}&|5rX_skV1%FIe{wY(c=%hepDQxFLtqvWwZs zG(cSVEn$66hlo&EoNyDso8i#xzxtUgl~L%}Mt2bIaHea1Q) z{yJ3p;nJvsT+q|D`6F#YuRE4QuS7JHdCf(WH7qXaBn1)#ZcG zOs{KCt!j`k%m@7RqF--!PCt*999S(O4<@f1pWys8OZ_Wz@L%t7fL#xa$+{gwnXbEs zGJU&zFlm&YUe+~QdPJ*XBw)L?Iv4+2T;i92_<#QK^Gu##^0dz7V#R}q6*GSSOBmsS zFn5;?v5}~I-x-5$M-F{354Uo*n6p|2Pd|3wG*Un}pgS4ZiD0HL=Mb^HV&q1b=rQJ5(} z!LdXFB~lE9#$f)Ba8?A6ih@^P7aRV+wJH89yYN5f92Ly~qcUzTbjMFCuE=RSL;hPZ z>{RsRgXEe8d%Jggzh&wFlREgn*ZBWMSs7FJ^#fPT|Ug{Vgp#w>Dwmm(7TbNR{%<;!J+^c?xY*7B&zpcA_ z+CVF%z4H~a_}nZy1Fzd88&_5J_rX69jA_4jLOGZ9-Eig~t}dxX=7Uo)q8A*HszN z!=iBmQl#c7RGX3#5!~-$u~A$p;PBo-x&aQqjF>b-%uhfd@^$*XG6PVufqgYDtI+N8 zNTmd{V!YGO35zVnG2cf3=gex}f_N9pdva}=RBN(_LA_Bp1bIK;VtlinIky^K!BXHb z2-j>D7IPgAGs9FIFLV%wUL+SGeGE!7S4O(SH$V@5H{q>;n|o51R@#SY0ow=JTt4#R z(qRDowwAQC0}kX=04F8VsR9Sk6iEQ#a*P57)t!?}kaB{fKm<*kN+HhIf7@^vZrJr2$N8n&#-clThAIqch}@nWXQ zHu}3KYM9S#pz(B`B8TGf^ToHofGgI^7eed%gFV}J&jEt#eg9PVX;Atq>bQrROD*D{ z^CG;E98LU1hagI*alS}SQUfC-y=}>c7%-=uJNv|vx~JctJcu#1418cR(WvteUvz34 z*y1sqQ2^V#buGcf1ODo6qgndF5;i*BIcc;Z8=x{M-#;_^{(b^*ek3ZMxDnyDdA7sa zmc^WOPHHtTvPuoJgfw#;s$x1W7!9r=MtW^2;^}kyhuw`}GunSg3ZXe1O@fyN1-9Kq zMT8D5cF52HdWi&|n0RKUBou$?;dr{5yq+eCb13)vB6>5%1ezimX^UXEs1~q9<*_VzobRP=kfcklEPFe7;6c}9y+;(acKUC$)$FpJ%=#;t9B=t+87Vp)eukxt#J@YCLo2y-o7|Wg!I1j#t}W&(vIvhP7D2etM*~9 zgW@^F*E*laYS<8jR@O^BEf=Iydw_Bvq0{6fj>mJ*Yeaz{JGW61Gg`k(cd7d5DL(Y> z<41NbzJRcrMK37-xP%d1-^($qz^KrQ74a%(D>*C`1=z^$M7cd0@=rWe@3}oy(!Ev6 zyct?!sp`)FI7^8G>&Fyj6a&0GHc&2Mnow<+hb*U0P|uhz9J5s``1~svTqQ<`n}6L&Y-BxhC&PrFqYbeMi5e$>kXbh>agw%h$j`L@$YW|-?(@zK$jlxo z%p0o%a%NS0L=%(g&L=~p?0S26+1zWl@Zh9p4Lo+8C>M)kZlSVH3W-_(k-crbIs(zynAL*h)Hdh$!7y7> zik@Yj_FuAMryh}!utJTf(!<^;pMKJ1a%Hn_xp z3TWa&)@;aM=|l^Ro{E-XZ4gePoFh90f#f)EgS4xSj`;QdxmyHIYMP&1oI_Q2}> z^pnQ9XOJLuO@+Vp^C@a2b$MTuq>dP%=<@^05J4!ixo8`T13AD05kcyB;U51(+%2mJ zsq=JmqNz>__uEL8m3n>-Eo)6w3l00yu%cNQr#22~*&XY4JoOKnkQ_kwawtA~`s&;e zx`di)8Ht}ze!J*ubm7jQrj0}M>vIEZWx^)!xw9`B;hq7l#IzgoVM>vz_2MV^pP(86 zs&U-f?2DkV;)hk&7ZszU7co+^Y++)JNUrsT9~8MVUQa0xOb1* z!>DmgMOy)oS0w`aJ!sc}No?c%>+8R9wW#t{intjdg)u!Jt=mm0Gr`sBqApoMUS(9$ ztG{=>qL2ZK*r8Ox=n)(3b&$?=tsHQtG>{Q?IZjHE! zX6NXTHornAq%hwbbvCFoz^T__L)lB+ygdADm6-b*0kzHt$zHVRVQYitz298oD~@*T zJzTl(05~qLm!Q!G0v`_kaS?+HGX_H8yITFbL%=0DyBN^8epPbDjvXG&9>?8`X{kA= z3^6dMHlkj2N-zW_JAy}(EpFJ9L5CZ1vcNho7Nb@v;njh~|E7hV@=gKu|Z=Ocd zC4CL~MCu-!bn|##`zQu4Oqu&SRc2IDF~kQ!LCz%1Tpv&aPl^-i0!IxH2eTuG$-%B; z6R#0mX-JsfD1RWiEj7S<0YINpM`v(6Ja$_Ree-{UaWb8ZFt51uOxuEg{gf?MsfD81 zUqhH%xJP+y&AjilT%V)!_ZxwLfiMox>QpX5nAeAJIQk_V=Eh$oog!Yqi@DQa*k5+v zkLAW9So;n0BY>%lCI_|2a06n1#CgfHHFPrggKeyov*gQGYj)AoGzRvwrjr+6FSy+h;p!dnM0sL<<5!bys>NS z6Wv7~$ra`0nZ&aNCDkjhe7lyow{{y-yBUQ35nxy*qelMeopPc4SV?SVbaPVpqxh(R z(Q(M#vA&%J|5LFT4z{Y7&kx_csx2`1KuU;{&=a|*@fP1+|HNrl@`)|NtK#_*nXA5R zgGT0ah8t4dI#>rO)8QOXhpgknXM4JsuZkU#3sB<&UwFiBGA}RacC6}k-gcnBc=>he z+-^|!pc&#bQc|XU<-;VWSc2}|`~?rgo6fytWSTa4VILraO1Z;Q#?c4=7SZJXvAp9+Dxr#*X2MVnQ7Zb{~ z(p&Fu;QAE!o#imYf6%HvTazd$YO4{o2R&cHTqs_UJ-IJ@SM7!Dc&MbfYrl>r|c_X@=M1=j))PzB5aha_?ahlO#;PUy?~&@mTb%puj0MmVF6?T?+6kJBzU#)b{ z{^U2A?=w>xdhe+-(V>e{@|s;nb&uWw5>b9U@FTLhUh=y_63kkA<{}u^X^jUriz$ok zr~|ZwIKN73`K4BX#kwI)4aMeqsZW4!gUpy>SBj>{Wh)Iz6u{q&sTH7eg9{k^*QYg>0d{&*Fa7)g}Bn%hEGuc&|UT&`@l2FYG46M_l3DjT&QGfn?tRk4G&imiM4?V^6eih z2*}PHP6y3Cfex*R!g1EpTO~QX)K2={kBwij?q;AQYCi2f`fg|A$$yz0(27ysT_!;~ z%BA*WIt;En`s88Q8b5I~N(n3l`r4K#QywNZWi1QnAIbZ-U3!#hp56G*OR%T{cRUXi zJa1{v#y*zU*=;l2-fvVSV~mIAb_&`g>K{0=+8el%fms7WVocVU&%pvW2hS9Of7jSo z)P%PMaY`!hdYC7^WEkn08$6FYEbUCk6_$uU7YSeL_#ce}akT5ZPK`pwhqZRv7yXJ) z&BK!tBAP0aX=WFO<5&rfmYt`m9VTaH_eJBGd_&2%EnPr%Bw`_y^M7uV_4%v8Dl0h1 zC_>{R`K;Fnj5E=<0stwlHo3;-aAa zhxDkqzO0>O1E-*(LK&Q%+ARRStpIa+9626f`wQiIOQr(~#RV`IqX&v_7;d_)G8P9+ zY?va`Kqj**+)_T8Mf=I$8&>% z(6XKitp_z`3lT%n#Tq>L(|;^~XdJLu(u3k{xoJxX>gNnVIhJb;Jn=0&6gl zRzqct6NYV){jU78Xu*D!xEuE_Tq780X@m6SALa<1LHQ|V0m}KojT^YPew8xR?rkN-+q%q zp6YNE0;Cy4geK3F;{lVx1+icG#)zH206*dUwrd>c{~yNAIX1KC-`B;|wr#sp+jgh6 zZQHhO+qP}n_SEg|{LVSK$xTjj|KDq`m6g2jUU;7GhagLtqo>A=1tK@QXo+LbGA&r@ z3kQD`Lh$6O$d#hv_G}VBVoY+`p~$g)kV$EDWC7l zn&i|8)=_+Zm22eN-qD<4d>OS`Et1v@{cEmv|+t#HWF11(F z8*`#t&RMxaf_MtZ?<{9@w{-rZeKp#exNDsCX*vrTA!IZC%`j=4(c?VD#~fPLqS;*w z>$((o9a{q{h9JdPM`NvvPlARLE={=E*MwafAi#TJCDB}Efy0kg=!Ejr) z&h{pnd?Zj8u=1-ZI-7pN-8pe+0uXBgBaPxzJz2Ii2s$I3qpt)_0TCcZzA>N#7N|V{ zb1PE+8xxz@*zWzlR)rvNeAiHX?wt6oR;TQz2CVqBvdnF4e{;Mi&OeG{PHN%fn;L&% zLF?zNW^~Q;=JWuPyR7Z$s0Cq|W)M)hM6De$lSqVRyQ=~m9Z(ruE9cMk#*OpX)qSy3 zt|fNsDr!bGJq;sss1%RvumU=U^2X~VkS8wLO4RPPH=eo-e+D)9sy*f@^%^*%y`l2g zQ+AhrP_u{Y1dcN69BLb6A)9adV$o|en~~e`VG`R#s~f*7%1QnLBAcInTQ+>|5Dal9 zAYp1dlCNGZrkChoXL1$`@F;coUi6jNzxX$A_AB-_|2fxKf~5*d`C5B>;+t5v3Czsa zcoXSr*|G^L*&*TWI0>M7W1gfBduw(@$vN`v@T3*g@%WB_e|88SuvE^aMpO4Slx5ik z?S1D?oIx+2t3J&t9|UWnAa1UtDdO-$1mz|}GP_f)?_LS16*pcw7qHIF_Yv3y(&%8k z7Fhe|_xrSO5^9~8wyKnFKD*(QJk>KUwZ~7@<1>$On>U*aKY(IRhDbGGH+(r|w}PGr zvPCPa+_8oyFSB~^brPZCIXzaN|>nj%L%ykj6lJc=$c5~xC}h}^VU3s5tUPO z^;dTF0Shx=FDe`{zwIo`gbS|UjEJ~Eiy|DQ zLNFC3p*V;PFEfW~5p1y?l^4e|-j+OU&n7RtOUTD-;spyNrrcJmi;Oy2;0 zu@)IHv9W7-*Hp*rz0(KasFl9Z=NvD@u{fu}-Kh^Zee7{llTPV~y=ME`0&o&pV~Iq^ z$=*w!M`UEUOf1O&2ArbTT5JQ2j}QchGB%>$q6i3d)ZL=2i%!5ili^1zoO=%v@yFIUJhA#X%eyf~UAd1T4TbNIyh zQji*3r5!G4$a(LCyQUN;e^sJ7bOFy>&=FM5>)N6X^7AF<`tIiAW=KOOYhNfb3R$-< zEF&)k_!4oDdHqJ0g6~TyfN`$TqEwF)$hhySE3Zd z-5vcUkR$sn&GtPaR6!B1E&u&KbD5aT?IFSR%-cn^Ogha|a2GF^2*R$G zNU(T13vG5{qUd|{D=+?mT9er9b07vD5cs4eh3XJYvbx{&0ZNvTr~3QBf{vUoufTrO z3>u?l8IZsq!#rG7{Wan1oC2@6JJTq2qvco3+=ZYq5h&C)mP8Fyh%e*tyqQ}<@NNL1 zQ>nY8v%5*7XLOkMO=4#rL-x}EP$UI*^6QZQ$hs(^hJXr*(pjE6;1UERXE7O7rws<> z>Jrt%=GhH^HgxCn2UCCD=qs&9v6fr>Jdj-t3 zI-;ESEdOK=*<7)At{!M2cEtxY?3?zk;>8vhcpgLOQz3rQ$qOqqfMDWSXu`G7zf)Cy z6V<*sc+-lZ^nKk-L{l5n?6cL}#$~+3gKGz0lYc_E=shk#_JW^YqQm_^sXTAco!`Gd zp>gtkqn9`)w-5uHuz`geu<^3*6bkheXh)Z~w~L7tF|@j901Gq{>N%>~f1kx#sK(9( zXH@Ij<@hUQ4hrHccf0X|H~fWE;N4(ZTQx0&P(@l%Y>gV$CpoajU@`HL4wn!NSU zx9f;7g#|f{f}vkP0xN)hHLj>rhx*q}T#VSHj@&e>mmEVgJLzfV$W4E>7A^MAQeMM> zC2!g-(oL79mOWy>s{=C9v(4npF$Ge;{UX>8)c`g#Gk{9O2X8|y4>Tt{5}FQTsK?zB z@+RfA6o*frh>HR%4O9jQmcd7OO05?>jTKwLy50kW0ye6n+&)o955d!^%Q;oMa<%!a z&oZkdBN{v5%Q&L!e24zZ-HK;5H+IKNc0LCi@Nb3NUP2enIAkOT%-^sGMulcEW+yLn zEK1^x{yPACY}fa1=azP}GGsHgdN{}ReM73=Q@naCV?a6%HRRXiDt5OWZq{%7Z-0*I ze)9OhpuL@*(;=$`>ar`($hR#G+hJdrXW7h8xR_0SSx+9M#xqRx&onTWTUHC7dFpP1 zLFX*;M!l9wHm*o`SDvN9MVi)da}yeX0)dyb9h>0*O*dI`J&uFZZ>XFgzlE@Ha9A53 zwSb?9)cu7S1i-w3XF3{pNqj-lozNOKMgG~(?69U3iJ=Gw{cr#!exjCQ)Rk1^UG>i7 z{M8(&CUuiRtF5ThfGX#RzwJ4@bVBjEyUYcmv2_3^UU}UpX@G~z{)2bA=Ob810##H{ zK=d`-gGfezSHTH>INgH~oA?Rc)|8$lKxo=hV5?m4XKQ$YmlwdzSdRiR zCLy?LZr6qKVb>g-6`t}At0E2&ofs>`6w(oDS>@dI2NSZ+Whre0_`d?wO`nsMIm^bO zV8HvmhBRbXR{Z4ApU6;vsgh>&$9hUQhq!A?Ee1Y~O_xaB4Nxa}^pgaA0~@Xw zHa=zB^z%noI9e98>#0Mf^Ff!r zSs_W}4sMPYEJi(Rc;{LXRhql;N~)+!NeLtt)!39q>#-W3aCIXE5a4tfN&|sqwz?9Z zi#~)Yz^_mCPHGOL12lMFTvy!IH&cN;&C0zh6weV~_*jbL_})jdtRu|V0Mf$m!P{Qn z*8s?@Z{aWq>RU%e&@=zM)dRFX2C$q*9{HFgub-d-iFdNZiaSIo+ab~q z9IX&|oCPVW%^1gWVa5APuUtkl=HpaLk5y-a4F5{z(|oh9VtgaN2c8hDwo%hdT2bZLq~g$yYjDgT7T}l)Q3sIMc;#%ez?)v(kW1hamO5vCf)> zJwqj*%iNH}=x2b>olnbjvvB!cvxyZ`tl`^whQY}^aH=qBwZK5kR`)T%LZ$1~&bIy= zeATRK4H`Dto$sA`@HS~~NU|$9j*D{&H!b~9&r#w|S=NVkLl8qyhDFPx1N}jOd!O$+ zHl%W7xWQ^$=oFJXpjz_L!@*vEWN6+{g#CggFhvCEO1=o-Av!*A!guq`3dfJEhr-6a zag?2iQvad`*_efR*Ca)YCr}KbJ;dlWC=Fyw=WxAk7|Q0qv@TrZR%#ae>$pLCk^pD0 zf_%_>&RmkdRakg9HuLdICN#hg5LF#n%jv|o*x}Per4rYaEG&%pUA6CTWjv+uM{mK8 zFG#*uLM)n{VP*uV;iWXnZ~dVH7~H%br28<0_xkm(hqOgY57;Fa#8fZktqt#x7_7)} z5jkDXn74iyyB|F&?1z$T{e@wnkzM1#yx{34ztSxk;n#NvGib{jk^I@cEE(8&Yu4Fm z$+Df@@1AqAMT2GOrF)&+*MHE2ek13TnbD}}gr0nF*u2sq7SDQ{gilKIT!3Oyf*`{f z6{EKu>}xkqI#kVRk%V*LS*nI3;Y2>lL%V7qyjRa=EDU=oC9M@!A&3NJ#hF68e6n)7 znn*r~;a)gFok^CMfbv+C%^U-r$6;o4X|sN5`ucf@Cs74h8FJxdeGn^hJpjY&@V8my zaw@4u(Gh0QVurWT?)~>zy{Kr{pmrg5@m{M98t}yx4daKUfk`0BtuoYqE7v&#ojVN$%h+Q58)QucVWoKjG1Qsb0Vq@S+3k#+9WDt z;6yU5sAEV@Mx15S)oQy_7Q03GiS0z~6e=M_7U-u2@;!DbzXUfMo?Fi^^U&3m1D}cd zWY6InXS0?|p23!5R1zJm`Pv?YT#tdO51-T7L=FK(?lJ`aJn3DF|j(=UMe) zk^(@GL!!gk;`NFG^a8@=UIyDgcZ1E1zg%r)57MT=qCpjUbLIu_|y zDckqYrF-^2aqJ(keDcz%y9y4v)FMU#7k#2J2()$*SYs!KXh#T?8dEE~1>N1Z>o0rv z+jeLsF2@?uz9{b{mjG)_`8+`}y$rW~D4L<+`?nH;yN<>zG-mKi*IKM21gmV->sO?Q zytnGRV&0oAT4XM#KS>Y>&Ii_Eo?KR5)8bC?vER|klMz~o9cGME7$Jw#AfyE3J=9cb zxS8KI$q3)i2>;9MlB8T{vI%lqB@@r!&|IHC&&tgj17?Ue00&%3l8HjcMM_7apP)i= z7cf7ag}Onupv-9g5d7jDiLbK}= zHSN9wD<9lRWbXZ5fi2Ll#=_}I=v3cY&Om^4McUS7Q|*s*aOC%(fE14#fkKipMGjy$ z3E0}jfm-}wL7-C$)t)K`V~w*6m$>cXMqO1@;`nhp^BRN013^KW(yPrp^W}R4EB zRE9=0tk%}Mr-RJ`iD_+-ZR&|)+96$IHLhEGEFiAXGkvX1N)flGC={a>mA#bcJo6JY zei!Gf1sY-g%pT=`Kz70NpV>=ba}tc23gzNY!b}S8%PM8Xgy-4_OxSX)x}oB8f&ORF z8UF`g|MV#>tb14ghNvVZ>CXA7s4boEOZTXV8!2+Q>wa-`=rxyILO3O3Sn0>%|FBSM z$dXXtBE5kei4GlyY;)0d@l&*a=1;-)y`%JaXck(i@es-vqRL{{y=G6IvFJ9+-0n|L z|03J}FK8z1gY@lrX|u?@!2&*vmFZ68+wBwlM7$G5kp1(l_clcv+a_goZv;LH6rnW(p8F1+PgR6&LWclv}jf-?m#l6 zxWkd)=Ves?q1FYD!OV9^?J?8F)1nU>U&LtjkihEfb*WueOnY3!X*LtB3zMsQe;#N0 zFL2$LIU=HQlV9-D|B|KPjn6@;8P>dWL6lXos@|I zhO0-mat@@m{;$4%0OtQe0{?er4=n0GO!BGkjR6#3pEVf0jVnH=C}lW0EH)Vgb5`LY zB181a0~Tn2@zDq@MOsM4aEX>12hXU1MX&*ceHB5S@mM9b2Cg&(~7a>8MB_puS;eej%!nU*8SE zjd6j@#`z)Pe1rN7(DuE6Fsf7&8uq<}p$vO@(CI_4&~_l@X{a8s@HD8@z|?=-sG2$~ zFRIJN_%W4L9hx!987#vc8TL+p5DVs&OgWb!uA&lDQrGa^K-TO9vTA8scM_t}9$7rV zq;i$hd+B0(S^*HUl`GrkMDihr&QEqcEQcuWa`9IZf9SnI7L(OZN1{1K5A@;k4?@Va z)UvUbpMA{968$PYu~SnD6vRck8{(~HwG@Sq8)6`%N#!DQ*ORr1l@J(6~oufIS%A=VDFSlV}pqXU$n0-{y8yU z{^>KA;9+g)>*90$#|NY2{R&1`tN(oV$ke0b*(_2q7u@O%E}gya^MY?H*a6Ne9W}Xk z+`F50aEU1RJ4g7p^9CWDnBcU4_#<6V1=ovDQjAu<&caCY`8#kPM|ly+E|3_qGAHZW z{K!?kNE$Vivyl`w)N)z``_0eUo9SbyJ8Y&+^}`ylT`uLgCoe(s83#dlXDIvM=EM;{ z)L~DX4@~>>oX7~p6_T5t9KZ{>`yJkcyuwiZ1lW3Kw6b7!tZdbr?kA_&sG6+PQy~Xe z@RI}OjHVAQ6B%dSugGbiOg>;*0=xJUi)AUGIWXi3JJ_o!(xzJ~)Sq)tK_ObZR)Tor z%mgdElyt;&C4Q$$_Lg%gqOB(7#qV)7JCR@^*^8Nilp?ZgN(q>uT+=R`d%Zw7d8+ry z?vIeB_(xl8TJhEbT)D~V2_H2s1PqLKHM!CKNj#E)RTLG#2!Q6AuAT{Eu)P5UP4&R1 zELgewotQ=5vJMt}qq-3<0E5l*b&B<+`yAX)CZhL_zy6-Vu^8|My#k$J-%Uji;EM6w z5nT75LG70k8LOUeNVJIqd5D*?SYu0gIyunXLn~d|C{l!B%8wEQyRF9n0Igc#!f+h5 zErVixf$Tg*IF>XTeK`Io-r7aS?*(D05pTt*Q=oACbaPg2ItLRg@4x7{L@CzPmk*nN z({V)TW@}K!Couy&NFYafqy^_sG=EC>4x1S%5;$4=_NDo1<~T@1BR7cNBcF(?^Hyta zd2oorBTjzsSY+nQrwlH1h1WmXch@cyrbSk$(CSslxJHD2ukG|RJdJ4KG2GBkwOZ0Z z6-heZqxfO*F!L?ok?Zn{x)rQd+hCn)v2zbTPjbP^W^v~5mVL(Lw%E4#iO%82jGpoV z%I9#UbU$O3(~;u}*J{NA82gA=1DmHy?FeG6r-Pr5!rT@+JAx90lfpQF1=mkMP&CI& zGA%f+LPX3Xz`5yn;v@%=M7K~Ir;Tf&dz@nhS#EYwpVcf!gxRQ0^_N4q@FhzIMqOsZ zm?=+JVBoW!XtacU-}7n9(vKp?L@s8vAy*6cObp0PJWr*jxA#*aAc+pbWy7Np8fd?s z);yK>ajX8qA;I^Q_I(d$eELi0!WIV?bRkDYW$L8>o}8!Ff!e~Pj;q=Gm?Bkhj2zmz zYL{{3rdR0ba1P2O#x57yQ|95%qHs`-v;r^u*(72jiIP<*?9OH|PC(&g-)r)YqMw!c z##$I)-eo5kd<9~lmcTD!k~bYNLZjMaa6(Zj&eW{+9L`4ITvpW=TQ0j4xsAr-68}Ae z+l_APBVRY0Fzwhgg9l%LOG4QKL|z0U?KHS&4;Q{zWpk3GZ)je}O>sHVNgUVJERZOE z0H$w)h|K*F%ZmK*!f7-ky3$framSRT2Yh~`^M&PRZ}7wqg<-eA;^H9Y3Nq*y*ZaA_5j~lt zj2Gy<8J7P@p$Hr)pN1&tJt@i_QSn8y(4dg*Zy}UqE%ovR)GWKed!uaufn86 z^GZuRlTciC(O~nE-lC-{wfRkp|8f_uO;F6yxLF)1TADG3M2Wb905}A>kcw+o*eHsd z><{TaB8E(E$|fIXw&dhb@|E^wC+R$B8&w5 zL)8QB%VBp+d?U0?m24@yykCc~Ct?jFq!Fc3&Ct#T$=-5#o_e}hB$iHb5=M^bgp)K= z&hs~PA=!IDf&X;%+2xRTMAiOa$~ch0VL4#n>8ZcjixQdA_t8TM=9` z+9;1QwBOpMAdRN--Z0U$*}V7QEL98~I)~?}k2J=X<%vkt3Bn+FpJ zM$$OUCU3fB@%u zImI;>7#xCW6hOj!+g)2KBh6o2>$S|ZoNBI47Yo}uM6jG$9$WLo>|Bu5!k$+qm4Rxx zseqoX`xj?*{2x|3CSwzZ0=e=GNaJW7yps+%8E0c<))wcQ96OLv=3>{E{i1bg8aOym zJO~$k{9iP4sj3hA!3iGthoH;dKQ3MMKZnQ1uJ&@KGo)9H-+}tw8TCmm<}3*3hOJ;Nm3coypKZpo0kPSw7iPkAmFfv%|J8u(P>3T(CXJ-~*>j@~W@+Y=&S zv6CjPSojTm4 zM9!-oi3zE%shjA_qQ77Lc;bq9QE$dMZprvY#NG3z%!zu@&b}H9!eP)S>O(st{0j;e zP{VU*6G=if&#>?fW2{oQ7H2vLIetcGqdMi@Ff3mPcNHf0J%SDCoa<5)D;i?k+j-VS zzp1^`JP%ZkeG8wtPsOP<!F?uc&*JMM*$@P7??Dk^K8~BR>)v3G!1nP+!A&q3b0ytUO zBRI-UHqnlq%ES&Bg`3tst33wC)FTjBD$_6#O8ZyFs#Go?4y(w?Dt3KmQ!EosjKGxADOjPW^|D zbF0+fCx$i}34*igk+I`4f4XkO0}F@`)1zKCF$I5jGAPf^f#ZX@S-X4}>;mK=ou7SU zTNu9pNv_IqlWvD@zuy+X=2z?U{k(hSpLXW+rq701ss8xjq}wLfgMn*PsnYUm4}}2e zRnGg!CCt$J&jf!*=Qxn-xTdq* zaf9mo?^@&m^!A?CJN#*ShxZ$_#HYuX6peA`y1=NNS8p}6OG}!VvbY0HSapfbf(sa3l^NJt=~l%d$Fm_ooN4|0|>YM?qQuzw&wU}>~@BaoB);f}Lc#pwOi6Q?1+a3qlPIA80C1=g9U^8-3&xY_#Y7$m1%=D6?mfg!AgYd3J=Rae&t>*G zSbk}ur7ZeO2k}S2MDZZB!kits4HT-cE0cH+>xh8F;)-vagvE?EWf^UYCXhRnM`Z2|JvuGQ(kBdM>zD1?>Q~ z)&=wuW+VS0eX(vtkjj!`f_Wm}SPHh9W^!)Y(1cosCvy&a5wdPSm`!!b+8mr+5EJJ} zUof>i@ysI6FYP7PMs6p``US^sR1&an901TJmRP%-RgAbme^s-4IV&bEw|OA{a?yJi zYZi9nPoMcJK_`IKGSTQ*Q=jRAMk~5WHuLLrIh(WTt>1_C11Onc?}KR|bQZcjm4jw# z?T%*}V}0ULT8%HMj%%u|JZ>cO4}%T$wh4*uT9S8;XjM6MNu(aa(dU1YC5=oLXc?Ui z3~0w_U^$+IFt&%y4sbO87-<4WWa!k)Sv7p}ufT-4#`-ZwY-QF4Hlx_bZRFJB$iD>f zrv&`rq3t55?5Y|SYVgIcRA^}UJ#WgE$s;W(^E*YPRcUJhWA9NgAowZ~X| zNlYZ144_$ICeMKugI7iQ;W3jb5v{O_Yx2DG)TzČD4iX0aHlaNBeQnR--5$`>^ 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

TV*mC@ChNVgo^b=bfUx8V&Clpdn2 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

arf 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

pW^K$PYcM}X|w=apcHVTF) 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

95Lx#hSJXyz8#_Wwsgd^pBkxAH|NDl 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

+H@?86X5%B9dpELU+ zB=1o|3;QFAZ|0N#@Ck+oM1~dvebnwDnE7K0EN>8P>O6M_;x*`WXx!a7Fdox`gMwA16rC=FJrg0X;XdxV4m z4+jW5reiJYtSv5O->z+x_RbG_mw=gcSz7wF3e0rTVJ3O<+I#g$xMbS3?R1k!f?)IQ z7JS9K$*DeC6|x!tcl=J~j{97xvXqhZAKL&gb%Z5mS)-(qcu+!Bpos8up^79CTcc!# znj2y19inS?>eAv@R$8-5}Ju8!7@E=8V6fxN?2kgC>mA2}Wvh zkk7#6Y`7DpOy0F@URH;aDNBd@U%4;efjO}O*%v#XMC5o7oCAcZ@oh8ropmfv(JzN%=Zy6~`l z$GQ;J-a#_YQSAB;=0yO}hXYt>oH}jY?|HuCc|vOnOWzy8AC{KM-_HdSi6RZ-~7f5fYH8cHHE(?YTS)g7Pr>#of!qIU>4ajq3Mz zzJ!{2T&5tT^Z!X2P(#0s^0H5HQ5Or0-xXTtlxC%nGew?b+EcN&S`Gh}VN zO15%=P;k#ex59i|5*W971rS9z91u3s4s(MxrD{@lhJ zy6@T}BCamG?({0&8IWm|`lbD{CxFBEbz^Mu16sLGsFoHqjfxMFH9_DUtVtV=7kS8D zrBZN#f7i5Qz*t{_{#VGwiFLV{{W~%^af{h@N_0*Hz;2r|>f$G)zhwusm$+De=wfUk zHO8S5PXt4Y2v$5cZHH0N%G-X%1V_?SPFz3te(T z*qyf>qH%Wr0ag9rAY8nYS#MXmjX0-z;%IA_%}r;@i<3jh z7LKrxZxV_(3!Ceg)R%hGR0@JV?dX^?KNIys#fJU(8u53#=MVq>{3Tp_WlBYGGAE4r z4P~7FeV@YLrvxtSpui#C-o7{rh0R97TL>}*vAm<>nGkpq(|FrD6A?7M?$_yXG6PE> z8uM$G(nH8)Xk|FWh_^p;Ci2rliYTeQ?OSaxrI%z8QOWIF5m@Pa6Oqp8>^m%T1@7!b zUW-Z70Nw=)OJw)Rt>#M{5?AysCV73xOi3Lz=jR0b&u_uIBBt8A$D&M$Oq%4YjRsG* zmb-UtJR{aS!v2J$;)PIhX%?^zU@7+vizX#fOX85T@M4NB@RJnTZ%(YKsy!7WyreJwD{WV%a3rOIE61V{quEK<4tDY;bJ{&a(S0GRUGqUm-@#39W#cgFz`3A7lf42b%oA50 z=a-XDF+5w>wQj;ag;Le|&J32SAy5Cf`PU4-FD|d1j}QI?E*ys?aLRq(TGlj=K=vul z7A1pu5;Ol?xrS0W;OFOxK9;{6U|GFFy+g-^grz!`z3N5$|3TE+B0TNydaPn-CVD+BGn@fPl}o!=^q9U8$b{Lx^Vl1+8@T z*OKQ-w{Ij7Y2zphgUK_8MU@xegFH;qXKrkKUKoY8(y(d&SI3IzZD$U3C65_cxkE2D z%`&DbTCmog2QhDAo_j+bM@A&zx;+@?4xLt~g!k;kPCCdtZ%J8{J07}8Ah;BT?KJ$V zrRWA7jpeLL+u{1b@MS9({9+Spg)F^<`^7^|s^Mwjf}KM(!#;lKMrd*crhb5lk`WnN z5cgigu$~@~T#(@I@4<+MM%w?C$AoV;n+>mxkX4qZ-RbzK=)2%Fmq}!d@19S$@2MwDYOVGprJEN`q|w{wspMj6Yhwr5(Z_(-rgG zs;qdO9@046Ir3eNX;j&n6`j@U5M*Ao7h<|SC?DyB(f+vB0B@E4kbL&(r=W%lFQV-q zp9cLT@Pw?9tK<;0N0i7DE#P|)&~@4|$G!@B7;xw?9x5BfJ;GcEV;GuV$5=$i2sEaL&grMTbn*ypzdreMn3A^T9 zV%Fe0#Wx;I-7Gq$b?OzzlJ9m3=0-k=?Tr*KMt!Iz=LK!=Dmg~&b?w2H9ddZNkF%t& zbJu$&y>;2)^67Le>#^72p=Sp86uDLc|31Gfg2m4Xd@Op+tvnH%{>30N7BFs>=1V(K zg-Gnp`R+dIyG6IfuhGM`6j=a3hF0mO#~`Y!B#A$aGt_s6f>nl8LQK}p?7(EN9<4%! zKl8^K+GM`vwy82)34j0tb5k3iAtIzr-j#I`yQz71dPd|!nYqKj_=i}*9h|0e5T11U zKd9gK9;G?pS8sHAV7nsXvzk`2clB&IY5S}X9mN^0ceca{R~hg_t5Gq4|NsB}!H3&e zHwMolUrocy_-YF16r_xBc*gK1F+Tt4!)mB6qg~IKf9osA445}9-;Sb)nna?<|fkrK2&L>7~P8@D;DUuI8iz@0lCv;2INY+ zv<1}Yr@c*wN~(vVl-6AJ7214JPvlI^~W5U|R`Thvj0ngBd`E_XiLzh3U9 zOe^Y-Sid&L1yol7#M0u2D9x`g_eN2Zv(k2vF=o8|^(tjJbO)ApaL*J8-6e%bc{hE8 zucsTrTkl4SfKLR;zr;ZVmBmiStXqC%mvBT)RAp_$u$EuM>D;~nNdk)L$R>bD(gz*; zJUG9sa$@6rWkRlos{i?Cs3eTZsBC67JN=9cT)OnGA8*hUOhyGmUbj}o_)8cn5A0V1 zgl^XDe*tWcS^MO6OBk@PvyM7CQ%p5jn;<4aZG%sc+Mju-L#2H8|K8hws>QM(h0Q;~ ziZ-bw$whsMUH}xO$msH-)aO4-S~JgHB%sdDp(ok%=Wq%*M_%RI4$PZfTOZO@kq|NB zAyH%Q5yomQBlpGQSWAw0oW5eD_USD{N-I;+LBQ73jWY-U1qJ-fc8FkhEIU`P04=yJ zL%8U;bDZQ!_oIIC~8iao$NwUazQpdR!ZHwwMU|LbUpBrD+@6T(m3^Aj| zBmbj`1LmRyqp`nFC=tb4aFLkdUI+2`!)}N|A<4l?pXq<4rnK71 zYf~!4-U8btR@nARBc<0vz|&s;I3u&cg>~B@f`x^zOwUBd?zz2|!)Chjx{R0z3ib4p zG%YtuGgpA2YoqC6g*Y9@NGgkLp6 z$KdC3DHpjJQrJa8_XY+s&uA?cG<-I5o9Z*yAMbNk@_j@5eph48JDVtnv>BHN{^kt& z4NRtVE5|-FemPgs>FBcqiq^!%1*@=)rCrj6MAm5w4+3m8T#C<>7h z06MS&MvuPQj<@UZa9Xj$eNAr05yV##22ubuDL^uU01p%%yU?_%<@f*drJ{xCa=ixt zkr=~&F}^!DP;+O5Nr@Yz7hH9@C=99>-g$6Zi>x@@2u^;nKf7Rxgg6G39!n+&Ligjw z@C$$;pTHN2WkI-wnG{S!gesoj&1JlDRM4WJhmQLeDG|yW*lZspx8MNswE7rXd1TT{ znm#BYQslGv{x*RK`Ed$0=)jw$!c zDbjUSMCpARLJ0%5)!-#ALN5lvRR#3`+ZdeNdXYX%JaELqsnJ6*wvu`!%Nh1{^rzcN zytY6#-}AV^UYharQV?f$3PCJ9%kbUPLsEg}+btPdz>7 z6jMp42mQWN?jr3pq(}nW61jfUu53fqAET-PcWuOKjE^6-3Zc5Vu!`1bpMVQ2mJ&1K>o=lSDLmc(hC^2P}Sm6@Z7SCy+9VA8Vo1s!9QP=o< zzM|h(5{`ffX@s1j*v0n1M>v7hI7ZYO*>`11Vj6^3>wmn6h@vi}?nfA7ozy;J$4Htr z2wH}P0Py_(z-ms$W0ZQYviKd`Tci>z^@R7@p8uvHmPp=xTzYlBg6VEvPN`tU#yfSvCj=Tg1pyjti{_0S+YxdZK_s>%*_(ZrVZmpa~ zGeU`*Cr&ahLHluLf}a^~*S&B5`3r5b&Szhr0Icv{xXzY?T2C$IPIcLPd(E=<+K=d# zM{x;lhFcHMTMq6rVK79v>@J`UCE?!TZ&PLk^HmGK&yF=2fjX3h;$N0=XjZU{p^<0f zQFC1ngQ7SAWnKf8jL)gxeY!y3_{KzpEuf$nMH|L*olp#z6q4}?i8W+lYuz{{agUo{ z&el{h?82()ySBrYprr5&vY$nGCL$Ot%w}jg+DACG=WmyGxx|;IJ%-67VT`uGR#u|j zVgQkK$uw9zHQ04=s5m;?idRP{t|`Io|6%hAMJQGb4*}#2k>+2ysu*VGuvn6HhU(0 zm7@oEtATu9FH@Nrbrls%`quU7oD)r-r}YwjLe&sP`j&^x|@fTxJua^dDs&`j&$sQpqd-6(*jVbHV5SmbB|E7@{V6)7tb;9~_J@`T7 zZ)WNP?Zy$or_LiV>(PDrq@=q|a>{~))Xk3Mwiud*okWpX+ae~qkTJCjGw^8XT8>G& zqc;Da4R3|vP5=3Dz>`AL-x)j@bWy|RXAX)$Ym8jL|J@Jk+nd)}l8hG9I(_)F2))&C ze(;D}AgzY&Ucd)1#{4+&EYTs35);n!dy&Q#&Frn~9XmWZ+6E-MqR2k(zn9iz{qGJy z?|9?B??xftK{5~N!flOT)9@_$(&~ov2kkYd zNAt}c?Q~ZhdzztFH`IU9{-iCDp6CcWQ`_YbosKJ1us;N~mneA<`~Ur>JduydV>s!7@%iz6Xq$NQZA!1n)37UemymP@(80E3^(49|cx zjVdUYs#%|diPTDxvc>sRb1AJ02!kzAFW0H&xzd8-jnsD?(k!@Fk!HVmS2uX}3#~84 zvjV^#2^Sp%h&mNF8?`xpC#I<)RDp&Wv(D2v$Q@IHe?j_Fs9tike(_}?;l`bj)4|2H zW9i1lKGMf09#oQn2{r?_jDZVeuCU+~hea|_16dbej|M&k1}OIKToXTt#P=9r08O?7 z=ucipQ+qhV-C=nRBpF_`4nIHoOW7^~@NaQp4UBZp0J55)(L<;DsjYLvuvmIk=yF!puy7h#26b-LnsA5xdGj+x;MyPNfUuO< zV<~B+8n6HV|EmF;s`Dcxj|R}!C;#Wz3y2G8ry@1rDiahU{;~}})Uo@)?YYYiVAW~8 zF?G?^c=n2jnv|`VMszAR4EcuiVGH}g_R5)e+!4UsxM=WbcCFL?)s1H{rmIxyK#}mZ z!(Xr%i;Z^$_i@PEb~t`Bh36P~UHzNY9`%q;#UC&kQ+-zZ#OY)9g2T{(37G#(c?bis z!cut83Jtffh6uaGez(9>U{mQxsziAyh^cG=K~Hblct$mHeg9CnU*T+sVZc8KD)~B9 zA^E9@)Kmg2cANspjeGckiE-`V{I^Vvwf1?ckTQYYcQErxRT?sAW^yeaG0|q?7{tX_ zvpTV^>kfX^s*yC>^e3qv`&57a-02wnqQ3vWHdO{sF#J4T$>9JMOIo|BzNAhW zQgS8R^>M)s0CDO3PqQPrF@AtVUUfFNwQ*_S3lfkDctuxzB!W=i1jHE9(nr)<(Uev}O z`b`)$L!q1VW^E&k%7@JNIrOY(Z*g#-eZ6jZ25HFz_;QQ|SzHy0+IiGoY@*Cu<>m>n z%;o;8=EX}d^44t^uuv2hpX%M>u&XY_Ys+8=ETpYRC%}q_BV%d*+q|AZ&qzGpjC(U4 zl!%LZ_i$MZGe!nN%VLKJ02GqQK*ZzpW?{(Q{;N%Ut&AW#*8GDTtKkMsC`+}F^wS#g07*c$zxE~}Q;he#soIJCB@__t$rBi%bQ|~v>cu`o1J4Bd!t~#k zA?@Sx7Rs7(*K_)vwX;X-C&XPzqH~FcjNp6AD!jZDHow?i*L`hYQ9B$&mLbDAlrN0Y z3sre8kd4?IWQ23i<0+S4BN+KdjqXM-*htcyh0@;B6qNgDwTM!eq8~ye&`Z0^%aV%t z0HKc(Zo2EyI;a|+6XSlngd>ObI~{O8e;uv zL??h$wr<#BJTo`q%ABNAoaewrjCw9S0b4usNA#kcO;bhX&dy%4QXhQ2rA?Rj-_SQj zb!L(Qd4vG4?H)CCOT}#G>(wT#v7K9dqDJXPi}Y^x&_C?u#qi6DQvK{-h{z*`w>~5s z#Hs__aO|Y6w&#b?-my^PUcdcT*{l+io{%m7z$vSyuRCx1Kzc)^cu<+NPcEZJ?QI>< zlg_mB#RX|$5HadY+>sn>Qqz7+&PqJL8e7T5_J|OSb68ikD9!B2e?~Y0mP10)w>QKn z^r2eABkT@SiM)u$u;=9J#!nyH(|{kg68OA}Q-C@{~)srYbeQZvl?bk_TeLN>I=2x?wPY z8NI5>m#kUa_SKAIZhcDOwO{KiQXkMvNhp3iN?I_@LHvGFBRp867D3NaJ89t#$T=ot z>4sSyq7eWquxxJukyLtBI;GZ#!^lG#lY#LcKm0@(2R!R#Tz58ng8n=?lR~&a(Q8xAVrGl62r2EV!AD{t3aI6f zmMa`%sv5K7ca?2BI)vNpj_a<^XL?blDH7{4tny9A_2q5fnuTzJ!CGl=)iH${CIB9! z1cv#pb{E7uDfVe zcuVKvu~vpHf44Oi(7dX&?H3tB%goQ-)go(E*8l4zGerS_8PHsro`vH1CaxUQ-zrLSp3MVVeZ^ho z=WRyZ$K%=TL|^Kz1a1^?35SBhechYfR@Tt*CI-9XCYPwr8ud1v0cydHRUCx{^HqA* zKra`8R+-%vJA-P@Wv$y6sLG0{sk~v^h#a&@RRJ174rnUfu|&PU zpigCIzv!|Od6Vv}z8d&d9$7v>2oR)-8c)YEtpyytO z4ly`dyvh<7;7Bu48>8`soR1|WSbi`LJbUb~o*%Ix13xnV|Np6%+PyB>b39A3zZ|Oc z_cbkcutnbQ%-eSsBSKQG&;SP)Ia5TGC-YCix&=ZDj6*$0XU+VP0B5HTMy#5{WP=jD zeka@1YR*{#NR(u=>0SL`4RhOEs|Ii`EYJiB{93$o4EvxlbF&r55<(hH1^+3s%3S;$SCiML27A69BPU4^%&oxwPp3@%E~h_Lj~q>^yMUa z;*;!sVsgZS+mNMPyN5SWA-a8DCFW|OVaoT-5v*w(Op+mJr6vq2?YNs)@ZIyXgSi_y zUC7JodrfPj6b=CO@&Q(}OuPz^(<=cTn9}f}R6jgj#+B-Apc~GK$dCaW*)D9$D=C`@ z%(?T1DpI(|x9k2Emd;5;psheD{G^p)rwqgR%%aijw=G~0cOGB?? z#2S&hqzmttrHK-Zopom2TW%nMytZavj#TK>wn6>vWy4*=hBG|00{>Ym@erTtaqq3N zQZ?@H@{5*Ij2B_-#JBET4_s<<)~^qIE$GU)-x+-vQ>6W7qe1}4zLC%cCY+E8Cie^* zz1D|-hSo857n%P8=$~7F-&MP3MSDX2r`uFL>0%JKZC9yqO`$M(9s(J7;!*{)iifRc zDU(#EvKE9kgxu)lRyie0f1Fc}d5?YG3D^NND);c=UuKkoqZM!fV0?TF(&zv3;F=Je z@m+Ll5+ffYteH;#jgMqQ=NCvM|I7M+C=yG(om@@GauTF*BnF3z#mY&yG&#=&f3IJ8 zL#*o(O`9+YlykN$B`$+QvOW2RkgVU|jJ2?f#?x7f&$g4Z=-X5BdDl#cb%d&ApvvbAs1`3D8I`I;&`zk6vUAg2QEISw~ ze`*N=>8uk&43D8*3lwrsfI#E3GNY}qW355eyD-~AlInw}-oaKo{Q(9QU0dwB*qW+; zu~6-mt6^<3bw@TQ1wEvJ2;W*dy_(-Ak8(*K@y+Ik1QMsDxsUb?x=h+^h4_$1#v_iy zOBi9trHh>tOJP}*^Wk@<#nWm4h`4@Gv!TYH1RYi+9tJyTy&-I6?F#*c^&J`tKRfJV zwWHQ)Im^q_EyAzC$v3B5^^NtC8JJ=@qW4k-qy(b~UIOTa!+>hq$gNt5B1>B=KgV$D96uIffzcDCM}C zNIr&hw&LKUu#5ph5PAO`UgJSlk=3A=ph;-= z(#-x9pYa`uuAWbb0co}B29hohn|SvUYcgWPlV7$F8uymoq?^)KMb_xBB!lWis^I0= z7TRcqdJgPpopjYWS<}B^EfC z;FnPg@5djTEt^yR#cEP}B)bWH=PvWaxo5Ty%6>di$_+iMSC)z>N;tj7g$c) z*)aO*Ks2u+r##yK!xo!HB9q<44h#Cgg)x#Ca2N=(3B}Vkg>bLc$_M`7R~yU#chDUJ z%TLK~PGv^$=9&f-l+S4qt$$J{VEI7+v~a+`9se;I^%R9eMZdnj`QT-e{*I`4K{`pkw8wK9l>;58n5Z%*TV${P-UrAJ)X8g~7 zl4f{#BwK;!tDm?9LoBAlR)+B>-u;Eq8m`$`dE>p5veDx9fcYpE;hASDkLXkdDUAWc z1wWSj!sdBq8RXp!KVcWz1G@eU@Ox#T5he>_6+zsMO-=zL34vkkrZ=&FHPodqJu67k zStdBwBw$BKyo4DJe(a)_=z=0)9u79|_P=8k$J#F|;Pnp;vK6L--~~5#G9&iCVtKHx zW0=NZG8V5gGaBiuEhvE8}rFLPx?KBM=W+K<0s3)(^0hN1)<zhiykmtoWJz=bp&0MDx#!Y-}IV?sEJB5?G<`qPv;bd?B3i7QzO;)B1# zrx~IK8zzK?$u~}~{bVpSC!jq@Df5U_(b2LF7nw0zACA3zo@gr& zd|vgg!kg6p@wYLW;Ga?6eaAi$sD@yviMM`0`{Lo#ipQQe)2ONtvSY3S180@?;D=nS zE}c1`~kC$V^QQQlv^022*qZY-Iz{oN^yDU42*0>UZN0Nbfn09zhr1A_z0~iV686h%8eExkB;&ePbH&et zJm(r^2mml5O#Kj#Tn&v+BOkOW6EkZyVHe&fsy_md;?# zcbQ3ZNm_clGAwp>KrX?6{dp0Yf-;(txHa^2D7C-dV!RS?*46*1C>~2_X`3Sxj)SP) zKKH&H?IIo4b+ov9<^KYyy+f6JbzeJ=@rR|<$dppxYFti*@sC6pR7I5R9Selv-vcg= z20BTs-h@0xo02S^dzqahF(lF#vwaI_u{9#!_A!p`s6D-nQy{p4CMzz*P*bas3BPl( zF7Q@vuspl(&-G`$(JXS8q=wkM*W|LVn*Pg^K079HA@R0qRl%{U#oO&Rygrozi$MK3 z;_Abq%+(6KETW9|SX5;&gE}?OuDXi!n7s^zDJt_;X@w=|a95Kl)EBm8_7dyJ6}m#Z zSArEA0cEFChziGep(lsnAwhoSQaxzf|0vgMXVif)PAh(tFVLyuJC01v=KK+wn7g!{ zTk)neml)6VzY=~HBxx^T`j^m0_Fu5Y!g5AKIHuE5S1Cz&w+{TD4urmxyC$SDQg@Tlkdcka^bQ)YlzP7^YVZ*yZ1Y!gP0!w)Y3)e!~{&vS1vS>CFfySn9dl|K=}JRqC)Mwx z-!t~03*1Z%?_ipR9Ajn3z&~8(}nWrsAZ{IT#uTk z%UQXyQ_>|FdJ7&Cr&cs~Z&~Y+e<=r|HGB?xW%HMeE7jQ-xKi>Chb+7uo$XnJQ;8LK zZ#?|D@)XR*dhNeSvgyjA^zhPin104DXm?)-vb(XtCvf?wZxhAaS`xuZ%1{+ODJ{{GWJz$)9 ztk?oqCuhO)yI3&Oxzjq=mw;IYnt+p5uZlvdQ>pvJ{GN+gY?wL6Ts`1$!vvzLoR~wD z%S!=srf>O*+kU$C0Y6*zR5)jgy|<|)|0iz@r}Z0x{^xceP#-BU`uXimz(Cvg@SApv zAKDZ)AOE(B$CjsXoBnaQat&mc37`fZZ0FNV$m~D9ETo5Tt~+B~n^Yplu@>70^`8=z z+t&id*MNelH;n<4*dmsY5dEo)arYYLzQ)PAzb>y^otmffs}K@)rP_U{y(Lr zVQim!GEW)l3iVJ}fZ$XoyDBc7frvWPJ@7*cMNbaZfrM|=Jue3!O!TaJMiS}Rw@mcC z3&5=3X?^cXVJXKo5VQ*2N%bDJBzq!+_vA%Y#bN+Xt5Acy<(MQlda#f~vRju{amt(e zi&IdMC>gq`ousT7>!GWYF`_9Lg1Fe^i8i5~9l2`)B9@hb+8Um$5F-~Q6>)uNo21Pj zvOX!hzbgHBV)}1~I@v@*SgjIbP@ znDilw2o5wPSzi#jsL}@;kQ#zp5_j(S2ENxX%K>-{a3<`(y~n5ld@$+t*AHnm2?Hs0 zUCi|f=KqjdtHdsw0$FO!#sC1B>ze1h_vM%cSR=>5@OkZ6^GK$pW+USxp+hV1+5o~+ zN_7MijhFM052?o>7HFm5wk}bjUp`G8_<`_7Sii#)jAB|DibhVdpXs&+=WcJj1I1Z9)ZTD+8l?T|>6A?>P4jOrTHDf}E)pE`FJM+u+v#1x! zpZVlOgRUe~r-H}c0J)V-nc!mSvj^Y{f>F$m(~*D{(S7oo|Nl{=nS%2ZqN#92=#qzE zbNcf_0)6@&O>CP1m|kAs3?^O1MYnQWzhf^_pr$%IX`gh0Iq$F>e)I3=b~!BOt)_Uj zgxnmGN>~6pL!OhW2LCj`RH$bA_OjGufUlC}>+?!sYF5v$5Q{BR_2b#d89vb)qcUnv z;G7H+=jqsF2GO7mWn9mNiaJvj%}?4?q6ALXqnz^_9#G8c`}C zm{;StH!*xt7@W9ulZ#{G0V*&j*F%egPGzVcN=B4Lm@T8$K`&>s@BY?^ZwUp?K8c} zmR$U4jBs2YZ^yTY!8F8U-&vy>O_jfUCIHZ$Eahw7UT0^(3c#+@8u?F!9{b;+y`z8L zT~-TdQ&I1N57hd;+PP6&GU=10^cWsIcec_%`GHX|GNPsT2m0a0S;u)}otOt`kU6&0 ze{v>7o0npEM(KB^XTIp+ufy*gF`}(Hy7xh+1;6`)N+ZduQ)r$Gg?8Eu9FmEe`dfYv zewl;uUHWL24OSC1k(+&Lwr@zK-~Qj{Or=o!-qKW|oo1Cl*L?Ih{4uJ4!?2*t zo3#8ZMIcJCV5|K?$lnk0AUB*Nyk1%r&-o;j-aw@;<&Y|6yZv4(F|$^Sx0@EfQz|E; zGi7OP6)gN!FbE9HiEs%gH-Jc}5qBQr_e1>}Jjt(YAw+@P|C2;*R(}~$h=vLpkULyV z%y0yf>7y!~N4+7Q=~-T7{l#%Dm9T4*QZJ~-nUA;%xOfOg6eL6dNSqnno;`A)F>Sj- z84BeCKPZldF3LH_=`EHpT7Om&F&of)2zCI?q=s%$4rVQxSlr1^zJBx0J$_ke&WMxFk!O(s zu}yaNNjx{!M38G0Th#M7XD*;Ytuvip?DGk6q8cwtWIzmmR4Tc@t;;R`a2dsh3lwo$ zNc2hy@Tvs`Ken?_oe&~ccNjw+uU~>Z^%t*g1AeoZ@YTm+R0o*yS>qVK;RZHa?6xkT z{}K%QkIv~JDLEFji2$|&p}MemgJkyM1b@- zIqrC`acvh=bs@*4`CmR(eCsk6?VO3|D^_8_to+mBa=HmVLnYt3@C#b;)$?h>95~l= zI)@jbe{f+tPoMNFYi$iuf3?w3x+3qy+E|$BSw{Nr@14)P^i&KDqiGMU!pnwN`xtat zEKtuy0W3$OFeivxaA?y`2Xv(IA^0%O-!O$U5_)4U3!KWGwTHr7n zm3!*y_k8ng0)vU1iO;%xoLcqFr}M&|U4YzoUP&*n+0l4#S)jh1t5-Z7B&hYcLYR4I z@F#woiBms=4~)Q&wYq@T-xO{H_mER4UfepIu=1SgUnv$IG5V&zGvWyH6u)>+K8@=0 zJ()doB6MyTY@Xl%SmdacJ@XX_Rq-Jctnhz-*}L{yTr@}L#NOkm;=%~*M9a0^y4|~Z z4(-(iv{6rhRX_YiR;^Y{x=Tqa+{cDj)j#tu z?-}_MBN6$D*62gi9{3ao|JpIafOr{ae<<|ds}>%egqtNAKr63Trpq`GtYy6+%8&j! z0aE7cfCJP{etXN;kHB%zunLCk$r0{HzNkTOu@(f^WKb#PM86OCM+n;V# z>Yh%LvHs#>Y2QA|%c!+DhGFmZegk4+%pyb0HCQ@sMovre&!&hK_Z_O$c*?^!qy9yD zEZiQ|Fh>;J+Y+VMvZe1JHnD;WAGSb_Q}K9*3Lt8vJTMIuk+%R>i7Z@1A&>w6|MfLn z{Z*k-|tjImUnTxya+quR-XDU4U+Y76@L5w|Nrv;|Ngq#mf^EczqO&rbb6q* z8aZvJ_H8-(7+zckpoV)x1fQNb^s)f_=+fe7pha2c0z7Lae?>xhWvNWAR~deeP46)3 z)8nd2*cHH!a5)a1C``o1CdP2u*(s_(pPH^{!1aw;E~pav0BaZs8&70mg>A^ttq%It=Q~` z*w^a)7{dC?DciJb&vkBqc0)P;|NenDt0ODuANQcVXmq=AAVEL=HnBbMUGrAy?@S8< za8-rElfmRblODz$(xGAtnUmsqq-5CEeE@)pAu`!JW`h%`h~$XYhv-#q7)w0}_6DA> z(1(`M`NbC&N)9;Wuq_TMe9KUGE~>uQKMNJQ#^|jqV4VV-XlA|XB)l#7A`zWK8V>=A zeJd@^xEU4I{l0^of9)RwKmOOH>nc~Ar!1~&F)-7=K^}ulZ=WZGz4_B<^HvsZPpbTfP^A`d zO?kx13ZSEw0K)%mzAR%#quWeStu8#Ciw712_G>adJLQ8hWU@&5{b??AMn_Z=!FsI9 z9dol8tVrLu=;eus?{zb}VW^r`@>AYxtn;qn<224igWd`68=!5%OzsmFf=u!u7UFZs zRz#5s+KbNKS`9+lw0!8essv(NYK2v;60hDVD`s_X5U>${5fXRoJJs{+ry~`#2ll8U z@kSW&z@_W{!e3{Zv@9dj0}>wZL`0h~WqF@bMhW>2( z5n<}u9QH<|c~;e_tyD|M3%Ps#%jL`IC177kXw7;#Uvy9XS`0B+LEPp~U}VHXJ56^G4NJv8z}j;hfB*i=tG>G{T2>l5 zRn$t|{gCaDEYbTBAb|5~YiKM8BhN0vAjyuLe4210@jXVhNTip{&Z|Ugz8I z!ex3DX{(tBgk#0z^>NXcS>x7SmMZey`ROXZUMD|H4EP=?@&r8Lk2Y?%#*+e03 zVoY;E$Sd=$f5LU#XD7Jd18Uf{9n61uexd?bBag#0wQ1l&n2O{+bVbGkW#y$kvj{{J zk~efro8=~=t#7W&W^^+prbY)R{#Z08LOnE3tIHvz-bcbkl>$(q869zDLLXWwi9Ir;u}o8R8g^F3#UFGlyYd|4l#xpzoXV%s;1m~cHl!y@>w4R1u>CFl%Dci= z5ZtSCG378TlD&ts6wsPV@?7p{h6HaHfaC@GC}kZ`em9ucH5{m~%(li$nBp>F(%RKu zL4M;NcNrJ|P9>=8%6l}s+BTH>*6ROj^MezYW7tsJC5NL7L$&&MR*t&*Xa)x%N5L*#6RAtCLv}FM5Gq+HmbVIvOH+O7x zA+y`x0p1wkvXtpx4EEan;J7$(54D4v~DGKVp!UtrVXkP@$KX^AJ|P8h2bZ&uPVW{RGe@2{KN$w&-1 zts#WtLTHQh3M2~yu=8ke!Fysj0lfZE5AOvS1wt|-AsUju`vR3;IrIcTg;H(XGf21y zg&I*`7(i0T4tzcZ|Nl8MCH=&DATn}_UWHNzP@E`$xYZa|Gh&*&U#+GL=60zy1-+{8 zVXtc~kbh5wb+w={8~tj2%iNA{)c^+|fB&hUG;{5HI0Ja(h{UuoxD3`7T3n}U(^vpz zLi-%f!j$Alc9V5cHx0$``{r$B%V)AUP=>V$mLL2?B!%#h_k%AgdlhGiFyu^`Pe|g_ zH{Kj!W+X9!U-Slfjuz-JHV)|`DuzHl{cB_O-Wpegw_P4*Mb4p;rw`57CWeNSqj|JC zf*8yfeiKkK5Y(R(j~O%rpf-WeX9p`S8@S+4Nb(Kd{$i36{x_fsO}9Vq?4%P{f4jgN zC8gIr2f`B66yf_h!65^gMReQZ{Z7(I`>#OKBlO=4L&-PQvhhn&_z^jO)yjF!&-KBqm|fgEB&uqm7EZ~og<4T3nW3^h2rVXZrgjoS zP|BkYtU}|j81yD_Ji2ZIe;J=_llH2pKsW1kKDa;e+hRf$zT32(VaS79cyPvB>@aeJ z6-zURcth&RbGaCvLZ`YBFc#rO=BF7RM{;SIraQ+kDqI`4k`Rr-|K7ULx&R$4^hOCz z{g3acjS9nqzAcT@CAxR)q-07HcVtb}lzt{39u$Kxq`~$p$tVMIC1A&$)8$#iaAv>(kZg=R2!gexc#E~2 zWTM0-9xl;Pn#rM>vA>7K;mreN05PBl@6d~UDaw5dKJPkxGj$?<0FaJQj=PONwjn8) z(J9TR5da0L{qdK_l(!8dIdmOkNa9VZ#iudgMPDBQli3Ac*IH(tR{I0m8fm6!e*L}^UJ1EYsn#%GJT0Y0#f)7i5}$l{@PI&Yd95$Q zw%+&Z`8w7xpv9#>Yqx&yrLSh;O>*{L#!=hdxI1+m5KE2?$FnZG8nZW#a9-}0(-f;x zUJkAJb@)@lcY!^Ou3smcgvI(x_UQhKA{vg$#%VPcikcP4-A|fG)NL#!4AVe)E@1p~ z-)T8Kh#fNlv=;-n?}vvE?5aiHqAa2&x^_|O!vjR2PrY2URN&yOB#R*0KPzmWya}t9 zvKDfTpv`SiRMW)JTszd`;N?dHzw;z12KaF6C8eP+?YR)ZvX|izlX7ml zwT`aXhU+SM{&l_ompZLc^%c!L_=&(aNiB$!vUtbw=oElaO8HXy--*yo9HV_e=(uX* zjsujv7e|QO7tV)OW^N-w(^tDgqe7HACYo?Djy-$9YSP~Ockh?mweX0DN~G_|jlK|M zYbT2$uxR{V82`bwDo~x`fNZ@OQ*1ff-V|-Z{3_E@fD&f?zxlP8uQbNw%GSQurkBR5mqSq^;Lq%7VB^CUj$d`ra*TdVWVA34;zZoycv@NnRzb&| z;nVl9ym)UhxQkz%S~$0M{*&G^k7=YW`B%@()W|8;T+Xc&ypSRutU{&q_EbE1`MA+b zvfT64ksRH5q%n9@B=CPT){Ce+qnSg%dN%eSHF?$ab)51suS`O9y^(iK?fnkAel%@Ev-VDkx4H)zx>7 zI=+3dNO-iHkHYt<{H!aeIeSr%_Ce#8OhHv|gdfZnN^jZ)i?(}O%}RS3j?R8T&?a_2 zSDbQ|1sh#8MtwVz(9&DjnV(icbXuX73M`i%UMFILkB5%5_1M>*>7QvuJRyeS~meA@i7mlufChqNyRn2TNs_4PB76 zsm%-eW^9AFfqs|9*v zB|LrYv=T7x>2!`EUnm>fay~2P|NkymF&qAS6OalI3R7SE*X)(UaElAvaoHEsGTfp9 ziN$FkO}K|tW#$AL@QTw3sp6TJcK^XKN4(Vwb#05Us*{ zYE=IVmYf!5fVCrxwp>sT=IUGd64;8V7}OVLrJ>wx)Fgtv$VdWoErAd>-d7IQYdJF+ z%at+gY~e4AwocH_L&odsIlC+y1KJrXBW!M#UTjQTI30Wsdm60MU?)}A1>!^;vy1*4 zvn*Yg#lq1?v}SWy5@n5JnT?+`>;XLhu22#axmu|7S?i%zoo>E+;l;2nNbVNjEg+Yf zD=P6bO6VRaidb~{QIkWAh%q95bHY+3j*jai9J|xRy3$aZ^@O{hcB?Ll_`*p~ z!@T2(Q%LGf2IR6zfEf(d-_H0K-E541e1r}J_dO~PBC!zMia4>nbdQ7pq88KVsQgC6 zKR-fI*T4A!&bE5Ye+?=j9O6o`^b33VLYuz1AB%M<3uO;2Yss6+2U|BD&?}}d0>=OU z|E+ZN5BD|h#{MyRSY*nJZ4IsQ$5V=ic5pJ@G`BRh?%9mnZre`x7ZOgf*{Zh@`PSUn z$#9G_(mUjj{zQDn0CuGQ{^;m^?UEryNbMX|YvU=jV*H%R&_`%{9S&aV_HpeKhzl|l zh)tTG`r1&Z;1k}R3FO|De}qbbiT*pk`5X%CxYwcJobJU0Gn_AxpU@?sGnPIqR@mow z8R1CvSHqDM5NxRSN0RRIzbGf18%zHv6vC_ww9z`)yD&XqlX|YdfPJ^;w$A@-w$pKS zGA-sLfqafuVsH81|D{JKGqh*K2UTq{gitsr!7y6<$QqhnkhO!~dnQpsu8CR2VLSir zD=fDSgP-)n1aoJ#32oXn>Vd!9?6-&m`GD&H#{}ltx`a+kj3(p_Hp(%k_mX=7N4Z(W66UUS%n35`iI)S6WZ+N{`=N@JSeYgYhp%WUCjqjglEi2?wstz|D}X?N;_}m zu}Vu)?@@;G($HEWG|c)mz3UH24&Ko>4)+@;$G$c7Xf{Ld04i~RXpSO1FWvC}|I!UC#!XSQBE88RG|Ap@`ecYYLszEe zM;sC}yXUU&q|V~&T|!ea4EcUqh%#KKj~D@PYS3&EZh4Q?YudVW=)xzBwKY$KSGBmH z_lnHec8z8mF7^_CUIEsMqgeE0F%0Ab{o7O5h@bnJ!XON!hSl%Y1Hmf~DXDeI+#mJ- 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�e*aG%zESR{B! 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%0Ds383kwm|jkse#?0}QJ~KH+*oZDuC`dhIa*R8 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

BYEH|LcdnrEX^6br#t^z{|vT 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%0DO6Dt-rhubbdw$&cnafR1l`$vA{m;0ScH50wg}b zDdmMbnN$?sRRh6tg?B@b3S!)XOz0P_@UPf#!%#pYxsG|WSQ?xI_IxJuI526g!4yvo zDWtWi%+kCndXZJa`u7Hwo#ndXRs@=cg$CyY`vW{|MZb72fUPDAgSG#g9DhfcfsNhq_|4h zs|isR*TG^f=}}rAXEz!>O+Q@h!?i;n`TnX;yBtfDuj`$pY`c+z>TqioGOy@t>4P)7 z88Rb00Wx!dN=TmrAXcz+r}(qD#5hxo@_)S(2n?mj^15FzVj3d0rJr%KihYAwxI4e^ z%>IC^n;LIhMOi3SqkQ5<^`snfve9s5fu+Rs!y<-@jY@QgsZV+dLyG~fP^x0wyir1L zXih}gi(~XQV%{oC@o21`CVrz_q#IN~XqpWQL&x%tSF2S>u;m<4nKl`;$!@sRiqTv~ zaJ@j#?)thoqVExR33|?B-ciY9 z@a?s92b#r$FO||l4cFf;+4eUop!0vr&pSQFbLzN`8;T%Mk}$hku4vb4r2T5sIDp*d zs`5g<15kG8Uv-{h4fw67&Vd7;H(uY&rV(fGS8gOmPd*PZSZ!0s*ehAS=IhtCcWjBW zg;KZUzvR5f$GE0H5$S)OJyeO_DsBticAZH3b$}rRIs)13x!JjM6c5)Vi5an7zOXIq z0E&E-s@+Ja8_CCwyLW%}9r1v&x)-5y6!WM3FXU47Pz;PHo0BQWc}c+l08ffCzh{zCGs_Gg|Np~_ z>;IV>Kwrs%mOCgoV;UMeuA~@t?+QmX+nWe=zZZ$slC(x6^d9|-_#uu(wx+%M{ z-2;(XB-smocqCNwxwUV1b*c7Sw>=R*C{-Jm^WK__w8vgK-847Z64TH9M(PJc006ey z84$Ewd}y5H@BHEuN0rN;j)fZa{1OtLN#XP7s1ZhQaryVD@#*W=8%`kQt89eNPpnb0 z-?N=JQn+k_96Yj-TeB!&g4g)XC9@9I+pWJym-sAAmq7p&HRN!Pr@^R<8Xy6RKFC#3 zKud2Ja^OKFFt)4S?d%1G#l|V7^SluFN}y?iK(o3W)VpU{W*K3Ru)Wr}H7G+=6qg)8 z(d4L5@`12o>u;}KkNWmgUI#lG5R19kjq|b<<98|asgiOc>e

#F`j8l=R(|ouc6D*>cg{mtA`fA;m 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

&qNZhG?kZT^pYfdqJ;8#& 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